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
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `Parser.PerFunctionVariables`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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
    Modifier and Type | Method and Description
    --- | ---
    `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)