diff options
Diffstat (limited to 'F2024/cps710/assignments/A1/HL.jj')
-rw-r--r-- | F2024/cps710/assignments/A1/HL.jj | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/F2024/cps710/assignments/A1/HL.jj b/F2024/cps710/assignments/A1/HL.jj new file mode 100644 index 0000000..54657cc --- /dev/null +++ b/F2024/cps710/assignments/A1/HL.jj @@ -0,0 +1,83 @@ +options { + IGNORE_CASE=false; +} + +PARSER_BEGIN(HL) + + public class HL { } + +PARSER_END(HL) + + TOKEN_MGR_DECLS : +{ + static int depth; +} + +SKIP : +{ + " " + | "\t" + | "\n" + | "\r" + | <"//" (~["\n","\r"])* ("\n" | "\r" | "\r\n")> + | "/'" { depth = 1; SwitchTo(COMMENT_BLOCK); } +} + +<COMMENT_BLOCK> SKIP: +{ + < "/'" > { depth++; } + | < "'/" > { if (--depth == 0) SwitchTo(DEFAULT); } + | < ~[] > +} + +TOKEN : +{ + <ELSE: "else"> + | <FOR: "for"> + | <DO: "do"> + | <IN: "in"> + | <WHILE: "while"> + | <IF: "if"> + | <THEN: "then"> + | <ELIF: "elif"> + | <FI: "fi"> + | <FUNCTION: "function"> + | <RETURN: "return"> + | <END: "end"> + | <PRINT: "print"> + | <PRINTLN: "println"> + | <VAR: "var"> + | <LESS: "<"> + | <LESSEQ: "<="> + | <GREATER: ">"> + | <GREATEQ: ">="> + | <EQUAL: "=="> + | <NOTEQ: "!="> + | <ISIN: "=in"> + | <NOTIN: "!in"> + | <PLUS: "+"> + | <MINUS: "-"> + | <TIMES: "*"> + | <DIV: "/"> + | <MOD: "%"> + | <AND: "&"> + | <VBAR: "|"> + | <NOT: "!"> + | <ASSIGN: "="> + | <LROUND: "("> + | <RROUND: ")"> + | <LCURLY: "{"> + | <RCURLY: "}"> + | <LSQUARE: "["> + | <RSQUARE: "]"> + | <COMMA: ","> + | <SEMICOL: ";"> + | <TRUE: "#1"> + | <FALSE: "#0"> + | <IDNUM: ["a"-"z"] ( ["a"-"z", "A"-"Z", "0"-"9"] )*> + | <IDSET: ["A"-"Z"] ( ["a"-"z", "A"-"Z", "0"-"9"] )*> + | <IDBOOL: "#" ["a"-"z","A"-"Z"] ( ["a"-"z", "A"-"Z", "0"-"9"] )*> + | <NUMBER: ( ["0"-"9"] )+> + | <STRING: "\"" (~["\"","\\"] | "\\" ["n","t","\\","\""])* "\"" > +} + |