1<lexer>
  2  <config>
  3    <name>Dylan</name>
  4    <alias>dylan</alias>
  5    <filename>*.dylan</filename>
  6    <filename>*.dyl</filename>
  7    <filename>*.intr</filename>
  8    <mime_type>text/x-dylan</mime_type>
  9    <case_insensitive>true</case_insensitive>
 10  </config>
 11  <rules>
 12    <state name="string">
 13      <rule pattern=""">
 14        <token type="LiteralString"/>
 15        <pop depth="1"/>
 16      </rule>
 17      <rule pattern="\\([\\abfnrtv"\']|x[a-f0-9]{2,4}|[0-7]{1,3})">
 18        <token type="LiteralStringEscape"/>
 19      </rule>
 20      <rule pattern="[^\\"\n]+">
 21        <token type="LiteralString"/>
 22      </rule>
 23      <rule pattern="\\\n">
 24        <token type="LiteralString"/>
 25      </rule>
 26      <rule pattern="\\">
 27        <token type="LiteralString"/>
 28      </rule>
 29    </state>
 30    <state name="root">
 31      <rule pattern="\s+">
 32        <token type="TextWhitespace"/>
 33      </rule>
 34      <rule pattern="//.*?\n">
 35        <token type="CommentSingle"/>
 36      </rule>
 37      <rule pattern="([a-z0-9-]+:)([ \t]*)(.*(?:\n[ \t].+)*)">
 38        <bygroups>
 39          <token type="NameAttribute"/>
 40          <token type="TextWhitespace"/>
 41          <token type="LiteralString"/>
 42        </bygroups>
 43      </rule>
 44      <rule>
 45        <push state="code"/>
 46      </rule>
 47    </state>
 48    <state name="code">
 49      <rule pattern="\s+">
 50        <token type="TextWhitespace"/>
 51      </rule>
 52      <rule pattern="//.*?\n">
 53        <token type="CommentSingle"/>
 54      </rule>
 55      <rule pattern="/\*">
 56        <token type="CommentMultiline"/>
 57        <push state="comment"/>
 58      </rule>
 59      <rule pattern=""">
 60        <token type="LiteralString"/>
 61        <push state="string"/>
 62      </rule>
 63      <rule pattern="'(\\.|\\[0-7]{1,3}|\\x[a-f0-9]{1,2}|[^\\\'\n])'">
 64        <token type="LiteralStringChar"/>
 65      </rule>
 66      <rule pattern="#b[01]+">
 67        <token type="LiteralNumberBin"/>
 68      </rule>
 69      <rule pattern="#o[0-7]+">
 70        <token type="LiteralNumberOct"/>
 71      </rule>
 72      <rule pattern="[-+]?(\d*\.\d+([ed][-+]?\d+)?|\d+(\.\d*)?e[-+]?\d+)">
 73        <token type="LiteralNumberFloat"/>
 74      </rule>
 75      <rule pattern="[-+]?\d+">
 76        <token type="LiteralNumberInteger"/>
 77      </rule>
 78      <rule pattern="#x[0-9a-f]+">
 79        <token type="LiteralNumberHex"/>
 80      </rule>
 81      <rule pattern="(\?\\?)([\w!&*<>|^$%@+~?/=-]+)(:)(token|name|variable|expression|body|case-body|\*)">
 82        <bygroups>
 83          <token type="Operator"/>
 84          <token type="NameVariable"/>
 85          <token type="Operator"/>
 86          <token type="NameBuiltin"/>
 87        </bygroups>
 88      </rule>
 89      <rule pattern="(\?)(:)(token|name|variable|expression|body|case-body|\*)">
 90        <bygroups>
 91          <token type="Operator"/>
 92          <token type="Operator"/>
 93          <token type="NameVariable"/>
 94        </bygroups>
 95      </rule>
 96      <rule pattern="(\?\\?)([\w!&*<>|^$%@+~?/=-]+)">
 97        <bygroups>
 98          <token type="Operator"/>
 99          <token type="NameVariable"/>
100        </bygroups>
101      </rule>
102      <rule pattern="(=>|::|#\(|#\[|##|\?\?|\?=|\?|[(){}\[\],.;])">
103        <token type="Punctuation"/>
104      </rule>
105      <rule pattern=":=">
106        <token type="Operator"/>
107      </rule>
108      <rule pattern="#[tf]">
109        <token type="Literal"/>
110      </rule>
111      <rule pattern="#"">
112        <token type="LiteralStringSymbol"/>
113        <push state="symbol"/>
114      </rule>
115      <rule pattern="#[a-z0-9-]+">
116        <token type="Keyword"/>
117      </rule>
118      <rule pattern="#(all-keys|include|key|next|rest)">
119        <token type="Keyword"/>
120      </rule>
121      <rule pattern="[\w!&*<>|^$%@+~?/=-]+:">
122        <token type="KeywordConstant"/>
123      </rule>
124      <rule pattern="<[\w!&*<>|^$%@+~?/=-]+>">
125        <token type="NameClass"/>
126      </rule>
127      <rule pattern="\*[\w!&*<>|^$%@+~?/=-]+\*">
128        <token type="NameVariableGlobal"/>
129      </rule>
130      <rule pattern="\$[\w!&*<>|^$%@+~?/=-]+">
131        <token type="NameConstant"/>
132      </rule>
133      <rule pattern="(let|method|function)([ \t]+)([\w!&*<>|^$%@+~?/=-]+)">
134        <bygroups>
135          <token type="NameBuiltin"/>
136          <token type="TextWhitespace"/>
137          <token type="NameVariable"/>
138        </bygroups>
139      </rule>
140      <rule pattern="(error|signal|return|break)">
141        <token type="NameException"/>
142      </rule>
143      <rule pattern="(\\?)([\w!&*<>|^$%@+~?/=-]+)">
144        <bygroups>
145          <token type="Operator"/>
146          <token type="Name"/>
147        </bygroups>
148      </rule>
149    </state>
150    <state name="comment">
151      <rule pattern="[^*/]">
152        <token type="CommentMultiline"/>
153      </rule>
154      <rule pattern="/\*">
155        <token type="CommentMultiline"/>
156        <push/>
157      </rule>
158      <rule pattern="\*/">
159        <token type="CommentMultiline"/>
160        <pop depth="1"/>
161      </rule>
162      <rule pattern="[*/]">
163        <token type="CommentMultiline"/>
164      </rule>
165    </state>
166    <state name="symbol">
167      <rule pattern=""">
168        <token type="LiteralStringSymbol"/>
169        <pop depth="1"/>
170      </rule>
171      <rule pattern="[^\\"]+">
172        <token type="LiteralStringSymbol"/>
173      </rule>
174    </state>
175  </rules>
176</lexer>