org.mozilla.javascript
Class Parser

java.lang.Object
  extended by 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)