1<lexer>
  2  <config>
  3    <name>OCaml</name>
  4    <alias>ocaml</alias>
  5    <filename>*.ml</filename>
  6    <filename>*.mli</filename>
  7    <filename>*.mll</filename>
  8    <filename>*.mly</filename>
  9    <mime_type>text/x-ocaml</mime_type>
 10  </config>
 11  <rules>
 12    <state name="escape-sequence">
 13      <rule pattern="\\[\\&#34;\&#39;ntbr]">
 14        <token type="LiteralStringEscape"/>
 15      </rule>
 16      <rule pattern="\\[0-9]{3}">
 17        <token type="LiteralStringEscape"/>
 18      </rule>
 19      <rule pattern="\\x[0-9a-fA-F]{2}">
 20        <token type="LiteralStringEscape"/>
 21      </rule>
 22    </state>
 23    <state name="root">
 24      <rule pattern="\s+">
 25        <token type="Text"/>
 26      </rule>
 27      <rule pattern="false|true|\(\)|\[\]">
 28        <token type="NameBuiltinPseudo"/>
 29      </rule>
 30      <rule pattern="\b([A-Z][\w\&#39;]*)(?=\s*\.)">
 31        <token type="NameNamespace"/>
 32        <push state="dotted"/>
 33      </rule>
 34      <rule pattern="\b([A-Z][\w\&#39;]*)">
 35        <token type="NameClass"/>
 36      </rule>
 37      <rule pattern="\(\*(?![)])">
 38        <token type="Comment"/>
 39        <push state="comment"/>
 40      </rule>
 41      <rule pattern="\b(as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|false|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|private|raise|rec|sig|struct|then|to|true|try|type|value|val|virtual|when|while|with)\b">
 42        <token type="Keyword"/>
 43      </rule>
 44      <rule pattern="({([a-z_]*)\|)([\s\S]+?)(?=\|\2})(\|\2})">
 45        <bygroups>
 46          <token type="LiteralStringAffix"/>
 47          <token type="Ignore"/>
 48          <token type="LiteralString"/>
 49          <token type="LiteralStringAffix"/>
 50        </bygroups>
 51      </rule>
 52      <rule pattern="(~|\}|\|]|\||\{&lt;|\{|`|_|]|\[\||\[&gt;|\[&lt;|\[|\?\?|\?|&gt;\}|&gt;]|&gt;|=|&lt;-|&lt;|;;|;|:&gt;|:=|::|:|\.\.|\.|-&gt;|-\.|-|,|\+|\*|\)|\(|&amp;&amp;|&amp;|#|!=)">
 53        <token type="Operator"/>
 54      </rule>
 55      <rule pattern="([=&lt;&gt;@^|&amp;+\*/$%-]|[!?~])?[!$%&amp;*+\./:&lt;=&gt;?@^|~-]">
 56        <token type="Operator"/>
 57      </rule>
 58      <rule pattern="\b(and|asr|land|lor|lsl|lxor|mod|or)\b">
 59        <token type="OperatorWord"/>
 60      </rule>
 61      <rule pattern="\b(unit|int|float|bool|string|char|list|array)\b">
 62        <token type="KeywordType"/>
 63      </rule>
 64      <rule pattern="[^\W\d][\w&#39;]*">
 65        <token type="Name"/>
 66      </rule>
 67      <rule pattern="-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)">
 68        <token type="LiteralNumberFloat"/>
 69      </rule>
 70      <rule pattern="0[xX][\da-fA-F][\da-fA-F_]*">
 71        <token type="LiteralNumberHex"/>
 72      </rule>
 73      <rule pattern="0[oO][0-7][0-7_]*">
 74        <token type="LiteralNumberOct"/>
 75      </rule>
 76      <rule pattern="0[bB][01][01_]*">
 77        <token type="LiteralNumberBin"/>
 78      </rule>
 79      <rule pattern="\d[\d_]*">
 80        <token type="LiteralNumberInteger"/>
 81      </rule>
 82      <rule pattern="&#39;(?:(\\[\\\&#34;&#39;ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))&#39;">
 83        <token type="LiteralStringChar"/>
 84      </rule>
 85      <rule pattern="&#39;.&#39;">
 86        <token type="LiteralStringChar"/>
 87      </rule>
 88      <rule pattern="&#39;">
 89        <token type="Keyword"/>
 90      </rule>
 91      <rule pattern="&#34;">
 92        <token type="LiteralStringDouble"/>
 93        <push state="string"/>
 94      </rule>
 95      <rule pattern="[~?][a-z][\w\&#39;]*:">
 96        <token type="NameVariable"/>
 97      </rule>
 98    </state>
 99    <state name="comment">
100      <rule pattern="[^(*)]+">
101        <token type="Comment"/>
102      </rule>
103      <rule pattern="\(\*">
104        <token type="Comment"/>
105        <push/>
106      </rule>
107      <rule pattern="\*\)">
108        <token type="Comment"/>
109        <pop depth="1"/>
110      </rule>
111      <rule pattern="[(*)]">
112        <token type="Comment"/>
113      </rule>
114    </state>
115    <state name="string">
116      <rule pattern="[^\\&#34;]+">
117        <token type="LiteralStringDouble"/>
118      </rule>
119      <rule>
120        <include state="escape-sequence"/>
121      </rule>
122      <rule pattern="\\\n">
123        <token type="LiteralStringDouble"/>
124      </rule>
125      <rule pattern="&#34;">
126        <token type="LiteralStringDouble"/>
127        <pop depth="1"/>
128      </rule>
129    </state>
130    <state name="dotted">
131      <rule pattern="\s+">
132        <token type="Text"/>
133      </rule>
134      <rule pattern="\.">
135        <token type="Punctuation"/>
136      </rule>
137      <rule pattern="[A-Z][\w\&#39;]*(?=\s*\.)">
138        <token type="NameNamespace"/>
139      </rule>
140      <rule pattern="[A-Z][\w\&#39;]*">
141        <token type="NameClass"/>
142        <pop depth="1"/>
143      </rule>
144      <rule pattern="[a-z_][\w\&#39;]*">
145        <token type="Name"/>
146        <pop depth="1"/>
147      </rule>
148      <rule>
149        <pop depth="1"/>
150      </rule>
151    </state>
152  </rules>
153</lexer>