fsharp.xml

  1<lexer>
  2  <config>
  3    <name>FSharp</name>
  4    <alias>fsharp</alias>
  5    <filename>*.fs</filename>
  6    <filename>*.fsi</filename>
  7    <mime_type>text/x-fsharp</mime_type>
  8  </config>
  9  <rules>
 10    <state name="comment">
 11      <rule pattern="[^(*)@&#34;]+">
 12        <token type="Comment"/>
 13      </rule>
 14      <rule pattern="\(\*">
 15        <token type="Comment"/>
 16        <push/>
 17      </rule>
 18      <rule pattern="\*\)">
 19        <token type="Comment"/>
 20        <pop depth="1"/>
 21      </rule>
 22      <rule pattern="@&#34;">
 23        <token type="LiteralString"/>
 24        <push state="lstring"/>
 25      </rule>
 26      <rule pattern="&#34;&#34;&#34;">
 27        <token type="LiteralString"/>
 28        <push state="tqs"/>
 29      </rule>
 30      <rule pattern="&#34;">
 31        <token type="LiteralString"/>
 32        <push state="string"/>
 33      </rule>
 34      <rule pattern="[(*)@]">
 35        <token type="Comment"/>
 36      </rule>
 37    </state>
 38    <state name="string">
 39      <rule pattern="[^\\&#34;]+">
 40        <token type="LiteralString"/>
 41      </rule>
 42      <rule>
 43        <include state="escape-sequence"/>
 44      </rule>
 45      <rule pattern="\\\n">
 46        <token type="LiteralString"/>
 47      </rule>
 48      <rule pattern="\n">
 49        <token type="LiteralString"/>
 50      </rule>
 51      <rule pattern="&#34;B?">
 52        <token type="LiteralString"/>
 53        <pop depth="1"/>
 54      </rule>
 55    </state>
 56    <state name="lstring">
 57      <rule pattern="[^&#34;]+">
 58        <token type="LiteralString"/>
 59      </rule>
 60      <rule pattern="\n">
 61        <token type="LiteralString"/>
 62      </rule>
 63      <rule pattern="&#34;&#34;">
 64        <token type="LiteralString"/>
 65      </rule>
 66      <rule pattern="&#34;B?">
 67        <token type="LiteralString"/>
 68        <pop depth="1"/>
 69      </rule>
 70    </state>
 71    <state name="tqs">
 72      <rule pattern="[^&#34;]+">
 73        <token type="LiteralString"/>
 74      </rule>
 75      <rule pattern="\n">
 76        <token type="LiteralString"/>
 77      </rule>
 78      <rule pattern="&#34;&#34;&#34;B?">
 79        <token type="LiteralString"/>
 80        <pop depth="1"/>
 81      </rule>
 82      <rule pattern="&#34;">
 83        <token type="LiteralString"/>
 84      </rule>
 85    </state>
 86    <state name="escape-sequence">
 87      <rule pattern="\\[\\&#34;\&#39;ntbrafv]">
 88        <token type="LiteralStringEscape"/>
 89      </rule>
 90      <rule pattern="\\[0-9]{3}">
 91        <token type="LiteralStringEscape"/>
 92      </rule>
 93      <rule pattern="\\u[0-9a-fA-F]{4}">
 94        <token type="LiteralStringEscape"/>
 95      </rule>
 96      <rule pattern="\\U[0-9a-fA-F]{8}">
 97        <token type="LiteralStringEscape"/>
 98      </rule>
 99    </state>
