1
 2<lexer>
 3  <config>
 4    <name>SNBT</name>
 5    <alias>snbt</alias>
 6    <filename>*.snbt</filename>
 7    <mime_type>text/snbt</mime_type>
 8  </config>
 9  <rules>
10    <state name="root">
11      <rule pattern="\{"><token type="Punctuation"/><push state="compound"/></rule>
12      <rule pattern="[^\{]+"><token type="Text"/></rule>
13    </state>
14    <state name="whitespace">
15      <rule pattern="\s+"><token type="TextWhitespace"/></rule>
16    </state>
17    <state name="operators">
18      <rule pattern="[,:;]"><token type="Punctuation"/></rule>
19    </state>
20    <state name="literals">
21      <rule pattern="(true|false)"><token type="KeywordConstant"/></rule>
22      <rule pattern="-?\d+[eE]-?\d+"><token type="LiteralNumberFloat"/></rule>
23      <rule pattern="-?\d*\.\d+[fFdD]?"><token type="LiteralNumberFloat"/></rule>
24      <rule pattern="-?\d+[bBsSlLfFdD]?"><token type="LiteralNumberInteger"/></rule>
25      <rule pattern="""><token type="LiteralStringDouble"/><push state="literals.string_double"/></rule>
26      <rule pattern="'"><token type="LiteralStringSingle"/><push state="literals.string_single"/></rule>
27    </state>
28    <state name="literals.string_double">
29      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
30      <rule pattern="[^\\"\n]+"><token type="LiteralStringDouble"/></rule>
31      <rule pattern="""><token type="LiteralStringDouble"/><pop depth="1"/></rule>
32    </state>
33    <state name="literals.string_single">
34      <rule pattern="\\."><token type="LiteralStringEscape"/></rule>
35      <rule pattern="[^\\'\n]+"><token type="LiteralStringSingle"/></rule>
36      <rule pattern="'"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
37    </state>
38    <state name="compound">
39      <rule pattern="[A-Z_a-z]+"><token type="NameAttribute"/></rule>
40      <rule><include state="operators"/></rule>
41      <rule><include state="whitespace"/></rule>
42      <rule><include state="literals"/></rule>
43      <rule pattern="\{"><token type="Punctuation"/><push/></rule>
44      <rule pattern="\["><token type="Punctuation"/><push state="list"/></rule>
45      <rule pattern="\}"><token type="Punctuation"/><pop depth="1"/></rule>
46    </state>
47    <state name="list">
48      <rule pattern="[A-Z_a-z]+"><token type="NameAttribute"/></rule>
49      <rule><include state="literals"/></rule>
50      <rule><include state="operators"/></rule>
51      <rule><include state="whitespace"/></rule>
52      <rule pattern="\["><token type="Punctuation"/><push/></rule>
53      <rule pattern="\{"><token type="Punctuation"/><push state="compound"/></rule>
54      <rule pattern="\]"><token type="Punctuation"/><pop depth="1"/></rule>
55    </state>
56  </rules>
57</lexer>
58