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

  - ### Field Summary

    Fields
    Modifier and Type | Field | 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 | Description
    --- | ---
    `Parser()` |
    `Parser​(CompilerEnvirons compilerEnv)` |
    `Parser​(CompilerEnvirons compilerEnv, ErrorReporter errorReporter)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | 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()` |
    `boolean` | `inUseStrictDirective()` |
    `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)` |
    `void` | `setDefaultUseStrictDirective​(boolean useStrict)` |
    `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)

    - #### setDefaultUseStrictDirective

          public void setDefaultUseStrictDirective​(boolean useStrict)

    - #### inUseStrictDirective

          public boolean inUseStrictDirective()