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="\\[\\"\'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\']*)(?=\s*\.)">
31 <token type="NameNamespace"/>
32 <push state="dotted"/>
33 </rule>
34 <rule pattern="\b([A-Z][\w\']*)">
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="(~|\}|\|]|\||\{<|\{|`|_|]|\[\||\[>|\[<|\[|\?\?|\?|>\}|>]|>|=|<-|<|;;|;|:>|:=|::|:|\.\.|\.|->|-\.|-|,|\+|\*|\)|\(|&&|&|#|!=)">
45 <token type="Operator"/>
46 </rule>
47 <rule pattern="([=<>@^|&+\*/$%-]|[!?~])?[!$%&*+\./:<=>?@^|~-]">
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']*">
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="'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'">
75 <token type="LiteralStringChar"/>
76 </rule>
77 <rule pattern="'.'">
78 <token type="LiteralStringChar"/>
79 </rule>
80 <rule pattern="'">
81 <token type="Keyword"/>
82 </rule>
83 <rule pattern=""">
84 <token type="LiteralStringDouble"/>
85 <push state="string"/>
86 </rule>
87 <rule pattern="[~?][a-z][\w\']*:">
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="[^\\"]+">
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=""">
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\']*(?=\s*\.)">
130 <token type="NameNamespace"/>
131 </rule>
132 <rule pattern="[A-Z][\w\']*">
133 <token type="NameClass"/>
134 <pop depth="1"/>
135 </rule>
136 <rule pattern="[a-z_][\w\']*">
137 <token type="Name"/>
138 <pop depth="1"/>
139 </rule>
140 <rule>
141 <pop depth="1"/>
142 </rule>
143 </state>
144 </rules>
145</lexer>