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","\\","\""])* "\"" >
}
|