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