Grammar
Lexical grammar
Identifier
identifier : [_a-zA-Z][_a-zA-Z0-9]*
Whitespace
ws : [ \t\n\r]*
Literals
float : [0-9]+[.][0-9]+([eE]-?[0-9]+)?
decimal : [1-9][0-9]*|0
hexadecimal : 0[xX][0-9a-fA-F]+
octal : 0[0-7]+
string : \"[^"\\]*(\\.[^"\\]*)*\"
Comments
\/\* : BEGIN MULTILINE_COMMENT
\*\/ : END MULTILINE_COMMENT
\/\/ : BEGIN COMMENT
\n : END COMMENT
<<EOF>> : END COMMENT
Keywords
class : CLASS
extends : EXTENDS
instanceOf : INSTANCEOF
return : RETURN
throw : THROW
try : TRY
catch : CATCH
if : IF
else : ELSE
while : WHILE
for : FOR
let : LET
function : FUNCTION
await : AWAIT
delete : DELETE
break : BREAK
is : IS
in : IN
Identifier
{identifier} : IDENTIFIER;
Note
Identifiers starting with double underscores are reserved for internal interpreter implementation and should not be used.
Literals
{float} : NUMBER_LITERAL;
{decimal} : NUMBER_LITERAL;
{hexadecimal} : NUMBER_LITERAL;
{octal} : NUMBER_LITERAL;
{string} : STRING_LITERAL;
"Fat arrow"
\(/({identifier},{ws})*{identifier}?\){ws}=> : FAT_ARROW_BEGIN
=> : FAT_ARROW
Operators
== : EQUAL
!= : NOT_EQUAL
\< : LESS
\<= : LESS_EQUAL
\> : GREATER
\>= : GREATER_EQUAL
\% : MODULUS
= : ASSIGNMENT
: : JSON_ASSIGNMENT
\<\- : INIT_ASSIGNMENT
! : NOT
~ : COMPLEMENT
\+\+ : INCREMENT
\-\- : DECREMENT
\+ : ADDITION
\- : SUBTRACTION
\* : MULTIPLICATION
\/ : DIVISION
\|\| : OR
&& : AND
\| : BITWISE_OR
& : BITWISE_AND
\<\< : SHIFT_LEFT
\>\> : SHIFT_RIGHT
, : ','
; : ';'
\. : DOT
\: : BRACES_OPEN
\} : BRACES_CLOSE
\( : PARENTHESES_OPEN
\) : PARENTHESES_CLOSE
\[ : BRACKET_OPEN
\] : BRACKET_CLOSE
\? : CONDITIONAL
\.\.\. : SPREAD_OPERATOR
\.\. : RANGE
@{identifier} : DECORATOR
@{identifier}@ : BINARY_FUNCTION_OPERATOR
Grammar
input
:
[
statement
]*
optionalSemicolon :
[
// while(true)
';'
] ?
simpleStatement :
expression
optionalSemicolon
jsonStatement :
expression
[
','
|
]
compoundStatement :
BRACES_OPEN
[
statement
]*
BRACES_CLOSE
jsonStatements :
[
jsonStatement
]*
ifStatement :
IF
PARENTHESES_OPEN
expression
PARENTHESES_CLOSE
statement
[
// prefer
ELSE
statement
|
]
whileStatement :
WHILE
PARENTHESES_OPEN
expression
PARENTHESES_CLOSE
statement
forStatement :
FOR
PARENTHESES_OPEN
expression
[
';'
expression
';'
expression
|
]
PARENTHESES_CLOSE
statement
tryCatchStatement :
TRY
statement
CATCH
statement
returnStatement :
RETURN
expression
optionalSemicolon
throwStatement :
THROW
expression
optionalSemicolon
statement :
[
// avoid
simpleStatement
|
compoundStatement
|
ifStatement
|
whileStatement
|
forStatement
|
tryCatchStatement
|
returnStatement
|
throwStatement
|
BREAK
optionalSemicolon
]
expression :
factor
postUnaryOperator
[
// while (newToken.priority <= expression.priority)
[
leftAssociativeOperator
expression // parse with priority less by 1
|
rightAssociativeOperator
expression
|
CONDITIONAL expression JSON_ASSIGNMENT expression
|
RANGE expression // parse with priority less by 1
[
// prefer
RANGE expression
|
]
|
PARENTHESES_OPEN expressionList PARENTHESES_CLOSE
postUnaryOperator
|
BRACKET_OPEN expressionList BRACKET_CLOSE
postUnaryOperator
|
DOT IDENTIFIER
postUnaryOperator
[
// prefer
PARENTHESES_OPEN expressionList PARENTHESES_CLOSE
postUnaryOperator
|
]
]
]*
expressionList :
|
expression expressionListTail
expressionListTail :
[
','
expression
]*
postUnaryOperator :
[
// prefer
INCREMENT
|
// prefer
DECREMENT
|
]
factor :
PARENTHESES_OPEN expression PARENTHESES_CLOSE
|
SUBTRACTION
expression
|
COMPLEMENT
expression
|
NOT
expression
|
AWAIT
expression
|
DELETE
expression
|
IDENTIFIER
|
NUMBER_LITERAL
|
STRING_LITERAL
|
LET
IDENTIFIER
|
FUNCTION
[
IDENTIFIER
|
]
[
PARENTHESES_OPEN
[
IDENTIFIER
',' ..?
]*
PARENTHESES_CLOSE
|
]
compoundStatement
|
FAT_ARROW_BEGIN
[
IDENTIFIER
',' ..?
]*
PARENTHESES_CLOSE
FAT_ARROW
statement
|
BRACES_OPEN
jsonStatements
BRACES_CLOSE
|
CLASS
IDENTIFIER
[
EXTENDS
IDENTIFIER
|
]
BRACES_OPEN
jsonStatements
BRACES_CLOSE
|
BRACKET_OPEN expressionList BRACKET_CLOSE
leftAssociativeOperator :
[
ADDITION
| SUBTRACTION
| MULTIPLICATION
| DIVISION
| MODULUS
| XOR
| BITWISE_OR
| BITWISE_AND
| SHIFT_LEFT
| SHIFT_RIGHT
| EQUAL
| NOT_EQUAL
| LESS
| LESS_EQUAL
| GREATER
| GREATER_EQUAL
| AND
| OR
| BINARY_FUNCTION_OPERATOR
| INSTANCEOF
| IS
| IN
]
rightAssociativeOperator :
[
ASSIGNMENT
| JSON_ASSIGNMENT
| INIT_ASSIGNMENT
]