modula-2.xml

  1<lexer>
  2  <config>
  3    <name>Modula-2</name>
  4    <alias>modula2</alias>
  5    <alias>m2</alias>
  6    <filename>*.def</filename>
  7    <filename>*.mod</filename>
  8    <mime_type>text/x-modula2</mime_type>
  9    <dot_all>true</dot_all>
 10  </config>
 11  <rules>
 12    <state name="dialecttags">
 13      <rule pattern="\(\*!m2pim\*\)">
 14        <token type="CommentSpecial"/>
 15      </rule>
 16      <rule pattern="\(\*!m2iso\*\)">
 17        <token type="CommentSpecial"/>
 18      </rule>
 19      <rule pattern="\(\*!m2r10\*\)">
 20        <token type="CommentSpecial"/>
 21      </rule>
 22      <rule pattern="\(\*!objm2\*\)">
 23        <token type="CommentSpecial"/>
 24      </rule>
 25      <rule pattern="\(\*!m2iso\+aglet\*\)">
 26        <token type="CommentSpecial"/>
 27      </rule>
 28      <rule pattern="\(\*!m2pim\+gm2\*\)">
 29        <token type="CommentSpecial"/>
 30      </rule>
 31      <rule pattern="\(\*!m2iso\+p1\*\)">
 32        <token type="CommentSpecial"/>
 33      </rule>
 34      <rule pattern="\(\*!m2iso\+xds\*\)">
 35        <token type="CommentSpecial"/>
 36      </rule>
 37    </state>
 38    <state name="unigraph_operators">
 39      <rule pattern="[+-]">
 40        <token type="Operator"/>
 41      </rule>
 42      <rule pattern="[*/]">
 43        <token type="Operator"/>
 44      </rule>
 45      <rule pattern="\\">
 46        <token type="Operator"/>
 47      </rule>
 48      <rule pattern="[=#&lt;&gt;]">
 49        <token type="Operator"/>
 50      </rule>
 51      <rule pattern="\^">
 52        <token type="Operator"/>
 53      </rule>
 54      <rule pattern="@">
 55        <token type="Operator"/>
 56      </rule>
 57      <rule pattern="&amp;">
 58        <token type="Operator"/>
 59      </rule>
 60      <rule pattern="~">
 61        <token type="Operator"/>
 62      </rule>
 63      <rule pattern="`">
 64        <token type="Operator"/>
 65      </rule>
 66    </state>
 67    <state name="string_literals">
 68      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
 69        <token type="LiteralString"/>
 70      </rule>
 71      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 72        <token type="LiteralString"/>
 73      </rule>
 74    </state>
 75    <state name="identifiers">
 76      <rule pattern="([a-zA-Z_$][\w$]*)">
 77        <token type="Name"/>
 78      </rule>
 79    </state>
 80    <state name="pragmas">
 81      <rule pattern="&lt;\*.*?\*&gt;">
 82        <token type="CommentPreproc"/>
 83      </rule>
 84      <rule pattern="\(\*\$.*?\*\)">
 85        <token type="CommentPreproc"/>
 86      </rule>
 87    </state>
 88    <state name="comments">
 89      <rule pattern="^//.*?\n">
 90        <token type="CommentSingle"/>
 91      </rule>
 92      <rule pattern="\(\*([^$].*?)\*\)">
 93        <token type="CommentMultiline"/>
 94      </rule>
 95      <rule pattern="/\*(.*?)\*/">
 96        <token type="CommentMultiline"/>
 97      </rule>
 98    </state>
 99    <state name="whitespace">
