4 %implements java_cup.runtime.Scanner
6 %type java_cup.runtime.Symbol
14 return tok(Sym.EOF, null);
18 private java_cup.runtime.Symbol tok(int kind, Object value) {
19 return new Symbol(kind, yychar, yychar + yylength(), value, yyline);
26 WHITESPACE=[\ \t\b\r\f]
27 CHAR=(\\\"|\\\'|\\\\|\\t|\\n|[\x20-\x21\x23-\x26\x28-\x5B\x5D-\x7E])
31 <YYINITIAL> {WHITESPACE} {}
32 <YYINITIAL> \n { LineCount.addLineBreak(yychar+1); }
34 <YYINITIAL> "{" { return tok(Sym.OPENBRACE, yytext()); }
35 <YYINITIAL> "}" { return tok(Sym.CLOSEBRACE, yytext()); }
36 <YYINITIAL> "(" { return tok(Sym.OPENPAREN, yytext()); }
37 <YYINITIAL> ")" { return tok(Sym.CLOSEPAREN, yytext()); }
38 <YYINITIAL> "[" { return tok(Sym.OPENBRACKET, yytext()); }
39 <YYINITIAL> "]" { return tok(Sym.CLOSEBRACKET, yytext()); }
41 <YYINITIAL> "+" { return tok(Sym.ADD, yytext()); }
42 <YYINITIAL> "-" { return tok(Sym.SUB, yytext()); }
43 <YYINITIAL> "*" { return tok(Sym.MULT, yytext()); }
44 <YYINITIAL> "/" { return tok(Sym.DIV, yytext()); }
47 <YYINITIAL> "<" { return tok(Sym.LT, yytext()); }
48 <YYINITIAL> ">" { return tok(Sym.GT, yytext()); }
49 <YYINITIAL> "<=" { return tok(Sym.LE, yytext()); }
50 <YYINITIAL> ">=" { return tok(Sym.GE, yytext()); }
51 <YYINITIAL> "=" { return tok(Sym.EQ, yytext()); }
52 <YYINITIAL> "!=" { return tok(Sym.NE, yytext()); }
53 <YYINITIAL> "!" { return tok(Sym.NOT, yytext()); }
55 <YYINITIAL> forall { return tok(Sym.FORALL, yytext()); }
56 <YYINITIAL> in\? { return tok(Sym.INTEST, yytext()); }
57 <YYINITIAL> in { return tok(Sym.IN, yytext()); }
59 <YYINITIAL> "," { return tok(Sym.COMMA, yytext()); }
60 <YYINITIAL> sizeof { return tok(Sym.SIZEOF, yytext()); }
62 <YYINITIAL> ".~" { return tok(Sym.DOTINV, yytext()); }
63 <YYINITIAL> "." { return tok(Sym.DOT, yytext()); }
65 <YYINITIAL> "and" { return tok(Sym.AND, yytext()); }
66 <YYINITIAL> "or" { return tok(Sym.OR, yytext()); }
68 <YYINITIAL> literal { return tok(Sym.LITERAL, yytext()); }
69 <YYINITIAL> param { return tok(Sym.PARAM, yytext()); }
70 <YYINITIAL> "=>" { return tok(Sym.IMPLIES, yytext()); }
71 <YYINITIAL> true { return tok(Sym.TRUE, yytext()); }
72 <YYINITIAL> false { return tok(Sym.FALSE, yytext()); }
73 <YYINITIAL> isvalid { return tok(Sym.ISVALID, yytext()); }
74 <YYINITIAL> for { return tok(Sym.FOR, yytext()); }
75 <YYINITIAL> to { return tok(Sym.TO, yytext()); }
77 <YYINITIAL> structure { return tok(Sym.STRUCTURE, yytext()); }
78 <YYINITIAL> reserved { return tok(Sym.RESERVED, yytext()); }
79 <YYINITIAL> label { return tok(Sym.LABEL, yytext()); }
80 <YYINITIAL> int { return tok(Sym.INT, yytext()); }
81 <YYINITIAL> bit { return tok(Sym.BIT, yytext()); }
82 <YYINITIAL> byte { return tok(Sym.BYTE, yytext()); }
84 <YYINITIAL> subtype { return tok(Sym.SUBTYPE, yytext()); }
85 <YYINITIAL> of { return tok(Sym.OF, yytext()); }
87 <YYINITIAL> ";" { return tok(Sym.SEMICOLON, yytext()); }
88 <YYINITIAL> ":" { return tok(Sym.COLON, yytext()); }
90 <YYINITIAL> set { return tok(Sym.SET, yytext()); }
91 <YYINITIAL> "->" { return tok(Sym.ARROW, yytext()); }
92 <YYINITIAL> many { return tok(Sym.MANY, yytext()); }
93 <YYINITIAL> "|" { return tok(Sym.BAR, yytext()); }
95 <YYINITIAL> partition { return tok(Sym.PARTITION, yytext()); }
96 <YYINITIAL> element { return tok(Sym.ELEMENT, yytext()); }
97 <YYINITIAL> delay { return tok(Sym.DELAY, yytext()); }
98 <YYINITIAL> static { return tok(Sym.STATIC, yytext()); }
100 <YYINITIAL> cast { return tok(Sym.CAST, yytext()); }
101 <YYINITIAL> short { return tok(Sym.SHORT, yytext()); }
102 <YYINITIAL> null { return tok(Sym.NULL, yytext()); }
103 <YYINITIAL> crash { return tok(Sym.CRASH, yytext()); }
105 <YYINITIAL> {ALPHA}({ALPHA}|{DIGIT})* { return tok(Sym.ID, yytext()); }
106 <YYINITIAL> {DIGIT}+ { return tok(Sym.DECIMAL, yytext()); }
107 <YYINITIAL> \'{CHAR}\' { return tok(Sym.CHAR, yytext()); }
108 <YYINITIAL> \"{CHAR}*\" { return tok(Sym.STRING, yytext()); }
110 <YYINITIAL> . { System.err.println("Bad token at line " + (yyline + 1) + ": " + yytext()); return tok(Sym.BAD, yytext()); }
112 <YYINITIAL> "//" { yybegin(COMMENT); }
113 <COMMENT> \n { yybegin(YYINITIAL); LineCount.addLineBreak(yychar+1); }
115 <YYINITIAL> "/*" { yybegin(MLCOMMENT); }
116 <MLCOMMENT> "*/" { yybegin(YYINITIAL); }
117 <MLCOMMENT> \n { LineCount.addLineBreak(yychar+1); }