1<lexer>
 2  <config>
 3    <name>Snobol</name>
 4    <alias>snobol</alias>
 5    <filename>*.snobol</filename>
 6    <mime_type>text/x-snobol</mime_type>
 7  </config>
 8  <rules>
 9    <state name="heredoc">
10      <rule pattern=".*\n">
11        <token type="LiteralStringHeredoc"/>
12      </rule>
13    </state>
14    <state name="root">
15      <rule pattern="\*.*\n">
16        <token type="Comment"/>
17      </rule>
18      <rule pattern="[+.] ">
19        <token type="Punctuation"/>
20        <push state="statement"/>
21      </rule>
22      <rule pattern="-.*\n">
23        <token type="Comment"/>
24      </rule>
25      <rule pattern="END\s*\n">
26        <token type="NameLabel"/>
27        <push state="heredoc"/>
28      </rule>
29      <rule pattern="[A-Za-z$][\w$]*">
30        <token type="NameLabel"/>
31        <push state="statement"/>
32      </rule>
33      <rule pattern="\s+">
34        <token type="Text"/>
35        <push state="statement"/>
36      </rule>
37    </state>
38    <state name="statement">
39      <rule pattern="\s*\n">
40        <token type="Text"/>
41        <pop depth="1"/>
42      </rule>
43      <rule pattern="\s+">
44        <token type="Text"/>
45      </rule>
46      <rule pattern="(?<=[^\w.])(LT|LE|EQ|NE|GE|GT|INTEGER|IDENT|DIFFER|LGT|SIZE|REPLACE|TRIM|DUPL|REMDR|DATE|TIME|EVAL|APPLY|OPSYN|LOAD|UNLOAD|LEN|SPAN|BREAK|ANY|NOTANY|TAB|RTAB|REM|POS|RPOS|FAIL|FENCE|ABORT|ARB|ARBNO|BAL|SUCCEED|INPUT|OUTPUT|TERMINAL)(?=[^\w.])">
47        <token type="NameBuiltin"/>
48      </rule>
49      <rule pattern="[A-Za-z][\w.]*">
50        <token type="Name"/>
51      </rule>
52      <rule pattern="\*\*|[?$.!%*/#+\-@|&\\=]">
53        <token type="Operator"/>
54      </rule>
55      <rule pattern=""[^"]*"">
56        <token type="LiteralString"/>
57      </rule>
58      <rule pattern="'[^']*'">
59        <token type="LiteralString"/>
60      </rule>
61      <rule pattern="[0-9]+(?=[^.EeDd])">
62        <token type="LiteralNumberInteger"/>
63      </rule>
64      <rule pattern="[0-9]+(\.[0-9]*)?([EDed][-+]?[0-9]+)?">
65        <token type="LiteralNumberFloat"/>
66      </rule>
67      <rule pattern=":">
68        <token type="Punctuation"/>
69        <push state="goto"/>
70      </rule>
71      <rule pattern="[()<>,;]">
72        <token type="Punctuation"/>
73      </rule>
74    </state>
75    <state name="goto">
76      <rule pattern="\s*\n">
77        <token type="Text"/>
78        <pop depth="2"/>
79      </rule>
80      <rule pattern="\s+">
81        <token type="Text"/>
82      </rule>
83      <rule pattern="F|S">
84        <token type="Keyword"/>
85      </rule>
86      <rule pattern="(\()([A-Za-z][\w.]*)(\))">
87        <bygroups>
88          <token type="Punctuation"/>
89          <token type="NameLabel"/>
90          <token type="Punctuation"/>
91        </bygroups>
92      </rule>
93    </state>
94  </rules>
95</lexer>