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