summary refs log tree commit diff
path: root/F2024/cps710/assignments/A1/HL.jj
blob: 54657ccbd62b970bf1aa04f52bcdd10a22fde1f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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","\\","\""])* "\"" > 
}