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="({([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="(~|\}|\|]|\||\{<|\{|`|_|]|\[\||\[>|\[<|\[|\?\?|\?|>\}|>]|>|=|<-|<|;;|;|:>|:=|::|:|\.\.|\.|->|-\.|-|,|\+|\*|\)|\(|&&|&|#|!=)">
53 <token type="Operator"/>
54 </rule>
55 <rule pattern="([=<>@^|&+\*/$%-]|[!?~])?[!$%&*+\./:<=>?@^|~-]">
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']*">
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="'(?:(\\[\\\"'ntbr ])|(\\[0-9]{3})|(\\x[0-9a-fA-F]{2}))'">
83 <token type="LiteralStringChar"/>
84 </rule>
85 <rule pattern="'.'">
86 <token type="LiteralStringChar"/>
87 </rule>
88 <rule pattern="'">
89 <token type="Keyword"/>
90 </rule>
91 <rule pattern=""">
92 <token type="LiteralStringDouble"/>
93 <push state="string"/>
94 </rule>
95 <rule pattern="[~?][a-z][\w\']*:">
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="[^\\"]+">
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=""">
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\']*(?=\s*\.)">
138 <token type="NameNamespace"/>
139 </rule>
140 <rule pattern="[A-Z][\w\']*">
141 <token type="NameClass"/>
142 <pop depth="1"/>
143 </rule>
144 <rule pattern="[a-z_][\w\']*">
145 <token type="Name"/>
146 <pop depth="1"/>
147 </rule>
148 <rule>
149 <pop depth="1"/>
150 </rule>
151 </state>
152 </rules>
153</lexer>