BNF for miniIR.jj

NON-TERMINALS

Goal ::= "MAIN" StmtList "END" ( Procedure )* <EOF>
StmtList ::= ( ( Label )? Stmt )*
Procedure ::= Label "[" IntegerLiteral "]" StmtExp
Stmt ::= NoOpStmt
| ErrorStmt
| CJumpStmt
| JumpStmt
| HStoreStmt
| HLoadStmt
| MoveStmt
| PrintStmt
NoOpStmt ::= "NOOP"
ErrorStmt ::= "ERROR"
CJumpStmt ::= "CJUMP" Temp Label
JumpStmt ::= "JUMP" Label
HStoreStmt ::= "HSTORE" Temp IntegerLiteral Temp
HLoadStmt ::= "HLOAD" Temp Temp IntegerLiteral
MoveStmt ::= "MOVE" Temp Exp
PrintStmt ::= "PRINT" SimpleExp
Exp ::= Call
| HAllocate
| BinOp
| SimpleExp
StmtExp ::= "BEGIN" StmtList "RETURN" SimpleExp "END"
Call ::= "CALL" SimpleExp "(" ( Temp )* ")"
HAllocate ::= "HALLOCATE" SimpleExp
BinOp ::= Operator Temp SimpleExp
Operator ::= "LT"
| "PLUS"
| "MINUS"
| "TIMES"
| "BITOR"
| "BITAND"
| "LSHIFT"
| "RSHIFT"
| "BITXOR"
SimpleExp ::= Temp
| IntegerLiteral
| Label
Temp ::= "TEMP" IntegerLiteral
IntegerLiteral ::= <INTEGER_LITERAL>
Label ::= <IDENTIFIER>