1<lexer>
 2  <config>
 3    <name>TableGen</name>
 4    <alias>tablegen</alias>
 5    <filename>*.td</filename>
 6    <mime_type>text/x-tablegen</mime_type>
 7  </config>
 8  <rules>
 9    <state name="whitespace">
10      <rule pattern="(\n|\s)+">
11        <token type="Text"/>
12      </rule>
13      <rule pattern="//.*?\n">
14        <token type="Comment"/>
15      </rule>
16    </state>
17    <state name="keyword">
18      <rule pattern="(multiclass|foreach|string|class|field|defm|bits|code|list|def|int|let|dag|bit|in)\b">
19        <token type="Keyword"/>
20      </rule>
21    </state>
22    <state name="root">
23      <rule>
24        <include state="macro"/>
25      </rule>
26      <rule>
27        <include state="whitespace"/>
28      </rule>
29      <rule pattern="c?"[^"]*?"">
30        <token type="LiteralString"/>
31      </rule>
32      <rule>
33        <include state="keyword"/>
34      </rule>
35      <rule pattern="\$[_a-zA-Z][_\w]*">
36        <token type="NameVariable"/>
37      </rule>
38      <rule pattern="\d*[_a-zA-Z][_\w]*">
39        <token type="NameVariable"/>
40      </rule>
41      <rule pattern="\[\{[\w\W]*?\}\]">
42        <token type="LiteralString"/>
43      </rule>
44      <rule pattern="[+-]?\d+|0x[\da-fA-F]+|0b[01]+">
45        <token type="LiteralNumber"/>
46      </rule>
47      <rule pattern="[=<>{}\[\]()*.,!:;]">
48        <token type="Punctuation"/>
49      </rule>
50    </state>
51    <state name="macro">
52      <rule pattern="(#include\s+)("[^"]*")">
53        <bygroups>
54          <token type="CommentPreproc"/>
55          <token type="LiteralString"/>
56        </bygroups>
57      </rule>
58      <rule pattern="^\s*#(ifdef|ifndef)\s+[_\w][_\w\d]*">
59        <token type="CommentPreproc"/>
60      </rule>
61      <rule pattern="^\s*#define\s+[_\w][_\w\d]*">
62        <token type="CommentPreproc"/>
63      </rule>
64      <rule pattern="^\s*#endif">
65        <token type="CommentPreproc"/>
66      </rule>
67    </state>
68  </rules>
69</lexer>