1<lexer>
  2  <config>
  3    <name>GAS</name>
  4    <alias>gas</alias>
  5    <alias>asm</alias>
  6    <filename>*.s</filename>
  7    <filename>*.S</filename>
  8    <mime_type>text/x-gas</mime_type>
  9  </config>
 10  <rules>
 11    <state name="punctuation">
 12      <rule pattern="[-*,.()\[\]!:]+">
 13        <token type="Punctuation"/>
 14      </rule>
 15    </state>
 16    <state name="root">
 17      <rule>
 18        <include state="whitespace"/>
 19      </rule>
 20      <rule pattern="(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+):">
 21        <token type="NameLabel"/>
 22      </rule>
 23      <rule pattern="\.(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)">
 24        <token type="NameAttribute"/>
 25        <push state="directive-args"/>
 26      </rule>
 27      <rule pattern="lock|rep(n?z)?|data\d+">
 28        <token type="NameAttribute"/>
 29      </rule>
 30      <rule pattern="(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)">
 31        <token type="NameFunction"/>
 32        <push state="instruction-args"/>
 33      </rule>
 34      <rule pattern="[\r\n]+">
 35        <token type="Text"/>
 36      </rule>
 37    </state>
 38    <state name="directive-args">
 39      <rule pattern="(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)">
 40        <token type="NameConstant"/>
 41      </rule>
 42      <rule pattern="&#34;(\\&#34;|[^&#34;])*&#34;">
 43        <token type="LiteralString"/>
 44      </rule>
 45      <rule pattern="@(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)">
 46        <token type="NameAttribute"/>
 47      </rule>
 48      <rule pattern="(?:0[xX][a-zA-Z0-9]+|\d+)">
 49        <token type="LiteralNumberInteger"/>
 50      </rule>
 51      <rule pattern="[\r\n]+">
 52        <token type="Text"/>
 53        <pop depth="1"/>
 54      </rule>
 55      <rule>
 56        <include state="punctuation"/>
 57      </rule>
 58      <rule>
 59        <include state="whitespace"/>
 60      </rule>
 61    </state>
 62    <state name="instruction-args">
 63      <rule pattern="([a-z0-9]+)( )(&lt;)((?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+))(&gt;)">
 64        <bygroups>
 65          <token type="LiteralNumberHex"/>
 66          <token type="Text"/>
 67          <token type="Punctuation"/>
 68          <token type="NameConstant"/>
 69          <token type="Punctuation"/>
 70        </bygroups>
 71      </rule>
 72      <rule pattern="([a-z0-9]+)( )(&lt;)((?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+))([-+])((?:0[xX][a-zA-Z0-9]+|\d+))(&gt;)">
 73        <bygroups>
 74          <token type="LiteralNumberHex"/>
 75          <token type="Text"/>
 76          <token type="Punctuation"/>
 77          <token type="NameConstant"/>
 78          <token type="Punctuation"/>
 79          <token type="LiteralNumberInteger"/>
 80          <token type="Punctuation"/>
 81        </bygroups>
 82      </rule>
 83      <rule pattern="(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)">
 84        <token type="NameConstant"/>
 85      </rule>
 86      <rule pattern="(?:0[xX][a-zA-Z0-9]+|\d+)">
 87        <token type="LiteralNumberInteger"/>
 88      </rule>
 89      <rule pattern="%(?:[a-zA-Z$_][\w$.@-]*|\.[\w$.@-]+)">
 90        <token type="NameVariable"/>
 91      </rule>
 92      <rule pattern="$(?:0[xX][a-zA-Z0-9]+|\d+)">
 93        <token type="LiteralNumberInteger"/>
 94      </rule>
 95      <rule pattern="$&#39;(.|\\&#39;)&#39;">
 96        <token type="LiteralStringChar"/>
 97      </rule>
 98      <rule pattern="[\r\n]+">
 99        <token type="Text"/>
100        <pop depth="1"/>
101      </rule>
102      <rule>
103        <include state="punctuation"/>
104      </rule>
105      <rule>
106        <include state="whitespace"/>
107      </rule>
108    </state>
109    <state name="whitespace">
110      <rule pattern="\n">
111        <token type="Text"/>
112      </rule>
113      <rule pattern="\s+">
114        <token type="Text"/>
115      </rule>
116      <rule pattern="[;#].*?\n">
117        <token type="Comment"/>
118      </rule>
119    </state>
120  </rules>
121</lexer>