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