ocaml.xml

  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="(~|\}|\|]|\||\{&lt;|\{|`|_|]|\[\||\[&gt;|\[&lt;|\[|\?\?|\?|&gt;\}|&gt;]|&gt;|=|&lt;-|&lt;|;;|;|:&gt;|:=|::|:|\.\.|\.|-&gt;|-\.|-|,|\+|\*|\)|\(|&amp;&amp;|&amp;|#|!=)">
 45        <token type="Operator"/>
 46      </rule>
 47      <rule pattern="([=&lt;&gt;@^|&amp;+\*/$%-]|[!?~])?[!$%&amp;*+\./:&lt;=&gt;?@^|~-]">
 48        <token type="Operator"/>
 49      </rule>
 50      <rule pattern="\b(and|asr|land|lor|lsl|lxor|mod|or)\b">
 51        <token type="OperatorWord"/>
 52      </rule>
 53      <rule pattern="\b(unit|int|float|bool|string|char|list|array)\b">
 54        <token type="KeywordType"/>
 55      </rule>
 56      <rule pattern="[^\W\d][\w&#39;]*">
 57        <token type="Name"/>
 58      </rule>
 59      <rule pattern="-?\d[\d_]*(.[\d_]*)?([eE][+\-]?\d[\d_]*)">
 60        <token type="LiteralNumberFloat"/>
 61      </rule>
 62      <rule pattern="0[xX][\da-fA-F][\da-fA-F_]*">
 63        <token type="LiteralNumberHex"/>
 64      </rule>
 65      <rule pattern="0[oO][0-7][0-7_]*">
 66        <token type="LiteralNumberOct"/>
 67      </rule>
 68      <rule pattern="0[bB][01][01_]*">
 69        <token type="LiteralNumberBin"/>
 70      </rule>
 71      <rule pattern="\d[\d_]*">
 72        <token type="LiteralNumberInteger"/>
 73      </rule>
 74      <rule pattern="&#39;(?:(\\[\\\&#34;&#39;ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))&#39;">
 75        <token type="LiteralStringChar"/>
 76      </rule>
 77      <rule pattern="&#39;.&#39;">
 78        <token type="LiteralStringChar"/>
 79      </rule>
 80      <rule pattern="&#39;">
 81        <token type="Keyword"/>
 82      </rule>
 83      <rule pattern="&#34;">
 84        <token type="LiteralStringDouble"/>
 85        <push state="string"/>
 86      </rule>
 87      <rule pattern="[~?][a-z][\w\&#39;]*:">
 88        <token type="NameVariable"/>
 89      </rule>
 90    </state>
 91    <state name="comment">
 92      <rule pattern="[^(*)]+">
 93        <token type="Comment"/>
 94      </rule>
 95      <rule pattern="\(\*">
 96        <token type="Comment"/>
 97        <push/>
 98      </rule>
 99      <rule pattern="\*\)">
100        <token type="Comment"/>
101        <pop depth="1"/>
102      </rule>
103      <rule pattern="[(*)]">
104        <token type="Comment"/>
105      </rule>
106    </state>
107    <state name="string">
108      <rule pattern="[^\\&#34;]+">
109        <token type="LiteralStringDouble"/>
110      </rule>
111      <rule>
112        <include state="escape-sequence"/>
113      </rule>
114      <rule pattern="\\\n">
115        <token type="LiteralStringDouble"/>
116      </rule>
117      <rule pattern="&#34;">
118        <token type="LiteralStringDouble"/>
119        <pop depth="1"/>
120      </rule>
121    </state>
122    <state name="dotted">
123      <rule pattern="\s+">
124        <token type="Text"/>
125      </rule>
126      <rule pattern="\.">
127        <token type="Punctuation"/>
128      </rule>
129      <rule pattern="[A-Z][\w\&#39;]*(?=\s*\.)">
130        <token type="NameNamespace"/>
131      </rule>
132      <rule pattern="[A-Z][\w\&#39;]*">
133        <token type="NameClass"/>
134        <pop depth="1"/>
135      </rule>
136      <rule pattern="[a-z_][\w\&#39;]*">
137        <token type="Name"/>
138        <pop depth="1"/>
139      </rule>
140      <rule>
141        <pop depth="1"/>
142      </rule>
143    </state>
144  </rules>
145</lexer>