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 )*