## 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
`protected class` `Parser.PerFunctionVariables`

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

Constructor Summary
`Parser()`
`Parser(CompilerEnvirons compilerEnv)`
`Parser(CompilerEnvirons compilerEnv, ErrorReporter errorReporter)`

Method Summary
`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)