100      <rule pattern="\n+">
101        <token type="Text"/>
102      </rule>
103      <rule pattern="\s+">
104        <token type="Text"/>
105      </rule>
106    </state>
107    <state name="suffixed_number_literals">
108      <rule pattern="[0-7]+B">
109        <token type="LiteralNumberOct"/>
110      </rule>
111      <rule pattern="[0-7]+C">
112        <token type="LiteralNumberOct"/>
113      </rule>
114      <rule pattern="[0-9A-F]+H">
115        <token type="LiteralNumberHex"/>
116      </rule>
117    </state>
118    <state name="plain_number_literals">
119      <rule pattern="[0-9]+(\&#39;[0-9]+)*\.[0-9]+(\&#39;[0-9]+)*[eE][+-]?[0-9]+(\&#39;[0-9]+)*">
120        <token type="LiteralNumberFloat"/>
121      </rule>
122      <rule pattern="[0-9]+(\&#39;[0-9]+)*\.[0-9]+(\&#39;[0-9]+)*">
123        <token type="LiteralNumberFloat"/>
124      </rule>
125      <rule pattern="[0-9]+(\&#39;[0-9]+)*">
126        <token type="LiteralNumberInteger"/>
127      </rule>
128    </state>
129    <state name="digraph_punctuation">
130      <rule pattern="\.\.">
131        <token type="Punctuation"/>
132      </rule>
133      <rule pattern="&lt;&lt;">
134        <token type="Punctuation"/>
135      </rule>
136      <rule pattern="&gt;&gt;">
137        <token type="Punctuation"/>
138      </rule>
139      <rule pattern="-&gt;">
140        <token type="Punctuation"/>
141      </rule>
142      <rule pattern="\|#">
143        <token type="Punctuation"/>
144      </rule>
145      <rule pattern="##">
146        <token type="Punctuation"/>
147      </rule>
148      <rule pattern="\|\*">
149        <token type="Punctuation"/>
150      </rule>
151    </state>
152    <state name="unigraph_punctuation">
153      <rule pattern="[()\[\]{},.:;|]">
154        <token type="Punctuation"/>
155      </rule>
156      <rule pattern="!">
157        <token type="Punctuation"/>
158      </rule>
159      <rule pattern="\?">
160        <token type="Punctuation"/>
161      </rule>
162    </state>
163    <state name="root">
164      <rule>
165        <include state="whitespace"/>
166      </rule>
167      <rule>
168        <include state="dialecttags"/>
169      </rule>
170      <rule>
171        <include state="pragmas"/>
172      </rule>
173      <rule>
174        <include state="comments"/>
175      </rule>
176      <rule>
177        <include state="identifiers"/>
178      </rule>
179      <rule>
180        <include state="suffixed_number_literals"/>
181      </rule>
182      <rule>
183        <include state="prefixed_number_literals"/>
184      </rule>
185      <rule>
186        <include state="plain_number_literals"/>
187      </rule>
188      <rule>
189        <include state="string_literals"/>
190      </rule>
191      <rule>
192        <include state="digraph_punctuation"/>
193      </rule>
194      <rule>
195        <include state="digraph_operators"/>
196      </rule>
197      <rule>
198        <include state="unigraph_punctuation"/>
199      </rule>
200      <rule>
201        <include state="unigraph_operators"/>
202      </rule>
203    </state>
204    <state name="prefixed_number_literals">
205      <rule pattern="0b[01]+(\&#39;[01]+)*">
206        <token type="LiteralNumberBin"/>
207      </rule>
208      <rule pattern="0[ux][0-9A-F]+(\&#39;[0-9A-F]+)*">
209        <token type="LiteralNumberHex"/>
210      </rule>
211    </state>
212    <state name="digraph_operators">
213      <rule pattern="\*\.">
214        <token type="Operator"/>
215      </rule>
216      <rule pattern="\+&gt;">
217        <token type="Operator"/>
218      </rule>
219      <rule pattern="&lt;&gt;">
220        <token type="Operator"/>
221      </rule>
222      <rule pattern="&lt;=">
223        <token type="Operator"/>
224      </rule>
225      <rule pattern="&gt;=">
226        <token type="Operator"/>
227      </rule>
228      <rule pattern="==">
229        <token type="Operator"/>
230      </rule>
231      <rule pattern="::">
232        <token type="Operator"/>
233      </rule>
234      <rule pattern=":=">
235        <token type="Operator"/>
236      </rule>
237      <rule pattern="\+\+">
238        <token type="Operator"/>
239      </rule>
240      <rule pattern="--">
241        <token type="Operator"/>
242      </rule>
243    </state>
244  </rules>
245</lexer>