1<lexer>
2 <config>
3 <name>lox</name>
4 <filename>*.lox</filename>
5 <dot_all>true</dot_all>
6 <ensure_nl>true</ensure_nl>
7 </config>
8 <rules>
9 <state name="whitespace">
10 <rule pattern="\n">
11 <token type="Text"/>
12 </rule>
13 <rule pattern="\s+">
14 <token type="Text"/>
15 </rule>
16 </state>
17 <state name="root">
18 <rule>
19 <include state="whitespace"/>
20 </rule>
21 <rule pattern="//.*?\n">
22 <token type="CommentSingle"/>
23 </rule>
24 <rule pattern="(and|break|case|continue|default|else|for|if|or|print|return|super|switch|this|while)\b">
25 <token type="Keyword"/>
26 </rule>
27 <rule pattern="(false|nil|true)\b">
28 <token type="KeywordConstant"/>
29 </rule>
30 <rule pattern="(class)(\s+)([a-zA-Z_]\w*)">
31 <bygroups>
32 <token type="KeywordDeclaration"/>
33 <token type="Text"/>
34 <token type="NameClass"/>
35 </bygroups>
36 </rule>
37 <rule pattern="(fun)(\s+)([a-zA-Z_]\w*)">
38 <bygroups>
39 <token type="KeywordDeclaration"/>
40 <token type="Text"/>
41 <token type="NameFunction"/>
42 </bygroups>
43 </rule>
44 <rule pattern="(const)(\s+)([a-zA-Z_]\w*)">
45 <bygroups>
46 <token type="KeywordDeclaration"/>
47 <token type="Text"/>
48 <token type="NameConstant"/>
49 </bygroups>
50 </rule>
51 <rule pattern="(var)(\s+)([a-zA-Z_]\w*)">
52 <bygroups>
53 <token type="KeywordDeclaration"/>
54 <token type="Text"/>
55 <token type="NameVariable"/>
56 </bygroups>
57 </rule>
58 <rule pattern="\d+(\.\d*|[eE][+\-]?\d+)">
59 <token type="LiteralNumberFloat"/>
60 </rule>
61 <rule pattern="[0-9][0-9]*">
62 <token type="LiteralNumberInteger"/>
63 </rule>
64 <rule pattern=""(\\\\|\\"|[^"])*"">
65 <token type="LiteralStringDouble"/>
66 </rule>
67 <rule pattern="!|\+|-|\*|/|<|>|=">
68 <token type="Operator"/>
69 </rule>
70 <rule pattern="[{}():;.,]">
71 <token type="Punctuation"/>
72 </rule>
73 <rule pattern="[a-zA-Z_]\w*">
74 <token type="NameVariable"/>
75 </rule>
76 </state>
77 </rules>
78</lexer>