BNF for a small subset of JavaScript
NonTerminals
/* Program */
Program
::=
(
SourceElements
)? <EOF>
SourceElements
::=
(
SourceElement
)+
Statements
::=
(
Statement
)+
SourceElement
::=
FunctionDeclaration
|
Statement
/* Function Definition */
FunctionDeclaration
::=
"function"
Identifier
"(" (
FormalParameterList
)? ")"
FunctionBody
FormalParameterList
::=
Identifier
( ","
Identifier
)*
FunctionBody
::=
"{" (
Statements
)? (
ReturnStatement
)? "}"
/* STATEMENTS */
Statement
::=
Block
|
VariableStatement
|
EmptyStatement
|
IfStatement
|
IterationStatement
|
SelectionStatement
|
UpdateStatement
|
MethodCallStatement
|
FunctionCallStatement
|
AllocationStatement
|
AssignmentStatement
SelectionStatement
::=
Identifier
"="
ReceiverExpression
"."
Identifier
";"
UpdateStatement
::=
ReceiverExpression
"."
Identifier
"="
PrimaryExpression
";"
MethodCallStatement
::=
Identifier
"="
ReceiverExpression
"."
Identifier
Arguments
";"
FunctionCallStatement
::=
Identifier
"="
Identifier
Arguments
";"
AllocationStatement
::=
Identifier
"=" "new"
Identifier
Arguments
";"
AssignmentStatement
::=
Identifier
"="
Expression
";"
ReceiverExpression
::=
"this"
|
Identifier
Block
::=
"{" (
StatementList
)? "}"
StatementList
::=
(
Statement
)+
VariableStatement
::=
"var"
VariableDeclarationList
( ";" )?
VariableDeclarationList
::=
Identifier
( ","
Identifier
)*
EmptyStatement
::=
";"
IfStatement
::=
"if" "("
Expression
")"
Statement
( "else"
Statement
)?
IterationStatement
::=
"while" "("
Expression
")"
Statement
ReturnStatement
::=
"return" (
PrimaryExpression
)? ( ";" )?
PrimaryExpression
::=
"this"
|
Identifier
|
Literal
Arguments
::=
"(" (
ArgumentList
)? ")"
ArgumentList
::=
PrimaryExpression
( ","
PrimaryExpression
)*
MemberExpression
::=
Identifier
|
Literal
|
ParenExpression
ParenExpression
::=
"("
Expression
")"
MultiplicativeExpression
::=
MemberExpression
(
MultiplicativeOperator
MemberExpression
)*
MultiplicativeOperator
::=
( "*" | <SLASH> | "%" )
AdditiveExpression
::=
MultiplicativeExpression
(
AdditiveOperator
MultiplicativeExpression
)*
AdditiveOperator
::=
( "+" | "-" )
RelationalExpression
::=
AdditiveExpression
(
RelationalOperator
AdditiveExpression
)*
RelationalOperator
::=
( "<" | ">" | "<=" | ">=" )
EqualityExpression
::=
RelationalExpression
(
EqualityOperator
RelationalExpression
)*
EqualityOperator
::=
( "==" | "!=" | "===" | "!==" )
LogicalANDExpression
::=
EqualityExpression
(
LogicalANDOperator
EqualityExpression
)*
LogicalANDOperator
::=
"&&"
Expression
::=
LogicalANDExpression
(
LogicalOROperator
LogicalANDExpression
)*
LogicalOROperator
::=
"||"
Literal
::=
<DECIMAL_LITERAL>
|
<HEX_INTEGER_LITERAL>
|
<STRING_LITERAL>
|
<BOOLEAN_LITERAL>
|
<NULL_LITERAL>
|
<REGULAR_EXPRESSION_LITERAL>
Identifier
::=
<IDENTIFIER_NAME>