1<lexer>
  2  <config>
  3    <name>ATL</name>
  4    <alias>atl</alias>
  5    <filename>*.atl</filename>
  6    <mime_type>text/x-atl</mime_type>
  7    <dot_all>true</dot_all>
  8  </config>
  9  <rules>
 10    <state name="root">
 11      <rule pattern="(--.*?)(\n)">
 12        <bygroups>
 13          <token type="CommentSingle" />
 14          <token type="TextWhitespace" />
 15        </bygroups>
 16      </rule>
 17      <rule pattern="(and|distinct|endif|else|for|foreach|if|implies|in|let|not|or|self|super|then|thisModule|xor)\b">
 18        <token type="Keyword" />
 19      </rule>
 20      <rule pattern="(OclUndefined|true|false|#\w+)\b">
 21        <token type="KeywordConstant" />
 22      </rule>
 23      <rule pattern="(module|query|library|create|from|to|uses)\b">
 24         <token type="KeywordNamespace" />
 25      </rule>
 26      <rule pattern="(do)(\s*)({)">
 27        <bygroups>
 28          <token type="KeywordNamespace" />
 29          <token type="TextWhitespace" />
 30          <token type="Punctuation" />
 31        </bygroups>
 32      </rule>
 33      <rule pattern="(abstract|endpoint|entrypoint|lazy|unique)(\s+)">
 34        <bygroups>
 35          <token type="KeywordDeclaration" />
 36          <token type="TextWhitespace" />
 37        </bygroups>
 38      </rule>
 39      <rule pattern="(rule)(\s+)">
 40        <bygroups>
 41          <token type="KeywordNamespace" />
 42          <token type="TextWhitespace" />
 43        </bygroups>
 44      </rule>
 45      <rule pattern="(helper)(\s+)">
 46        <bygroups>
 47          <token type="KeywordNamespace" />
 48          <token type="TextWhitespace" />
 49        </bygroups>
 50      </rule>
 51      <rule pattern="(context)(\s+)">
 52        <bygroups>
 53          <token type="KeywordNamespace" />
 54          <token type="TextWhitespace" />
 55        </bygroups>
 56      </rule>
 57      <rule pattern="(def)(\s*)(:)(\s*)">
 58        <bygroups>
 59          <token type="KeywordNamespace" />
 60          <token type="TextWhitespace" />
 61          <token type="Punctuation" />
 62          <token type="TextWhitespace" />
 63        </bygroups>
 64      </rule>
 65      <rule pattern="(Bag|Boolean|Integer|OrderedSet|Real|Sequence|Set|String|Tuple)">
 66        <token type="KeywordType" />
 67      </rule>
 68      <rule pattern="(\w+)(\s*)(<-|<:=)">
 69        <bygroups>
 70          <token type="NameNamespace" />
 71          <token type="TextWhitespace" />
 72          <token type="Punctuation" />
 73        </bygroups>
 74      </rule>
 75      <rule pattern="#"">
 76        <token type="KeywordConstant" />
 77        <push state="quotedenumliteral" />
 78      </rule>
 79      <rule pattern=""">
 80        <token type="NameNamespace" />
 81        <push state="quotedname" />
 82      </rule>
 83      <rule pattern="[^\S\n]+">
 84        <token type="TextWhitespace" />
 85      </rule>
 86      <rule pattern="'">
 87        <token type="LiteralString" />
 88        <push state="string" />
 89      </rule>
 90      <rule
 91        pattern="[0-9]*\.[0-9]+">
 92        <token type="LiteralNumberFloat" />
 93      </rule>
 94      <rule pattern="0|[1-9][0-9]*">
 95        <token type="LiteralNumberInteger" />
 96      </rule>
 97      <rule pattern="[*<>+=/-]">
 98        <token type="Operator" />
 99      </rule>
100      <rule pattern="([{}();:.,!|]|->)">
101        <token type="Punctuation" />
102      </rule>
103      <rule pattern="\n">
104        <token type="TextWhitespace" />
105      </rule>
106      <rule pattern="\w+">
107        <token type="NameNamespace" />
108      </rule>
109    </state>
110    <state name="string">
111      <rule pattern="[^\\']+">
112        <token type="LiteralString" />
113      </rule>
114      <rule pattern="\\\\">
115        <token type="LiteralString" />
116      </rule>
117      <rule pattern="\\'">
118        <token type="LiteralString" />
119      </rule>
120      <rule pattern="\\">
121        <token type="LiteralString" />
122      </rule>
123      <rule pattern="'">
124        <token type="LiteralString" />
125        <pop depth="1" />
126      </rule>
127    </state>
128    <state name="quotedname">
129      <rule pattern="[^\\"]+">
130        <token type="NameNamespace" />
131      </rule>
132      <rule pattern="\\\\">
133        <token type="NameNamespace" />
134      </rule>
135      <rule pattern="\\"">
136        <token type="NameNamespace" />
137      </rule>
138      <rule pattern="\\">
139        <token type="NameNamespace" />
140      </rule>
141      <rule pattern=""">
142        <token type="NameNamespace" />
143        <pop depth="1" />
144      </rule>
145    </state>
146    <state name="quotedenumliteral">
147      <rule pattern="[^\\"]+">
148        <token type="KeywordConstant" />
149      </rule>
150      <rule pattern="\\\\">
151        <token type="KeywordConstant" />
152      </rule>
153      <rule pattern="\\"">
154        <token type="KeywordConstant" />
155      </rule>
156      <rule pattern="\\">
157        <token type="KeywordConstant" />
158      </rule>
159      <rule pattern=""">
160        <token type="KeywordConstant" />
161        <pop depth="1" />
162      </rule>
163    </state>
164  </rules>
165</lexer>