org.mozilla.javascript

## Class Parser

- java.lang.Object
- - org.mozilla.javascript.Parser

Direct Known Subclasses:
  IRFactory

    public class Parser
    extends java.lang.Object

This class implements the JavaScript parser.

It is based on the SpiderMonkey C source files jsparse.c and jsparse.h in the jsref package.

The parser generates an `AstRoot` parse tree representing the source code. No tree rewriting is permitted at this stage, so that the parse tree is a faithful representation of the source for frontend processing tools and IDEs.

This parser implementation is not intended to be reused after a parse finishes, and will throw an IllegalStateException() if invoked again.

Author:
  Mike McCabe, Brendan Eich
See Also:
  `TokenStream`

### Nested Class Summary

Nested Classes
`protected class` `Parser.PerFunctionVariables`

### Field Summary

Fields
`static int` `ARGC_LIMIT` Maximum number of allowed function or constructor arguments, to follow SpiderMonkey.
`protected boolean` `inUseStrictDirective`
`protected int` `nestingOfFunction`

### Constructor Summary

Constructors
Constructor and Description
`Parser()`
`Parser(CompilerEnvirons compilerEnv)`
`Parser(CompilerEnvirons compilerEnv, ErrorReporter errorReporter)`

### Method Summary

Methods
`protected void` `checkActivationName(java.lang.String name, int token)`
`protected void` `checkMutableReference(Node n)`
`protected Node` `createName(int type, java.lang.String name, Node child)`
`protected Node` `createName(java.lang.String name)`
`protected Node` `createNumber(double number)`
`protected Scope` `createScopeNode(int token, int lineno)` Create a node that can be used to hold lexically scoped variable definitions (via let declarations).
`boolean` `eof()`
`AstRoot` `parse(java.io.Reader sourceReader, java.lang.String sourceURI, int lineno)` Builds a parse tree from the given sourcereader.
`AstRoot` `parse(java.lang.String sourceString, java.lang.String sourceURI, int lineno)` Builds a parse tree from the given source string.
`protected AstNode` `removeParens(AstNode node)`
`protected void` `setIsGenerator()`
`protected void` `setRequiresActivation()`
`protected Node` `simpleAssignment(Node left, Node right)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### ARGC_LIMIT

    public static final int ARGC_LIMIT

Maximum number of allowed function or constructor arguments, to follow SpiderMonkey.

See Also:
  Constant Field Values

#### nestingOfFunction

    protected int nestingOfFunction

#### inUseStrictDirective

    protected boolean inUseStrictDirective

### Constructor Detail

#### Parser

    public Parser()

#### Parser

    public Parser(CompilerEnvirons compilerEnv)

#### Parser

    public Parser(CompilerEnvirons compilerEnv,
          ErrorReporter errorReporter)

### Method Detail

#### eof

    public boolean eof()

#### parse

    public AstRoot parse(java.lang.String sourceString,
                java.lang.String sourceURI,
                int lineno)

Builds a parse tree from the given source string.

Returns:
  an `AstRoot` object representing the parsed program. If the parse fails, `null` will be returned. (The parse failure will result in a call to the `ErrorReporter` from `CompilerEnvirons`.)

#### parse

    public AstRoot parse(java.io.Reader sourceReader,
                java.lang.String sourceURI,
                int lineno)
                  throws java.io.IOException

Builds a parse tree from the given sourcereader.

Throws:
  `java.io.IOException` - if the `Reader` encounters an error
See Also:
  `parse(String,String,int)`

#### checkActivationName

    protected void checkActivationName(java.lang.String name,
                           int token)

#### setRequiresActivation

    protected void setRequiresActivation()

#### setIsGenerator

    protected void setIsGenerator()

#### createName

    protected Node createName(java.lang.String name)

#### createName

    protected Node createName(int type,
                  java.lang.String name,
                  Node child)

#### createNumber

    protected Node createNumber(double number)

#### createScopeNode

    protected Scope createScopeNode(int token,
                        int lineno)

Create a node that can be used to hold lexically scoped variable definitions (via let declarations).

Parameters:
  `token` - the token of the node to create
  `lineno` - line number of source
Returns:
  the created node

#### simpleAssignment

    protected Node simpleAssignment(Node left,
                        Node right)

#### checkMutableReference

    protected void checkMutableReference(Node n)

#### removeParens

    protected AstNode removeParens(AstNode node)