<DEFAULT> SKIP : { " " | "\t" | "\n" | "\r" | "\f" } |
<DEFAULT> SPECIAL : { <FORMAL_COMMENT: "/**" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> | <MULTI_LINE_COMMENT: "/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> } |
<DEFAULT> TOKEN : { <LPAREN: "("> | <RPAREN: ")"> | <LBRACE: "{"> | <RBRACE: "}"> | <LSQPAREN: "["> | <RSQPAREN: "]"> | <DOT: "."> | <LT: "LT"> | <LE: "LE"> | <GT: "GT"> | <GE: "GE"> | <NE: "NE"> | <EQ: "EQ"> | <PLUS: "PLUS"> | <MINUS: "MINUS"> | <AND: "AND"> | <OR: "OR"> | <NOT: "NOT"> | <TIMES: "TIMES"> | <MAIN: "MAIN"> | <CODE: "CODE"> | <HALLOCATE: "HALLOCATE"> | <END: "END"> | <NOOP: "NOOP"> | <MOVE: "MOVE"> | <CALL: "CALL"> | <ERROR: "ERROR"> | <PRINT: "PRINT"> | <BEGIN: "BEGIN"> | <RETURN: "RETURN"> | <JUMP: "JUMP"> | <CJUMP: "CJUMP"> | <HSTORE: "HSTORE"> | <HLOAD: "HLOAD"> | <MEM: "MEM"> | <TEMP: "TEMP"> | <ARG: "ARG"> | <QCOMMENT: "//"> } |
<DEFAULT> TOKEN : { <INTEGER_LITERAL: ["1"-"9"] (["0"-"9"])* | "0"> } |
<DEFAULT> TOKEN : { <IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*> | <#LETTER: ["$","A"-"Z","_","a"-"z","\u00c0"-"\u00d6","\u00d8"-"\u00f6","\u00f8"-"\u00ff","\u0100"-"\u1fff","\u3040"-"\u318f","\u3300"-"\u337f","\u3400"-"\u3d2d","\u4e00"-"\u9fff","\uf900"-"\ufaff"]> | <#DIGIT: ["0"-"9","\u0660"-"\u0669","\u06f0"-"\u06f9","\u0966"-"\u096f","\u09e6"-"\u09ef","\u0a66"-"\u0a6f","\u0ae6"-"\u0aef","\u0b66"-"\u0b6f","\u0be7"-"\u0bef","\u0c66"-"\u0c6f","\u0ce6"-"\u0cef","\u0d66"-"\u0d6f","\u0e50"-"\u0e59","\u0ed0"-"\u0ed9","\u1040"-"\u1049"]> } |
/*********************************** * The aminiIR Grammar Starts Here (extended from miniIR)* ***********************************/ |
||
Goal | ::= | ( Query )* MainFunc |
Query | ::= | "//" Label Temp "alias?" Temp |
MainFunc | ::= | "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" | |
SimpleExp | ::= | Temp |
| | IntegerLiteral | |
| | Label | |
Temp | ::= | "TEMP" IntegerLiteral |
IntegerLiteral | ::= | <INTEGER_LITERAL> |
Label | ::= | <IDENTIFIER> |