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="\\&quot;[^&quot;\n]*\\&quot;">
 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="[{}(),;=.+\-*/&amp;|!&lt;&gt;^%]">
 64        <token type="Punctuation"/>
 65      </rule>
 66      
 67      <!-- Operators -->
 68      <rule pattern="(\+|\-|\*|\/|\^|\&amp;|\||\&lt;|\&gt;|\%|\=|\!=|\&lt;\=|\&gt;\=)">
 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>