100    <state name="root">
101      <rule pattern="\s+">
102        <token type="Text"/>
103      </rule>
104      <rule pattern="\(\)|\[\]">
105        <token type="NameBuiltinPseudo"/>
106      </rule>
107      <rule pattern="\b(?&lt;!\.)([A-Z][\w\&#39;]*)(?=\s*\.)">
108        <token type="NameNamespace"/>
109        <push state="dotted"/>
110      </rule>
111      <rule pattern="\b([A-Z][\w\&#39;]*)">
112        <token type="Name"/>
113      </rule>
114      <rule pattern="///.*?\n">
115        <token type="LiteralStringDoc"/>
116      </rule>
117      <rule pattern="//.*?\n">
118        <token type="CommentSingle"/>
119      </rule>
120      <rule pattern="\(\*(?!\))">
121        <token type="Comment"/>
122        <push state="comment"/>
123      </rule>
124      <rule pattern="@&#34;">
125        <token type="LiteralString"/>
126        <push state="lstring"/>
127      </rule>
128      <rule pattern="&#34;&#34;&#34;">
129        <token type="LiteralString"/>
130        <push state="tqs"/>
131      </rule>
132      <rule pattern="&#34;">
133        <token type="LiteralString"/>
134        <push state="string"/>
135      </rule>
136      <rule pattern="\b(open type|open|module)(\s+)([\w.]+)">
137        <bygroups>
138          <token type="Keyword"/>
139          <token type="Text"/>
140          <token type="NameNamespace"/>
141        </bygroups>
142      </rule>
143      <rule pattern="\b(let!?)(\s+)(\w+)">
144        <bygroups>
145          <token type="Keyword"/>
146          <token type="Text"/>
147          <token type="NameVariable"/>
148        </bygroups>
149      </rule>
150      <rule pattern="\b(type)(\s+)(\w+)">
151        <bygroups>
152          <token type="Keyword"/>
153          <token type="Text"/>
154          <token type="NameClass"/>
155        </bygroups>
156      </rule>
157      <rule pattern="\b(member|override)(\s+)(\w+)(\.)(\w+)">
158        <bygroups>
159          <token type="Keyword"/>
160          <token type="Text"/>
161          <token type="Name"/>
162          <token type="Punctuation"/>
163          <token type="NameFunction"/>
164        </bygroups>
165      </rule>
166      <rule pattern="\b(abstract|as|assert|base|begin|class|default|delegate|do!|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|function|fun|global|if|inherit|inline|interface|internal|in|lazy|let!|let|match|member|module|mutable|namespace|new|null|of|open|override|private|public|rec|return!|return|select|static|struct|then|to|true|try|type|upcast|use!|use|val|void|when|while|with|yield!|yield|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\b">
167        <token type="Keyword"/>
168      </rule>
169      <rule pattern="``([^`\n\r\t]|`[^`\n\r\t])+``">
170        <token type="Name"/>
171      </rule>
172      <rule pattern="#[ \t]*(if|endif|else|line|nowarn|light|r|\d+)\b">
173        <token type="CommentPreproc"/>
174      </rule>
175      <rule pattern="(!=|#|&amp;&amp;|&amp;|\(|\)|\*|\+|,|-\.|-&gt;|-|\.\.|\.|::|:=|:&gt;|:|;;|;|&lt;-|&lt;\]|&lt;|&gt;\]|&gt;|\?\?|\?|\[&lt;|\[\||\[|\]|_|`|\{|\|\]|\||\}|~|&lt;@@|&lt;@|=|@&gt;|@@&gt;)">
176        <token type="Operator"/>
177      </rule>
178      <rule pattern="([=&lt;&gt;@^|&amp;+\*/$%-]|[!?~])?[!$%&amp;*+\./:&lt;=&gt;?@^|~-]">
179        <token type="Operator"/>
180      </rule>
181      <rule pattern="\b(and|or|not)\b">
182        <token type="OperatorWord"/>
183      </rule>
184      <rule pattern="\b(sbyte|byte|char|nativeint|unativeint|float32|single|float|double|int8|uint8|int16|uint16|int32|uint32|int64|uint64|decimal|unit|bool|string|list|exn|obj|enum)\b">
185        <token type="KeywordType"/>
186      </rule>
187      <rule pattern="[^\W\d][\w&#39;]*">
188        <token type="Name"/>
189      </rule>
190      <rule pattern="\d[\d_]*[uU]?[yslLnQRZINGmM]?">
191        <token type="LiteralNumberInteger"/>
192      </rule>
193      <rule pattern="0[xX][\da-fA-F][\da-fA-F_]*[uU]?[yslLn]?[fF]?">
194        <token type="LiteralNumberHex"/>
195      </rule>
196      <rule pattern="0[oO][0-7][0-7_]*[uU]?[yslLn]?">
197        <token type="LiteralNumberOct"/>
198      </rule>
199      <rule pattern="0[bB][01][01_]*[uU]?[yslLn]?">
200        <token type="LiteralNumberBin"/>
201      </rule>
202      <rule pattern="-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)[fFmM]?">
203        <token type="LiteralNumberFloat"/>
204      </rule>
205      <rule pattern="&#39;(?:(\\[\\\&#34;&#39;ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))&#39;B?">
206        <token type="LiteralStringChar"/>
207      </rule>
208      <rule pattern="&#39;.&#39;">
209        <token type="LiteralStringChar"/>
210      </rule>
211      <rule pattern="&#39;">
212        <token type="Keyword"/>
213      </rule>
214      <rule pattern="@?&#34;">
215        <token type="LiteralStringDouble"/>
216        <push state="string"/>
217      </rule>
218      <rule pattern="[~?][a-z][\w\&#39;]*:">
219        <token type="NameVariable"/>
220      </rule>
221    </state>
222    <state name="dotted">
223      <rule pattern="\s+">
224        <token type="Text"/>
225      </rule>
226      <rule pattern="\.">
227        <token type="Punctuation"/>
228      </rule>
229      <rule pattern="[A-Z][\w\&#39;]*(?=\s*\.)">
230        <token type="NameNamespace"/>
231      </rule>
232      <rule pattern="[A-Z][\w\&#39;]*">
233        <token type="Name"/>
234        <pop depth="1"/>
235      </rule>
236      <rule pattern="[a-z_][\w\&#39;]*">
237        <token type="Name"/>
238        <pop depth="1"/>
239      </rule>
240      <rule>
241        <pop depth="1"/>
242      </rule>
243    </state>
244  </rules>
245</lexer>