javacc-7.0.3.grammars.EcmaScript.jjt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of javacc Show documentation
Show all versions of javacc Show documentation
JavaCC is a parser/scanner generator for Java.
/*
Copyright (c) 2004-2005, The Dojo Foundation
All Rights Reserved.
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
http://dojotoolkit.org/community/licensing.shtml
Code donated to the Dojo Foundation by AOL LLC under the terms of
the Dojo CCLA (http://dojotoolkit.org/ccla.txt).
*/
options {
/*
* Default value is true. If true, all methods and class variables
* are specified as static in the generated parser and token manager. This allows only
* one parser object to be present, but it improves the performance of the parser.
*/
STATIC = false;
/*
* Options for obtaining debugging information
*/
DEBUG_PARSER = false;
DEBUG_TOKEN_MANAGER = false;
/*
* Default value is false. When set to true, the generated parser
* uses an input stream object that processes Java Unicode escapes before
* sending characters to the token manager.
*/
JAVA_UNICODE_ESCAPE = true;
/*
* Default value is false. When set to true, the generated parser
* uses uses an input stream object that reads Unicode files. By default, ASCII files
* are assumed.
*/
UNICODE_INPUT = true;
/*
* Default value is false. Generate a multi mode parse tree.
* The default for this is false, generating a simple mode parse tree.
*/
MULTI=true;
/*
* Default value is false. Instead of making each non-decorated
* production an indefinite node, make it void instead.
*/
NODE_DEFAULT_VOID=true;
/*
* The package to generate the node classes into.
*/
NODE_PACKAGE = "org.dojo.jsl.parser";
/*
* Default value is false. Insert a jjtAccept() method in the
* node classes, and generate a visitor implementation with an entry for every
* node type used in the grammar.
*/
VISITOR=true;
/*
* Default value is false. Insert calls to user-defined parser
* methods on entry and exit of every node scope. See Node Scope Hooks above.
*/
NODE_SCOPE_HOOK=true;
/*
* JDK Version
*/
JDK_VERSION = "1.5";
}
PARSER_BEGIN(EcmaScript)
package org.dojo.jsl.parser;
import java.io.*;
import java.util.*;
public class EcmaScript {
public static void main(String args[]){
EcmaScript parser;
if(args.length == 0){
System.out.println("EcmaScript Parser: Reading from standard input . . .");
parser = new EcmaScript(System.in);
} else if(args.length == 1){
System.out.println("EcmaScript Parser: Reading from file " + args[0] + " . . .");
try {
parser = new EcmaScript(new FileInputStream(args[0]), "UTF-8");
} catch(java.io.FileNotFoundException e){
System.out.println("EcmaScript Parser: File " + args[0] + " not found.");
return;
}
} else {
System.out.println("EcmaScript Parser: Usage is one of:");
System.out.println(" EcmaScript < inputfile");
System.out.println("OR");
System.out.println(" EcmaScript inputfile");
return;
}
try {
SimpleNode n = parser.Program();
System.out.println("EcmaScript parser: EcmaScript program parsed successfully.");
} catch (ParseException e) {
System.out.println(e.getMessage());
System.out.println("EcmaScript parser: Encountered errors during parse.");
}
}
void jjtreeOpenNodeScope(Node n){
Token t = getToken(1);
if(t != null){
((SimpleNode) n).setBeginToken(t);
}
}
void jjtreeCloseNodeScope(Node n){
Token t = getToken(0);
if(t != null){
((SimpleNode) n).setEndToken(t);
}
}
}
PARSER_END(EcmaScript)
TOKEN_MGR_DECLS : {
public int htmlTokenNestingLevel = 0;
public boolean expectActionScript = false;
}
/*****************************************
* LEXICAL & REGEXP GRAMMARS STARTS HERE *
*****************************************/
/*
/* Section 7 : Lexical Conventions */
/*
TOKEN:
{
< SOURCE_CHAR: ["\u0000"-"\uFFFE"] >
}
MORE :
{
< INPUT_ELEMENT_DIV:
|
|
| <_TOKEN>
|
>
}
MORE:
{
< INPUTELEMENTREGEXP:
|
|
| <_TOKEN>
|
>
}
*/
/* Section 7.2 : White Space */
SPECIAL_TOKEN :
{
| | | | >
|
< #TAB: "\u0009" | "\t" > /* TAB */
|
< #VT: "\u000B" > /* Vertical Tab */
|
< #FF: "\u000C" | "\f"> /* Form Feed */
|
< #SP: "\u0020" | " " > /* Space */
|
< #NBSP: "\u00A0" > /* No-break space */
|
< #USP: /* Other Unicode space seperator */
["\u2000"]
| ["\u2001"]
| ["\u2002"]
| ["\u2003"]
| ["\u2004"]
| ["\u2005"]
| ["\u2006"]
| ["\u2007"]
| ["\u2008"]
| ["\u2009"]
| ["\u200A"]
| ["\u200B"]
| ["\u3000"]
>
}
/* Section 7.3 : Line Terminators */
SPECIAL_TOKEN :
{
| | | >
|
< #LF: "\n" > /* Line Feed */
|
< #CR: "\r" > /* Carriage Return */
|
< #LS: "\u2028" > /* Line separator */
|
< #PS: "\u2029" > /* Paragraph separator */
}
/* Comments */
MORE :
{
"//" : IN_SINGLE_LINE_COMMENT
|
"/*" : IN_MULTI_LINE_COMMENT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
MORE :
{
< ~[] >
}
/* Section 7.5.1: Reserved Words */
TOKEN :
{
< BREAK: "break" > : DEFAULT
|
< CONTINUE: "continue" > : DEFAULT
|
< DELETE: "delete" > : DEFAULT
|
< ELSE: "else" > : DEFAULT
|
< FOR: "for" > : DEFAULT
|
< FUNCTION: "function" > : DEFAULT
|
< IF: "if" > : DEFAULT
|
< IN: "in" > : DEFAULT
|
< NEW: "new" > : DEFAULT
|
< RETURN: "return" > : DEFAULT
|
< THIS: "this" > : IN_REGEX
|
< TYPEOF: "typeof" > : DEFAULT
|
< VAR: "var" > : DEFAULT
|
< VOID: "void" > : DEFAULT
|
< WHILE: "while" > : DEFAULT
|
< WITH: "with" > : DEFAULT
|
< CASE: "case" > : DEFAULT
|
< CATCH: "catch" > : DEFAULT
|
< CLASS: "class" > : DEFAULT
|
< CONST: "const" > : DEFAULT
|
< DEBUGGER: "debugger" > : DEFAULT
|
< _DEFAULT: "default" > : DEFAULT
|
< DO: "do" > : DEFAULT
|
< ENUM: "enum" > : DEFAULT
|
< EXPORT: "export" > : DEFAULT
|
< EXTENDS: "extends" > : DEFAULT
|
< FINALLY: "finally" > : DEFAULT
|
< IMPORT: "import" > : DEFAULT
|
< SUPER: "super" > : DEFAULT
|
< SWITCH: "switch" > : DEFAULT
|
< THROW: "throw" > : DEFAULT
|
< TRY: "try" > : DEFAULT
}
/* JScript .NET Tokens
TOKEN :
{
< BYTE: "byte" >
| < SBYTE: "sbyte" >
| < SHORT: "short" >
| < USHORT: "ushort" >
| < UINT: "uint" >
| < LONG: "long" >
| < ULONG: "ulong" >
| < FLOAT: "float" >
| < NUMBER: "Number" >
| < DOUBLE: "double" >
| < DECIMAL: "decimal" >
| < BOOLEAN: "boolean" >
| < STRING: "String" >
| < CHAR: "char" >
}
*/
/* Section 7.7: Punctuators */
TOKEN :
{
< LBRACE: "{" > : DEFAULT
|
< RBRACE: "}" > : IN_REGEX
|
< LPAREN: "(" > : DEFAULT
|
< RPAREN: ")" > : IN_REGEX
|
< LBRACKET: "[" > : DEFAULT
|
< RBRACKET: "]" > : IN_REGEX
|
< DOT: "." > : DEFAULT
|
< SEMICOLON: ";" > : DEFAULT
|
< COMMA: "," > : DEFAULT
|
< LT: "<" > : DEFAULT
|
< GT: ">" > : DEFAULT
|
< LE: "<=" > : DEFAULT
|
< GE: ">=" > : DEFAULT
|
< EQ: "==" > : DEFAULT
|
< NE: "!=" > : DEFAULT
|
< SEQ: "===" > : DEFAULT /* Strict Equals Operator */
|
< SNEQ: "!==" > : DEFAULT /* Strict Does-not-equal Operator */
|
< PLUS: "+" > : DEFAULT
|
< MINUS: "-" > : DEFAULT
|
< STAR: "*" > : DEFAULT
|
< REM: "%" > : DEFAULT
|
< INCR: "++" > : IN_REGEX
|
< DECR: "--" > : IN_REGEX
|
< LSHIFT: "<<" > : DEFAULT
|
< RSHIFT: ">>" > : DEFAULT
|
< RUNSHIFT: ">>>" > : DEFAULT /* Unsigned Right Shift Operator */
|
< BIT_AND: "&" > : DEFAULT
|
< BIT_OR: "|" > : DEFAULT
|
< XOR: "^" > : DEFAULT
|
< BANG: "!" > : DEFAULT
|
< TILDE: "~" > : IN_REGEX
|
< SC_AND: "&&" > : DEFAULT
|
< SC_OR: "||" > : DEFAULT
|
< HOOK: "?" > : DEFAULT
|
< COLON: ":" > : DEFAULT
|
< ASSIGN: "=" > : DEFAULT
|
< PLUSASSIGN: "+=" > : DEFAULT
|
< MINUSASSIGN: "-=" > : DEFAULT
|
< STARASSIGN: "*=" > : DEFAULT
|
< REMASSIGN: "%=" > : DEFAULT
|
< LSHIFTASSIGN: "<<=" > : DEFAULT
|
< RSIGNEDSHIFTASSIGN: ">>=" > : DEFAULT
|
< RUNSIGNEDSHIFTASSIGN: ">>>=" > : DEFAULT
|
< ANDASSIGN: "&=" > : DEFAULT
|
< ORASSIGN: "|=" > : DEFAULT
|
< XORASSIGN: "^=" > : DEFAULT
|
< INTANCE_OF: "instanceof" > : DEFAULT
}
/* Section 7.8.3: Numeric Literals */
TOKEN:
{
< DECIMAL_LITERAL :
"." ()? ()?
|
"." ()?
|
()?
> : IN_REGEX
|
< #NON_ZERO_DIGIT: ["1"-"9"] >
|
< #EXPONENT_PART: ("e" | "E") (["+","-"])? >
}
TOKEN:
{
< DECIMAL_INTEGER_LITERAL:
"0" | ()?
> : IN_REGEX
}
TOKEN:
{
< HEX_INTEGER_LITERAL: "0" ["x","X"] ()+ > : IN_REGEX
}
TOKEN:
{ < DECIMAL_DIGITS: ()+ > : IN_REGEX }
TOKEN:
{
< DECIMAL_DIGIT: ["0"-"9"] >
}
/* Section 7.8: Literals */
/*
MORE:
{
< LITERAL:
|
|
|
>
}
*/
/* Section 7.8.1: NULL Literals */
TOKEN:
{
< NULL_LITERAL: "null" > : IN_REGEX
}
/* Section 7.8.2: Boolean Literals */
TOKEN:
{
< BOOLEAN_LITERAL: "true" | "false" > : IN_REGEX
}
/* Section 7.8.4: String Literals */
TOKEN:
{
< STRING_LITERAL:
"\"" ()? "\"" | "'" ()? "'"
> : IN_REGEX
|
< #DOUBLE_STRING_CHARACTERS: ()* >
|
< #SINGLE_STRING_CHARACTERS: ()* >
|
< #DOUBLE_STRING_CHARACTER:
(~["\"","\\","\n","\r","\u2028","\u2029"])*
| "\\"
>
|
< #SINGLE_STRING_CHARACTER:
(~["'","\\","\n","\r","\u2028","\u2029"])
| "\\"
>
|
< #ESCAPE_SEQUENCE:
|
"0"
|
|
>
|
< #CHARACTER_ESCAPE_SEQUENCE:
|
>
|
< #SINGLE_ESCAPE_CHARACTER: ["'" , "\"" , "\\" , "b" , "f" , "n" , "r" , "t" , "v"] >
|
< #NON_ESCAPE_CHARACTER:
~["\n","\r","\u2028","\u2029"]
|
~["'" , "\"" , "\\" , "b" , "f" , "n" , "r" , "t" , "v", "x", "u"]
|
~["0"-"9"]
>
}
TOKEN:
{
< HEX_ESCAPE_SEQUENCE: "x" >
}
/*
TOKEN:
{
< ESCAPE_CHARACTER:
["'" , "\"" , "\\" , "b" , "f" , "n" , "r" , "t" , "v"]
| ["0"-"9"]
| "x"
| "u"
>
}
*/
/* Section 7.6: Identifiers */
TOKEN:
{
< IDENTIFIER_NAME: ()* > : IN_REGEX
|
< #IDENTIFIER_START:
|
|
|
>
|
< #IDENTIFIER_PART:
|
|
|
|
>
|
< #DOLLAR_SIGN: "$" >
|
< #UNDER_SCORE: "_" >
|
< #UNICODE_LETTER:
["A"-"Z"]
| ["a"-"z"]
| ["\u0041"-"\u005A"]
| ["\u0061"-"\u007A"]
| ["\u00AA"]
| ["\u00B5"]
| ["\u00BA"]
| ["\u00C0"-"\u00D6"]
| ["\u00D8"-"\u00F6"]
| ["\u00F8"-"\u021F"]
| ["\u0222"-"\u0233"]
| ["\u0250"-"\u02AD"]
| ["\u02B0"-"\u02B8"]
| ["\u02BB"-"\u02C1"]
| ["\u02D0"-"\u02D1"]
| ["\u02E0"-"\u02E4"]
| ["\u02EE"]
| ["\u037A"]
| ["\u0386"]
| ["\u0388"-"\u038A"]
| ["\u038C"]
| ["\u038E"-"\u03A1"]
| ["\u03A3"-"\u03CE"]
| ["\u03D0"-"\u03D7"]
| ["\u03DA"-"\u03F3"]
| ["\u0400"-"\u0481"]
| ["\u048C"-"\u04C4"]
| ["\u04C7"-"\u04C8"]
| ["\u04CB"-"\u04CC"]
| ["\u04D0"-"\u04F5"]
| ["\u04F8"-"\u04F9"]
| ["\u0531"-"\u0556"]
| ["\u0559"]
| ["\u0561"-"\u0587"]
| ["\u05D0"-"\u05EA"]
| ["\u05F0"-"\u05F2"]
| ["\u0621"-"\u063A"]
| ["\u0640"-"\u064A"]
| ["\u0671"-"\u06D3"]
| ["\u06D5"]
| ["\u06E5"-"\u06E6"]
| ["\u06FA"-"\u06FC"]
| ["\u0710"]
| ["\u0712"-"\u072C"]
| ["\u0780"-"\u07A5"]
| ["\u0905"-"\u0939"]
| ["\u093D"]
| ["\u0950"]
| ["\u0958"-"\u0961"]
| ["\u0985"-"\u098C"]
| ["\u098F"-"\u0990"]
| ["\u0993"-"\u09A8"]
| ["\u09AA"-"\u09B0"]
| ["\u09B2"]
| ["\u09B6"-"\u09B9"]
| ["\u09DC"-"\u09DD"]
| ["\u09DF"-"\u09E1"]
| ["\u09F0"-"\u09F1"]
| ["\u0A05"-"\u0A0A"]
| ["\u0A0F"-"\u0A10"]
| ["\u0A13"-"\u0A28"]
| ["\u0A2A"-"\u0A30"]
| ["\u0A32"-"\u0A33"]
| ["\u0A35"-"\u0A36"]
| ["\u0A38"-"\u0A39"]
| ["\u0A59"-"\u0A5C"]
| ["\u0A5E"]
| ["\u0A72"-"\u0A74"]
| ["\u0A85"-"\u0A8B"]
| ["\u0A8D"]
| ["\u0A8F"-"\u0A91"]
| ["\u0A93"-"\u0AA8"]
| ["\u0AAA"-"\u0AB0"]
| ["\u0AB2"-"\u0AB3"]
| ["\u0AB5"-"\u0AB9"]
| ["\u0ABD"]
| ["\u0AD0"]
| ["\u0AE0"]
| ["\u0B05"-"\u0B0C"]
| ["\u0B0F"-"\u0B10"]
| ["\u0B13"-"\u0B28"]
| ["\u0B2A"-"\u0B30"]
| ["\u0B32"-"\u0B33"]
| ["\u0B36"-"\u0B39"]
| ["\u0B3D"]
| ["\u0B5C"-"\u0B5D"]
| ["\u0B5F"-"\u0B61"]
| ["\u0B85"-"\u0B8A"]
| ["\u0B8E"-"\u0B90"]
| ["\u0B92"-"\u0B95"]
| ["\u0B99"-"\u0B9A"]
| ["\u0B9C"]
| ["\u0B9E"-"\u0B9F"]
| ["\u0BA3"-"\u0BA4"]
| ["\u0BA8"-"\u0BAA"]
| ["\u0BAE"-"\u0BB5"]
| ["\u0BB7"-"\u0BB9"]
| ["\u0C05"-"\u0C0C"]
| ["\u0C0E"-"\u0C10"]
| ["\u0C12"-"\u0C28"]
| ["\u0C2A"-"\u0C33"]
| ["\u0C35"-"\u0C39"]
| ["\u0C60"-"\u0C61"]
| ["\u0C85"-"\u0C8C"]
| ["\u0C8E"-"\u0C90"]
| ["\u0C92"-"\u0CA8"]
| ["\u0CAA"-"\u0CB3"]
| ["\u0CB5"-"\u0CB9"]
| ["\u0CDE"]
| ["\u0CE0"-"\u0CE1"]
| ["\u0D05"-"\u0D0C"]
| ["\u0D0E"-"\u0D10"]
| ["\u0D12"-"\u0D28"]
| ["\u0D2A"-"\u0D39"]
| ["\u0D60"-"\u0D61"]
| ["\u0D85"-"\u0D96"]
| ["\u0D9A"-"\u0DB1"]
| ["\u0DB3"-"\u0DBB"]
| ["\u0DBD"]
| ["\u0DC0"-"\u0DC6"]
| ["\u0E01"-"\u0E30"]
| ["\u0E32"-"\u0E33"]
| ["\u0E40"-"\u0E46"]
| ["\u0E81"-"\u0E82"]
| ["\u0E84"]
| ["\u0E87"-"\u0E88"]
| ["\u0E8A"]
| ["\u0E8D"]
| ["\u0E94"-"\u0E97"]
| ["\u0E99"-"\u0E9F"]
| ["\u0EA1"-"\u0EA3"]
| ["\u0EA5"]
| ["\u0EA7"]
| ["\u0EAA"-"\u0EAB"]
| ["\u0EAD"-"\u0EB0"]
| ["\u0EB2"-"\u0EB3"]
| ["\u0EBD"-"\u0EC4"]
| ["\u0EC6"]
| ["\u0EDC"-"\u0EDD"]
| ["\u0F00"]
| ["\u0F40"-"\u0F6A"]
| ["\u0F88"-"\u0F8B"]
| ["\u1000"-"\u1021"]
| ["\u1023"-"\u1027"]
| ["\u1029"-"\u102A"]
| ["\u1050"-"\u1055"]
| ["\u10A0"-"\u10C5"]
| ["\u10D0"-"\u10F6"]
| ["\u1100"-"\u1159"]
| ["\u115F"-"\u11A2"]
| ["\u11A8"-"\u11F9"]
| ["\u1200"-"\u1206"]
| ["\u1208"-"\u1246"]
| ["\u1248"]
| ["\u124A"-"\u124D"]
| ["\u1250"-"\u1256"]
| ["\u1258"]
| ["\u125A"-"\u125D"]
| ["\u1260"-"\u1286"]
| ["\u1288"]
| ["\u128A"-"\u128D"]
| ["\u1290"-"\u12AE"]
| ["\u12B0"]
| ["\u12B2"-"\u12B5"]
| ["\u12B8"-"\u12BE"]
| ["\u12C0"]
| ["\u12C2"-"\u12C5"]
| ["\u12C8"-"\u12CE"]
| ["\u12D0"-"\u12D6"]
| ["\u12D8"-"\u12EE"]
| ["\u12F0"-"\u130E"]
| ["\u1310"]
| ["\u1312"-"\u1315"]
| ["\u1318"-"\u131E"]
| ["\u1320"-"\u1346"]
| ["\u1348"-"\u135A"]
| ["\u13A0"-"\u13B0"]
| ["\u13B1"-"\u13F4"]
| ["\u1401"-"\u1676"]
| ["\u1681"-"\u169A"]
| ["\u16A0"-"\u16EA"]
| ["\u1780"-"\u17B3"]
| ["\u1820"-"\u1877"]
| ["\u1880"-"\u18A8"]
| ["\u1E00"-"\u1E9B"]
| ["\u1EA0"-"\u1EE0"]
| ["\u1EE1"-"\u1EF9"]
| ["\u1F00"-"\u1F15"]
| ["\u1F18"-"\u1F1D"]
| ["\u1F20"-"\u1F39"]
| ["\u1F3A"-"\u1F45"]
| ["\u1F48"-"\u1F4D"]
| ["\u1F50"-"\u1F57"]
| ["\u1F59"]
| ["\u1F5B"]
| ["\u1F5D"]
| ["\u1F5F"-"\u1F7D"]
| ["\u1F80"-"\u1FB4"]
| ["\u1FB6"-"\u1FBC"]
| ["\u1FBE"]
| ["\u1FC2"-"\u1FC4"]
| ["\u1FC6"-"\u1FCC"]
| ["\u1FD0"-"\u1FD3"]
| ["\u1FD6"-"\u1FDB"]
| ["\u1FE0"-"\u1FEC"]
| ["\u1FF2"-"\u1FF4"]
| ["\u1FF6"-"\u1FFC"]
| ["\u207F"]
| ["\u2102"]
| ["\u2107"]
| ["\u210A"-"\u2113"]
| ["\u2115"]
| ["\u2119"-"\u211D"]
| ["\u2124"]
| ["\u2126"]
| ["\u2128"]
| ["\u212A"-"\u212D"]
| ["\u212F"-"\u2131"]
| ["\u2133"-"\u2139"]
| ["\u2160"-"\u2183"]
| ["\u3005"-"\u3007"]
| ["\u3021"-"\u3029"]
| ["\u3031"-"\u3035"]
| ["\u3038"-"\u303A"]
| ["\u3041"-"\u3094"]
| ["\u309D"-"\u309E"]
| ["\u30A1"-"\u30FA"]
| ["\u30FC"-"\u30FE"]
| ["\u3105"-"\u312C"]
| ["\u3131"-"\u318E"]
| ["\u31A0"-"\u31B7"]
| ["\u3400"]
| ["\u4DB5"]
| ["\u4E00"]
| ["\u9FA5"]
| ["\uA000"-"\uA48C"]
| ["\uAC00"]
| ["\uD7A3"]
| ["\uF900"-"\uFA2D"]
| ["\uFB00"-"\uFB06"]
| ["\uFB13"-"\uFB17"]
| ["\uFB1D"]
| ["\uFB1F"-"\uFB28"]
| ["\uFB2A"-"\uFB36"]
| ["\uFB38"-"\uFB3C"]
| ["\uFB3E"]
| ["\uFB40"-"\uFB41"]
| ["\uFB43"-"\uFB44"]
| ["\uFB46"-"\uFBB1"]
| ["\uFBD3"-"\uFD3D"]
| ["\uFD50"-"\uFD8F"]
| ["\uFD92"-"\uFDC7"]
| ["\uFDF0"-"\uFDFB"]
| ["\uFE70"-"\uFE72"]
| ["\uFE74"]
| ["\uFE76"-"\uFEFC"]
| ["\uFF21"-"\uFF3A"]
| ["\uFF41"-"\uFF5A"]
| ["\uFF66"-"\uFFBE"]
| ["\uFFC2"-"\uFFC7"]
| ["\uFFCA"-"\uFFCF"]
| ["\uFFD2"-"\uFFD7"]
| ["\uFFDA"-"\uFFDC"]
>
}
/*
* Unicode categories Non-spacing mark (MN) OR Combining spacing mark (MC)
*/
MORE:
{
< UNICODE_COMBINING_MARK: | >
}
TOKEN:
{
< MC:
["\u0903"]
| ["\u093E"]
| ["\u093F"]
| ["\u0940"]
| ["\u0949"]
| ["\u094A"]
| ["\u094B"]
| ["\u094C"]
| ["\u0982"]
| ["\u0983"]
| ["\u09BE"]
| ["\u09BF"]
| ["\u09C0"]
| ["\u09C7"]
| ["\u09C8"]
| ["\u09CB"]
| ["\u09CC"]
| ["\u09D7"]
| ["\u0A03"]
| ["\u0A3E"]
| ["\u0A3F"]
| ["\u0A40"]
| ["\u0A83"]
| ["\u0ABE"]
| ["\u0ABF"]
| ["\u0AC0"]
| ["\u0AC9"]
| ["\u0ACB"]
| ["\u0ACC"]
| ["\u0B02"]
| ["\u0B03"]
| ["\u0B3E"]
| ["\u0B40"]
| ["\u0B47"]
| ["\u0B48"]
| ["\u0B4B"]
| ["\u0B4C"]
| ["\u0B57"]
| ["\u0BBE"]
| ["\u0BBF"]
| ["\u0BC1"]
| ["\u0BC2"]
| ["\u0BC6"]
| ["\u0BC7"]
| ["\u0BC8"]
| ["\u0BCA"]
| ["\u0BCB"]
| ["\u0BCC"]
| ["\u0BD7"]
| ["\u0C01"]
| ["\u0C02"]
| ["\u0C03"]
| ["\u0C41"]
| ["\u0C42"]
| ["\u0C43"]
| ["\u0C44"]
| ["\u0C82"]
| ["\u0C83"]
| ["\u0CBE"]
| ["\u0CC0"]
| ["\u0CC1"]
| ["\u0CC2"]
| ["\u0CC3"]
| ["\u0CC4"]
| ["\u0CC7"]
| ["\u0CC8"]
| ["\u0CCA"]
| ["\u0CCB"]
| ["\u0CD5"]
| ["\u0CD6"]
| ["\u0D02"]
| ["\u0D03"]
| ["\u0D3E"]
| ["\u0D3F"]
| ["\u0D40"]
| ["\u0D46"]
| ["\u0D47"]
| ["\u0D48"]
| ["\u0D4A"]
| ["\u0D4B"]
| ["\u0D4C"]
| ["\u0D57"]
| ["\u0D82"]
| ["\u0D83"]
| ["\u0DCF"]
| ["\u0DD0"]
| ["\u0DD1"]
| ["\u0DD8"]
| ["\u0DD9"]
| ["\u0DDA"]
| ["\u0DDB"]
| ["\u0DDC"]
| ["\u0DDD"]
| ["\u0DDE"]
| ["\u0DDF"]
| ["\u0DF2"]
| ["\u0DF3"]
| ["\u0F3E"]
| ["\u0F3F"]
| ["\u0F7F"]
| ["\u102C"]
| ["\u1031"]
| ["\u1038"]
| ["\u1056"]
| ["\u1057"]
| ["\u17B6"]
| ["\u17BE"]
| ["\u17BF"]
| ["\u17C0"]
| ["\u17C1"]
| ["\u17C2"]
| ["\u17C3"]
| ["\u17C4"]
| ["\u17C5"]
| ["\u17C7"]
| ["\u17C8"]
| ["\u1923"]
| ["\u1924"]
| ["\u1925"]
| ["\u1926"]
| ["\u1929"]
| ["\u192A"]
| ["\u192B"]
| ["\u1930"]
| ["\u1931"]
| ["\u1933"]
| ["\u1934"]
| ["\u1935"]
| ["\u1936"]
| ["\u1937"]
| ["\u1938"]
| ["\u19B0"]
| ["\u19B1"]
| ["\u19B2"]
| ["\u19B3"]
| ["\u19B4"]
| ["\u19B5"]
| ["\u19B6"]
| ["\u19B7"]
| ["\u19B8"]
| ["\u19B9"]
| ["\u19BA"]
| ["\u19BB"]
| ["\u19BC"]
| ["\u19BD"]
| ["\u19BE"]
| ["\u19BF"]
| ["\u19C0"]
| ["\u19C8"]
| ["\u19C9"]
| ["\u1A19"]
| ["\u1A1A"]
| ["\u1A1B"]
| ["\uA802"]
| ["\uA823"]
| ["\uA824"]
| ["\uA827"]
| ["\u1D16"]
| ["\u1D16"]
| ["\u1D16"]
| ["\u1D16"]
| ["\u1D16"]
| ["\u1D17"]
| ["\u1D17"]
| ["\u1D17"]
>
|
< MN:
["\u0300"-"\u034E"]
| ["\u0360"-"\u0362"]
| ["\u0483"-"\u0486"]
| ["\u0591"-"\u05A1"]
| ["\u05A3"-"\u05B9"]
| ["\u05BB"-"\u05BD"]
| ["\u05BF"]
| ["\u05C1"-"\u05C2"]
| ["\u05C4"]
| ["\u064B"-"\u0655"]
| ["\u0670"]
| ["\u06D6"-"\u06DC"]
| ["\u06DF"-"\u06E4"]
| ["\u06E7"-"\u06E8"]
| ["\u06EA"-"\u06ED"]
| ["\u0711"]
| ["\u0730"-"\u074A"]
| ["\u07A6"-"\u07B0"]
| ["\u0901"-"\u0903"]
| ["\u093C"]
| ["\u093E"-"\u094D"]
| ["\u0951"-"\u0954"]
| ["\u0962"-"\u0963"]
| ["\u0981"-"\u0983"]
| ["\u09BC"-"\u09C4"]
| ["\u09C7"-"\u09C8"]
| ["\u09CB"-"\u09CD"]
| ["\u09D7"]
| ["\u09E2"-"\u09E3"]
| ["\u0A02"]
| ["\u0A3C"]
| ["\u0A3E"-"\u0A42"]
| ["\u0A47"-"\u0A48"]
| ["\u0A4B"-"\u0A4D"]
| ["\u0A70"-"\u0A71"]
| ["\u0A81"-"\u0A83"]
| ["\u0ABC"]
| ["\u0ABE"-"\u0AC5"]
| ["\u0AC7"-"\u0AC9"]
| ["\u0ACB"-"\u0ACD"]
| ["\u0B01"-"\u0B03"]
| ["\u0B3C"]
| ["\u0B3E"-"\u0B43"]
| ["\u0B47"-"\u0B48"]
| ["\u0B4B"-"\u0B4D"]
| ["\u0B56"-"\u0B57"]
| ["\u0B82"-"\u0B83"]
| ["\u0BBE"-"\u0BC2"]
| ["\u0BC6"-"\u0BC8"]
| ["\u0BCA"-"\u0BCD"]
| ["\u0BD7"]
| ["\u0C01"-"\u0C03"]
| ["\u0C3E"-"\u0C44"]
| ["\u0C46"-"\u0C48"]
| ["\u0C4A"-"\u0C4D"]
| ["\u0C55"-"\u0C56"]
| ["\u0C82"-"\u0C83"]
| ["\u0CBE"-"\u0CC4"]
| ["\u0CC6"-"\u0CC8"]
| ["\u0CCA"-"\u0CCD"]
| ["\u0CD5"-"\u0CD6"]
| ["\u0D02"-"\u0D03"]
| ["\u0D3E"-"\u0D43"]
| ["\u0D46"-"\u0D48"]
| ["\u0D4A"-"\u0D4D"]
| ["\u0D57"]
| ["\u0D82"-"\u0D83"]
| ["\u0DCA"]
| ["\u0DCF"-"\u0DD4"]
| ["\u0DD6"]
| ["\u0DD8"-"\u0DDF"]
| ["\u0DF2"-"\u0DF3"]
| ["\u0E31"]
| ["\u0E34"-"\u0E3A"]
| ["\u0E47"-"\u0E4E"]
| ["\u0EB1"]
| ["\u0EB4"-"\u0EB9"]
| ["\u0EBB"-"\u0EBC"]
| ["\u0EC8"-"\u0ECD"]
| ["\u0F18"-"\u0F19"]
| ["\u0F35"]
| ["\u0F37"]
| ["\u0F39"]
| ["\u0F3E"-"\u0F3F"]
| ["\u0F71"-"\u0F84"]
| ["\u0F86"-"\u0F87"]
| ["\u0F90"-"\u0F97"]
| ["\u0F99"-"\u0FBC"]
| ["\u0FC6"]
| ["\u102C"-"\u1032"]
| ["\u1036"-"\u1039"]
| ["\u1056"-"\u1059"]
| ["\u17B4"-"\u17D3"]
| ["\u18A9"]
| ["\u20D0"-"\u20DC"]
| ["\u20E1"]
| ["\u302A"-"\u302F"]
| ["\u3099"-"\u309A"]
| ["\uFB1E"]
| ["\uFE20"-"\uFE23"]
>
}
TOKEN:
{
< UNICODE_DIGIT:
["\u0030"-"\u0039"]
| ["\u0660"-"\u0669"]
| ["\u06F0"-"\u06F9"]
| ["\u0966"-"\u096F"]
| ["\u09E6"-"\u09EF"]
| ["\u0A66"-"\u0A6F"]
| ["\u0AE6"-"\u0AEF"]
| ["\u0B66"-"\u0B6F"]
| ["\u0BE7"-"\u0BEF"]
| ["\u0C66"-"\u0C6F"]
| ["\u0CE6"-"\u0CEF"]
| ["\u0D66"-"\u0D6F"]
| ["\u0E50"-"\u0E59"]
| ["\u0ED0"-"\u0ED9"]
| ["\u0F20"-"\u0F29"]
| ["\u1040"-"\u1049"]
| ["\u1369"-"\u1371"]
| ["\u17E0"-"\u17E9"]
| ["\u1810"-"\u1819"]
| ["\uFF10"-"\uFF19"]
>
}
TOKEN:
{
< UNICODE_CONNECTOR_PUNCTUATION:
["\u005F"]
|
["\u203F"-"\u2040"]
|
["\u30FB"]
|
["\uFE33"-"\uFE34"]
|
["\uFE4D"-"\uFE4F"]
|
["\uFF3F"]
|
["\uFF65"]
>
}
TOKEN:
{
< UNICODE_ESCAPE_SEQUENCE: "u" >
}
TOKEN:
{
< HEX_DIGIT: ["0"-"9"] | ["a"-"f"] | ["A"-"F"] >
}
TOKEN :
{
< SLASHASSIGN: "/=" > : DEFAULT
|
< SLASH: "/" > : DEFAULT
}
/* Section 7.8.5: Regular Expression Literals */
TOKEN :
{
< REGULAR_EXPRESSION_LITERAL:
"/" ( (~["\n","\r","\\","/","*"]) | )
( (~["\n","\r","\\","/"]) | )* "/" ()*
> : IN_REGEX
|
< #BACKSLASH_SEQUENCE:
"\\" (~["\n","\r"])
>
}
/*
TOKEN:
{
< REGULAR_EXPRESSION_LITERAL:
"/" "/"
> : IN_REGEX
|
< #REGULAR_EXPRESSION_BODY: >
|
< #REGULAR_EXPRESSION_CHARS: ()* >
|
< #REGULAR_EXPRESSION_FIRSTCHAR:
// ~["*","\\","/"]
|
>
|
< #REGULAR_EXPRESSION_CHAR:
//~["\\","/"]
|
>
|
< #BACKSLASH_SEQUENCE: "\\" >
|
< #NON_TERMINATOR_FIRSTCHAR: ~["\n","\r","\u2028","\u2029","*","\\","/"] >
|
< #NON_TERMINATOR_CHAR: ~["\n","\r","\u2028","\u2029","\\","/"] >
|
< #NON_TERMINATOR: ~["\n","\r","\u2028","\u2029"] >
|
< #REGULAR_EXPRESSION_FLAGS: ()* >
}
*/
/*****************************************
* NUMERIC STRING GRAMMAR STARTS HERE *
*****************************************/
/* Section 9.3: String-to-Number Conversion */
/*
MORE:
{
)? ( ()?)? >
}
MORE:
{
< STR_WHITESPACE: ()+ >
}
MORE:
{
< STR_WHITESPACE_CHAR:
|
|
|
|
|
|
|
|
|
>
}
MORE:
{
< STR_NUMERIC_LITERAL:
|
>
}
MORE:
{
("+" | "-") >
}
MORE:
{
< STR_UNSIGNED_DECIMAL_LITERAL:
"Infinity"
| "." ()* ()*
>
}
*/
/* A.6 Universal Resource Identifier Character Classes */
/*
TOKEN:
{
< URIRESERVED : [";" , "/" , "?" , ":" , "@" , "&" , "=" , "+" , "$" , ","] >
}
TOKEN:
{
< URI_ALPHA : ["a"-"z","A"-"Z"] >
}
TOKEN:
{
< URI_MARK : ["-" , "_" , "." , "!" , "~" , "*" , "'" , "(" , ")"] >
}
void uri() :
{}
{
(uriCharacters())?
}
void uriCharacters() :
{}
{
(uriCharacter())+
}
void uriCharacter() :
{}
{
| uriUnescaped()
| uriEscaped()
}
void uriUnescaped() :
{}
{
|
|
}
void uriEscaped() :
{}
{
"%"
}
*/
/* A.7 Regular Expressions */
/*
MORE :
{
"/^" : INSIDE_PATTERN
}
TOKEN:
{
< PATTERN : > : DEFAULT
|
< #DISJUNCTION : ()+ >
|
< #ALTERNATIVE : ()* >
|
< #TERM : | ()? >
|
< #ASSERTION :
"^"
| "$"
| "\\" ("b" | "B")
>
|
< #QUANTIFIER : ("?")? >
|
< #QUANTIFIERPREFIX : "*" | "+" | "?" | ( "{" ("," ()?)? "}" ) >
|
< #ATOM :
| "."
| "\\"
|
//| "(" ("?" (":" | "=" | "!"))? ")"
| "(" ("?" (":" | "=" | "!"))? ")"
>
|
< #PATTERN_CHARACTER : ~["^", "$", "\\", ".", "*", "+", "?", "(", ")", "[", "]", "{", "}", "|"] >
|
< #ATOMESCAPE : | | >
|
< #CHARACTER_CLASS_ESCAPE : ["d", "D", "s", "S", "w", "W"] >
|
< #CHARACTERESCAPE :
| "c"
|
|
|
>
|
< #CONTROL_ESCAPE : ["f" , "n" , "r" , "t" , "v"] >
|
< #CONTROL_LETTER : ["a"-"z","A"-"Z"] >
|
< #IDENTITY_ESCAPE : ~["0"-"9", "A"-"Z", "a"-"z","-"] >
|
< #DECIMALESCAPE : >
|
< #CHARACTERCLASS : "[" ("^")? "]" >
|
< #CLASSRANGES : ()? >
|
//< #NONEMPTYCLASSRANGES : ( | "-" ) >
< #NONEMPTYCLASSRANGES : ( | "-" ) >
|
//< #NONEMPTYCLASSRANGESNODASH : | ( | "-" ) >
< #NONEMPTYCLASSRANGESNODASH : | ( | "-" ) >
|
< #CLASSATOM : "-" >
|
< #CLASSATOMNODASH : | "\\" >
|
< #CLASS_ATOM_NODASH_TOKEN : ~["\\", "]", "-"] >
|
< #CLASSESCAPE :
| "b"
|
|
>
}
*/
/*****************************************
* ECMA SYNTACTIC GRAMMARS STARTS HERE *
*****************************************/
/* Section 11.1: Primary Expressions */
void PrimaryExpression() #void :
{}
{
LOOKAHEAD("this") "this" #ThisReference
| LOOKAHEAD("{") ObjectLiteral()
| LOOKAHEAD("(") ( "(" Expression() ")" ) #ParenExpression
| LOOKAHEAD(Identifier()) Identifier()
| LOOKAHEAD("[") ArrayLiteral()
| LOOKAHEAD(2) Literal()
}
/* Section 7.8: Literals */
void Literal() #Literal :
{
Token t;
Map objLiteral;
List arrayLiteral;
}
{
t =
{
jjtThis.setDecimalValue(t.image);
}
|
t =
{
jjtThis.setHexValue(t.image);
}
|
t =
{
jjtThis.setStringValue(t.image);
}
|
t =
{
jjtThis.setBooleanValue(t.image);
}
|
t =
{
jjtThis.setNullValue();
}
|
t =
{
jjtThis.setRegexValue(t.image);
}
}
void Identifier() #Identifier :
{
Token t;
}
{
t=
{
jjtThis.setName(t.image);
}
}
/* Section 11.1.4: Array Initialiser */
void ArrayLiteral() #ArrayLiteral :
{}
{
"[" (
LOOKAHEAD(2) ( Elision() )? "]"
| LOOKAHEAD(ElementList() Elision()) ElementList() Elision() "]"
| ( ElementList() )? "]"
)
}
void ElementList() #void :
{}
{
( Elision() )? AssignmentExpression() ( LOOKAHEAD(Elision() AssignmentExpression()) Elision() AssignmentExpression())*
}
void Elision() #void :
{}
{
(",")+
}
/* Section 11.1.5: Object Initialiser */
void ObjectLiteral() #ObjectLiteral :
{}
{
"{" ( PropertyNameAndValueList() )? "}"
}
void PropertyNameAndValueList() #void :
{}
{
PropertyNameAndValue() ( LOOKAHEAD( "," PropertyNameAndValue()) "," PropertyNameAndValue() | "," )*
}
void PropertyNameAndValue() #LiteralField :
{}
{
PropertyName() ":" AssignmentExpression()
}
void PropertyName() #void :
{}
{
Identifier()
|
#Literal
|
#Literal
}
/* Section 11.2: Left-Hand-Side Expressions */
void MemberExpression() #void :
{}
{
( (
LOOKAHEAD("function") FunctionExpression()
| PrimaryExpression()
) (LOOKAHEAD(2) MemberExpressionPart())* ) #CompositeReference(>1)
| AllocationExpression()
}
void MemberExpressionForIn() #void :
{}
{
( (
LOOKAHEAD("function") FunctionExpression()
| PrimaryExpression()
) (LOOKAHEAD(2) MemberExpressionPart())* ) #CompositeReference(>1)
}
void AllocationExpression() #AllocationExpression :
{}
{
( "new" MemberExpression() ( (LOOKAHEAD(Arguments()) Arguments() (LOOKAHEAD(2) MemberExpressionPart())* ) * ) ) #CompositeReference(>1)
}
void MemberExpressionPart() #void :
{}
{
( "[" Expression() "]" ) #PropertyValueReference | ( "." Identifier() ) #PropertyIdentifierReference
}
void CallExpression() #CompositeReference(>1) :
{}
{
MemberExpression() Arguments() ( LOOKAHEAD(2) CallExpressionPart() )*
}
void CallExpressionForIn() #CompositeReference(>1) :
{}
{
MemberExpressionForIn() Arguments() ( LOOKAHEAD(2) CallExpressionPart() )*
}
void CallExpressionPart() #void :
{}
{
Arguments() | ( "[" Expression() "]" ) #PropertyValueReference | ( "." Identifier() ) #PropertyIdentifierReference
}
void Arguments() #FunctionCallParameters :
{}
{
"(" (ArgumentList())? ")"
}
void ArgumentList() #void :
{}
{
AssignmentExpression() ("," AssignmentExpression())*
}
void LeftHandSideExpression() #void :
{}
{
LOOKAHEAD(MemberExpression() "(") CallExpression() | MemberExpression()
}
void LeftHandSideExpressionForIn() #void :
{}
{
LOOKAHEAD(CallExpression()) CallExpressionForIn() | MemberExpressionForIn()
}
/* Section 11.3 Postfix Expressions */
void PostfixExpression() #PostfixExpression(>1) :
{}
{
LeftHandSideExpression() [ LOOKAHEAD(1) PostfixOperator() ]
}
void PostfixOperator() #Operator :
{}
{
( "++" | "--")
}
/* Section 11.4 Unary Operators */
void UnaryExpression() #UnaryExpression(>1) :
{}
{
PostfixExpression() | ( LOOKAHEAD(1) UnaryOperator() UnaryExpression() )+
}
void UnaryOperator() #Operator :
{}
{
("delete" | "void" | "typeof" | "++" | "--" | "+" | "-" | "~" | "!")
}
/* Section 11.5: Multiplicative Operators */
void MultiplicativeExpression() #BinaryExpressionSequence(>1) :
{}
{
UnaryExpression() ( MultiplicativeOperator() UnaryExpression() )*
}
void MultiplicativeOperator() #Operator :
{}
{
("*" | | "%")
}
/* Section 11.6: Additive Operators */
void AdditiveExpression() #BinaryExpressionSequence(>1) :
{}
{
MultiplicativeExpression() ( LOOKAHEAD(1) AdditiveOperator() MultiplicativeExpression())*
}
void AdditiveOperator() #Operator :
{}
{
("+" | "-")
}
/* Section 11.7: Bitwise Shift Operators */
void ShiftExpression() #BinaryExpressionSequence(>1) :
{}
{
AdditiveExpression() ( ShiftOperator() AdditiveExpression() )*
}
void ShiftOperator() #Operator :
{}
{
("<<" | ">>" | ">>>")
}
/* Section 11.4: Relational Operators */
void RelationalExpression() #BinaryExpressionSequence(>1) :
{}
{
ShiftExpression() ( RelationalOperator() ShiftExpression() )*
}
void RelationalOperator() #Operator :
{}
{
("<" | ">" | "<=" | ">=" | "instanceof" | "in")
}
void RelationalExpressionNoIn() #BinaryExpressionSequence(>1) :
{}
{
ShiftExpression() ( RelationalNoInOperator() ShiftExpression() )*
}
void RelationalNoInOperator() #Operator :
{}
{
("<" | ">" | "<=" | ">=" | "instanceof")
}
/* Section 11.9: Equality Operators */
void EqualityExpression() #BinaryExpressionSequence(>1) :
{}
{
RelationalExpression() ( EqualityOperator() RelationalExpression() )*
}
void EqualityExpressionNoIn() #BinaryExpressionSequence(>1) :
{}
{
RelationalExpressionNoIn() ( EqualityOperator() RelationalExpressionNoIn())*
}
void EqualityOperator() #Operator :
{}
{
("==" | "!=" | "===" | "!==")
}
/* Section 11.10: Binary Bitwise Operators */
void BitwiseANDExpression() #BinaryExpressionSequence(>1) :
{}
{
EqualityExpression() ( BitwiseANDOperator() EqualityExpression())*
}
void BitwiseANDExpressionNoIn() #BinaryExpressionSequence(>1) :
{}
{
EqualityExpressionNoIn() (BitwiseANDOperator() EqualityExpressionNoIn())*
}
void BitwiseANDOperator() #Operator :
{}
{
"&"
}
void BitwiseXORExpression() #BinaryExpressionSequence(>1) :
{}
{
BitwiseANDExpression() (BitwiseXOROperator() BitwiseANDExpression())*
}
void BitwiseXORExpressionNoIn() #BinaryExpressionSequence(>1) :
{}
{
BitwiseANDExpressionNoIn() (BitwiseXOROperator() BitwiseANDExpressionNoIn())*
}
void BitwiseXOROperator() #Operator :
{}
{
"^"
}
void BitwiseORExpression() #BinaryExpressionSequence(>1) :
{}
{
BitwiseXORExpression() (BitwiseOROperator() BitwiseXORExpression())*
}
void BitwiseORExpressionNoIn() #BinaryExpressionSequence(>1) :
{}
{
BitwiseXORExpressionNoIn() (BitwiseOROperator() BitwiseXORExpressionNoIn())*
}
void BitwiseOROperator() #Operator :
{}
{
"|"
}
/* Section 11.11: Binary Logical Operators */
void LogicalANDExpression() #AndExpressionSequence(>1) :
{}
{
BitwiseORExpression() (LogicalANDOperator() BitwiseORExpression())*
}
void LogicalANDExpressionNoIn() #AndExpressionSequence(>1) :
{}
{
BitwiseORExpressionNoIn() (LogicalANDOperator() BitwiseORExpressionNoIn())*
}
void LogicalANDOperator() #Operator :
{}
{
"&&"
}
void LogicalORExpression() #OrExpressionSequence(>1) :
{}
{
LogicalANDExpression() (LogicalOROperator() LogicalANDExpression())*
}
void LogicalORExpressionNoIn() #OrExpressionSequence(>1) :
{}
{
LogicalANDExpressionNoIn() (LogicalOROperator() LogicalANDExpressionNoIn())*
}
void LogicalOROperator() #Operator :
{}
{
"||"
}
/* Section 11.12: Conditional Operator */
void ConditionalExpression() #ConditionalExpression(>1) :
{}
{
LogicalORExpression() [ "?" AssignmentExpression() ":" AssignmentExpression() ]
}
void ConditionalExpressionNoIn() #ConditionalExpression(>1) :
{}
{
LogicalORExpressionNoIn() [ "?" AssignmentExpression() ":" AssignmentExpressionNoIn() ]
}
/* Section 11.13: Assignment Operators */
void AssignmentExpression() #AssignmentExpression(>1) :
{}
{
LOOKAHEAD(LeftHandSideExpression() AssignmentOperator()) LeftHandSideExpression() AssignmentOperator() AssignmentExpression()
| ConditionalExpression()
}
void AssignmentExpressionNoIn() #AssignmentExpression(>1) :
{}
{
LOOKAHEAD(LeftHandSideExpression() AssignmentOperator()) LeftHandSideExpression() AssignmentOperator() AssignmentExpressionNoIn()
| ConditionalExpressionNoIn()
}
void AssignmentOperator() #Operator :
{}
{
("=" | "*=" | | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|=")
}
/* Section 11.14: Comma Operator */
void Expression() #ExpressionList(>1) :
{}
{
AssignmentExpression() ( "," AssignmentExpression() )*
}
void ExpressionNoIn() :
{}
{
AssignmentExpressionNoIn() ( "," AssignmentExpressionNoIn() )*
}
/* Section 12: STATEMENTS */
void Statement() #void :
{}
{
LOOKAHEAD(Block()) Block()
| LOOKAHEAD("var" Identifier() ":") JScriptVarStatement() // JScript .NET declaratrion
| LOOKAHEAD("var" Identifier()) VariableStatement()
| EmptyStatement()
| LOOKAHEAD(Identifier() ":") LabelledStatement()
| LOOKAHEAD(ExpressionStatement()) ExpressionStatement()
| LOOKAHEAD("if" "(") IfStatement()
| IterationStatement()
| LOOKAHEAD("continue") ContinueStatement()
| LOOKAHEAD("break") BreakStatement()
| LOOKAHEAD("import") ImportStatement()
| ReturnStatement()
| WithStatement()
| SwitchStatement()
| ThrowStatement()
| TryStatement()
}
/* 12.1 Block Statement */
void Block() #Block :
{}
{
"{" ( StatementList() )? "}"
}
void StatementList() #StatementList(>1) :
{}
{
( Statement() )+
}
/* Section 12.2: Variable statement */
void VariableStatement() #VariableStatement :
{}
{
"var" VariableDeclarationList() (LOOKAHEAD(2) ";")?
}
void VariableDeclarationList() #VariableDeclarationList(>1) :
{}
{
VariableDeclaration() ( "," VariableDeclaration() )*
}
void VariableDeclarationListNoIn() #VariableDeclarationList(>1) :
{}
{
VariableDeclarationNoIn() ( "," VariableDeclarationNoIn() )*
}
void VariableDeclaration() #VariableDeclaration :
{}
{
Identifier() ( Initialiser() )?
}
void VariableDeclarationNoIn() :
{}
{
Identifier() ( InitialiserNoIn() )? #EmptyExpression(jjtree.nodeArity()==0)
}
void Initialiser() #void :
{}
{
"=" AssignmentExpression()
}
void InitialiserNoIn() #void :
{}
{
"=" AssignmentExpressionNoIn()
}
/* Section 12.3: Empty Statement */
void EmptyStatement() #EmptyStatement :
{}
{
";"
}
/* Section 12.4: Expression Statement */
void ExpressionStatement() #ExpressionStatement :
{}
{
Expression() (LOOKAHEAD(2) ";")?
}
/* Section 12.5: The if Statement */
void IfStatement() #IfStatement :
{}
{
"if" "(" Expression() ")" Statement() [ LOOKAHEAD(1) "else" Statement() ]
}
/* Section 12.6: Iteration Statements */
void IterationStatement() #void :
{}
{
( "do" Statement() "while" "(" Expression() ")" (LOOKAHEAD(2) ";")? ) #DoStatement
| ( "while" "(" Expression() ")" Statement() ) #WhileStatement
| LOOKAHEAD("for" "(" (ExpressionNoIn())? ";") ( "for" "(" ( ExpressionNoIn() )? #EmptyExpression(jjtree.nodeArity()==0) ";" ( Expression() )? #EmptyExpression(jjtree.nodeArity()==0) ";" ( Expression() )? #EmptyExpression(jjtree.nodeArity()==0) ")" Statement() ) #ForStatement
| LOOKAHEAD("for" "(" "var" VariableDeclarationList() ";") ( "for" "(" "var" VariableDeclarationList() ";" ( Expression() )? #EmptyExpression(jjtree.nodeArity()==0) ";" ( Expression() )? #EmptyExpression(jjtree.nodeArity()==0) ")" Statement() ) #ForVarStatement
| LOOKAHEAD("for" "(" "var" VariableDeclarationNoIn() "in") ( "for" "(" "var" VariableDeclarationNoIn() "in" Expression() ")" Statement() ) #ForVarInStatement
| ( "for" "(" LeftHandSideExpressionForIn() "in" Expression() ")" Statement() ) #ForInStatement
}
/* Section 12.7: The continue Statement */
void ContinueStatement() #ContinueStatement :
{}
{
"continue" ( LOOKAHEAD(Identifier()) Identifier() )? (LOOKAHEAD(";") ";")?
}
/* Section 12.8: The break Statement */
void BreakStatement() #BreakStatement :
{}
{
"break" ( LOOKAHEAD(Identifier()) Identifier() )? (LOOKAHEAD(";") ";")?
}
/* Section 12.9 The return Statement */
void ReturnStatement() #ReturnStatement :
{}
{
"return" ( LOOKAHEAD(Expression()) Expression() )? #EmptyExpression(jjtree.nodeArity()==0) (LOOKAHEAD(";") ";")?
}
/* Section 12.10: The with Statement */
void WithStatement() #WithStatement :
{}
{
"with" "(" Expression() ")" Statement()
}
/* 12.11 The switch Statement */
void SwitchStatement() #SwitchStatement :
{}
{
"switch" "(" Expression() ")" CaseBlock()
}
void CaseBlock() #CaseGroups :
{}
{
"{" ( CaseClauses() )?
(
"}" | DefaultClause() ( CaseClauses() )? "}"
)
}
void CaseClauses() #void :
{}
{
( CaseClause() )+
}
void CaseClause() #CaseGroup :
{}
{
( ( "case" Expression() ":" ) #CaseGuard ) ( StatementList() )?
}
void DefaultClause() #CaseGroup :
{}
{
( ( "default" ":" ) #CaseGuard ) ( StatementList() )?
}
/* Section 12.12: Labelled Statements */
void LabelledStatement() :
{}
{
Identifier() ":" Statement()
}
void ThrowStatement() #ThrowStatement :
{}
{
"throw" Expression() (LOOKAHEAD(";") ";")?
}
void TryStatement() #TryStatement :
{}
{
"try" Block()
(
( Finally() | Catch() [Finally()])
)
}
void Catch() #CatchClause :
{}
{
"catch" "(" Identifier() ")" Block()
}
void Finally() #FinallyClause :
{}
{
"finally" Block()
}
/* Section 13: Function Definition */
void FunctionDeclaration() #FunctionDeclaration :
{}
{
"function" Identifier() ( "(" ( FormalParameterList() )? ")" ) #FormalParameterList FunctionBody()
}
void FunctionExpression() #FunctionDeclaration :
{}
{
"function" ( Identifier() )? ( "(" ( FormalParameterList() )? ")" ) #FormalParameterList FunctionBody()
}
void FormalParameterList() #void :
{}
{
Identifier() ( "," Identifier() )*
}
void FunctionBody() #Block :
{}
{
"{" (SourceElements())? "}"
}
/* Section 14: Program */
ASTProgram Program() #Program :
{}
{
(SourceElements())?
{ return jjtThis; }
}
void SourceElements() #void :
{}
{
(SourceElement())+
}
void SourceElement() #void :
{}
{
LOOKAHEAD(FunctionDeclaration()) FunctionDeclaration() | Statement()
}
/*
* Grammar for parsing JScript .NET contructs: ( import System; var contents :
* String = reader.ReadToEnd(); ) Refer: src/hostenv_jsc.js
*/
void ImportStatement():
{}
{
"import" Name() [ "." "*" ] ";"
}
void Name():
{}
{
( LOOKAHEAD(2) "." )*
}
void JScriptVarStatement() #VariableStatement :
{}
{
"var" JScriptVarDeclarationList() (LOOKAHEAD(2) ";")?
}
void JScriptVarDeclarationList() #VariableDeclarationList(>1) :
{}
{
JScriptVarDeclaration() ( "," JScriptVarDeclaration() )*
}
/*
* void JScriptVarDeclaration() #VariableDeclaration : {} { Identifier() ":" (
* "byte" | "sbyte" | "short" | "ushort" | "uint" | "long" | "ulong" |
* "float" | "Number" | "double" | "decimal" | "boolean" | "String" | "char" ) (
* Initialiser() )? }
*/
void JScriptVarDeclaration() #VariableDeclaration :
{}
{
Identifier() ":" ( Initialiser() )?
}
JAVACODE
void insertSemiColon(){
Token inputToken = getToken(1);
if(inputToken.kind == SEMICOLON){
inputToken = getNextToken();
} else if((inputToken.kind != EOF) && (inputToken.kind != RBRACE)){
if(inputToken.specialToken != null){
boolean foundLineSeparator = false;
Token specialT = inputToken.specialToken;
while((specialT != null) && (! foundLineSeparator)){
if((specialT.kind == LINE_TERMINATOR) || (specialT.kind == SINGLE_LINE_COMMENT)){
foundLineSeparator = true;
}
specialT = specialT.specialToken;
}
if(! foundLineSeparator){
throw generateParseException();
}
} else {
throw generateParseException();
}
}
}