BNF for qtacojava.jj

TOKENS

NON-TERMINALS

/************************************
 * The qTACoJava Grammar Starts Here *
 ************************************/
Goal ::= MainClass ( TypeDeclaration )* <EOF>
MainClass ::= "class" Identifier "{" "public" "static" "void" "main" "(" "String" "[" "]" Identifier ")" "{" ( VarDeclaration )* ( QStatement )* "}" "}"
TypeDeclaration ::= ClassDeclaration
| ClassExtendsDeclaration
ClassDeclaration ::= "class" Identifier "{" ( VarDeclaration )* ( MethodDeclaration )* "}"
ClassExtendsDeclaration ::= "class" Identifier "extends" Identifier "{" ( VarDeclaration )* ( MethodDeclaration )* "}"
VarDeclaration ::= Type Identifier ";"
MethodDeclaration ::= "public" Type Identifier "(" ( FormalParameterList )? ")" "{" ( VarDeclaration )* ( QStatement )* "return" Identifier ";" "}"
FormalParameterList ::= FormalParameter ( FormalParameterRest )*
FormalParameter ::= Type Identifier
FormalParameterRest ::= "," FormalParameter
Type ::= ArrayType
| BooleanType
| IntegerType
| Identifier
ArrayType ::= "int" "[" "]"
BooleanType ::= "boolean"
IntegerType ::= "int"
QStatement ::= ( Query )* Statement
Query ::= <SCOMMENT1> Identifier "alias?" Identifier <SCOMMENT2>
Statement ::= Block
| AssignmentStatement
| ArrayAssignmentStatement
| FieldAssignmentStatement
| IfStatement
| WhileStatement
| PrintStatement
Block ::= "{" ( QStatement )* "}"
AssignmentStatement ::= Identifier "=" Expression ";"
ArrayAssignmentStatement ::= Identifier "[" Identifier "]" "=" Identifier ";"
FieldAssignmentStatement ::= Identifier "." Identifier "=" Identifier ";"
IfStatement ::= "if" "(" Identifier ")" Statement "else" Statement
WhileStatement ::= "while" "(" Identifier ")" Statement
PrintStatement ::= "System.out.println" "(" Identifier ")" ";"
Expression ::= AndExpression
| CompareExpression
| PlusExpression
| MinusExpression
| TimesExpression
| ArrayLookup
| ArrayLength
| MessageSend
| FieldRead
| PrimaryExpression
AndExpression ::= Identifier "&&" Identifier
CompareExpression ::= Identifier "<" Identifier
PlusExpression ::= Identifier "+" Identifier
MinusExpression ::= Identifier "-" Identifier
TimesExpression ::= Identifier "*" Identifier
ArrayLookup ::= Identifier "[" Identifier "]"
ArrayLength ::= Identifier "." "length"
FieldRead ::= Identifier "." Identifier
MessageSend ::= PrimaryExpression "." Identifier "(" ( ArgList )? ")"
ArgList ::= Identifier ( ArgRest )*
ArgRest ::= "," Identifier
PrimaryExpression ::= IntegerLiteral
| TrueLiteral
| FalseLiteral
| Identifier
| ThisExpression
| ArrayAllocationExpression
| AllocationExpression
| NotExpression
IntegerLiteral ::= <INTEGER_LITERAL>
TrueLiteral ::= "true"
FalseLiteral ::= "false"
Identifier ::= <IDENTIFIER>
ThisExpression ::= "this"
ArrayAllocationExpression ::= "new" "int" "[" Identifier "]"
AllocationExpression ::= "new" Identifier "(" ")"
NotExpression ::= "!" Identifier