1<lexer>
2 <config>
3 <name>Modelica</name>
4 <alias>modelica</alias>
5 <filename>*.mo</filename>
6 <mime_type>text/x-modelica</mime_type>
7 <dot_all>true</dot_all>
8 <ensure_nl>true</ensure_nl>
9 </config>
10 <rules>
11 <state name="root">
12 <!-- Comments -->
13 <rule pattern="//[^\n\r]*">
14 <token type="CommentSingle"/>
15 </rule>
16 <rule pattern="/[*].*?[*]/">
17 <token type="CommentMultiline"/>
18 </rule>
19
20 <!-- Whitespace and newlines -->
21 <rule pattern="\s+">
22 <token type="Text"/>
23 </rule>
24 <rule pattern="\n">
25 <token type="Text"/>
26 </rule>
27
28 <!-- Keywords (Modelica specific) -->
29 <rule pattern="\b(model|equation|end|extends|function|type|record|connector|parameter|constant|if|then|else|for|in|when|assert|outer|algorithm|flow|discrete|input|output|loop|elseif|return|public|protected|external|real|integer|boolean|string|array|complex|union|tuple|class|der|time|tstart|tstop)\b">
30 <token type="Keyword"/>
31 </rule>
32
33 <!-- Type definitions -->
34 <rule pattern="\b(boolean|integer|real|string|array|record|complex|union|tuple)\b">
35 <token type="KeywordType"/>
36 </rule>
37
38 <!-- Preprocessor directives -->
39 <rule pattern="#[ \t]*(if|else|endif|define|include|error)\b">
40 <token type="CommentPreproc"/>
41 </rule>
42
43 <!-- Literals -->
44 <rule pattern="\\"[^"\n]*\\"">
45 <token type="LiteralString"/>
46 </rule>
47 <rule pattern="'[^'\n]'">
48 <token type="LiteralStringChar"/>
49 </rule>
50 <rule pattern="\d+(\.\d+)?([eE][+-]?\d+)?">
51 <token type="LiteralNumber"/>
52 </rule>
53
54 <!-- Identifiers and names -->
55 <rule pattern="@[A-Za-z_]\w*">
56 <token type="Name"/>
57 </rule>
58 <rule pattern="[A-Za-z_]\w*">
59 <token type="Name"/>
60 </rule>
61
62 <!-- Punctuation -->
63 <rule pattern="[{}(),;=.+\-*/&|!<>^%]">
64 <token type="Punctuation"/>
65 </rule>
66
67 <!-- Operators -->
68 <rule pattern="(\+|\-|\*|\/|\^|\&|\||\<|\>|\%|\=|\!=|\<\=|\>\=)">
69 <token type="Operator"/>
70 </rule>
71 </state>
72
73 <state name="function">
74 <!-- Function name -->
75 <rule pattern="[A-Za-z_]\w*">
76 <token type="NameFunction"/>
77 <pop depth="1"/>
78 </rule>
79 <rule>
80 <pop depth="1"/>
81 </rule>
82 </state>
83
84 <state name="type">
85 <!-- Type definition -->
86 <rule pattern="[A-Za-z_]\w*">
87 <token type="NameClass"/>
88 <pop depth="1"/>
89 </rule>
90 <rule>
91 <pop depth="1"/>
92 </rule>
93 </state>
94
95 <state name="record">
96 <!-- Record definition -->
97 <rule pattern="[A-Za-z_]\w*">
98 <token type="NameClass"/>
99 <pop depth="1"/>
100 </rule>
101 <rule>
102 <pop depth="1"/>
103 </rule>
104 </state>
105 </rules>
106</lexer>