BNF for tea.jj
NON-TERMINALS
program
::=
method_declaration
<EOF>
method_declaration
::=
<TYPE> <NAME> <OPEN_PAREN> <CLOSE_PAREN> <OPEN_BRACE>
statement_block
<CLOSE_BRACE>
statement_block
::=
(
statement
)*
statement
::=
simple_statement
<SEMICOLON>
|
compound_statement
|
<OPEN_BRACE>
statement_block
<CLOSE_BRACE>
simple_statement
::=
declarative_statement
|
assignment_statement
declarative_statement
::=
<TYPE>
assignment_statement
( <COMMA>
assignment_statement
)*
assignment_statement
::=
<NAME> ( <ASSIGN>
expression
)?
expression
::=
or_expression
or_expression
::=
and_expression
( <OR>
and_expression
)*
and_expression
::=
relop_expression
( <AND>
relop_expression
)*
relop_expression
::=
ltgt_expression
( <NOT_EQUAL_TO>
ltgt_expression
| <EQUAL_TO>
ltgt_expression
)*
ltgt_expression
::=
addop_expression
( <LESS_THAN>
addop_expression
| <GREATER_THAN>
addop_expression
| <LESS_THAN_EQUAL_TO>
addop_expression
| <GREATER_THAN_EQUAL_TO>
addop_expression
)*
addop_expression
::=
mulop_expression
( <ADD>
mulop_expression
| <SUBTRACT>
mulop_expression
)*
mulop_expression
::=
term
( <MULT>
term
| <DIV>
term
| <MOD>
term
)*
term
::=
<NOT>
value
|
<ADD>
value
|
<SUBTRACT>
value
|
value
value
::=
( <NAME> | <NUMBER> | <OPEN_PAREN>
expression
<CLOSE_PAREN> )
compound_statement
::=
if_statement
|
loop_statement
if_statement
::=
<IF> <OPEN_PAREN>
expression
<CLOSE_PAREN>
statement
( <ELSE>
statement
)?
loop_statement
::=
while_statement
|
do_while_statement
|
for_statement
while_statement
::=
<WHILE> <OPEN_PAREN>
expression
<CLOSE_PAREN>
statement
do_while_statement
::=
<DO>
statement
<WHILE> <OPEN_PAREN>
expression
<CLOSE_PAREN> <SEMICOLON>
for_statement
::=
<FOR> <OPEN_PAREN> (
for_expression
)? <SEMICOLON> (
expression
)? <SEMICOLON> (
for_expression
)? <CLOSE_PAREN>
statement
for_expression
::=
declarative_statement
|
assignment_statement
( <COMMA>
assignment_statement
)*