armasm.xml

  1<lexer>
  2  <config>
  3    <name>ArmAsm</name>
  4    <alias>armasm</alias>
  5    <filename>*.s</filename>
  6    <filename>*.S</filename>
  7    <mime_type>text/x-armasm</mime_type>
  8    <mime_type>text/x-asm</mime_type>
  9    <ensure_nl>true</ensure_nl>
 10  </config>
 11  <rules>
 12    <state name="root">
 13      <rule>
 14        <include state="commentsandwhitespace"/>
 15      </rule>
 16      <rule pattern="(\.\w+)([ \t]+\w+\s+?)?">
 17        <bygroups>
 18          <token type="KeywordNamespace"/>
 19          <token type="NameLabel"/>
 20        </bygroups>
 21      </rule>
 22      <rule pattern="(\w+)(:)(\s+\.\w+\s+)">
 23        <bygroups>
 24          <token type="NameLabel"/>
 25          <token type="Punctuation"/>
 26          <token type="KeywordNamespace"/>
 27        </bygroups>
 28        <push state="literal"/>
 29      </rule>
 30      <rule pattern="(\w+)(:)">
 31        <bygroups>
 32          <token type="NameLabel"/>
 33          <token type="Punctuation"/>
 34        </bygroups>
 35      </rule>
 36      <rule pattern="svc\s+\w+">
 37        <token type="NameNamespace"/>
 38      </rule>
 39      <rule pattern="[a-zA-Z]+">
 40        <token type="Text"/>
 41        <push state="opcode"/>
 42      </rule>
 43    </state>
 44    <state name="commentsandwhitespace">
 45      <rule pattern="\s+">
 46        <token type="Text"/>
 47      </rule>
 48      <rule pattern="[@;].*?\n">
 49        <token type="CommentSingle"/>
 50      </rule>
 51      <rule pattern="/\*.*?\*/">
 52        <token type="CommentMultiline"/>
 53      </rule>
 54    </state>
 55    <state name="literal">
 56      <rule pattern="0b[01]+">
 57        <token type="LiteralNumberBin"/>
 58        <pop depth="1"/>
 59      </rule>
 60      <rule pattern="0x\w{1,8}">
 61        <token type="LiteralNumberHex"/>
 62        <pop depth="1"/>
 63      </rule>
 64      <rule pattern="0\d+">
 65        <token type="LiteralNumberOct"/>
 66        <pop depth="1"/>
 67      </rule>
 68      <rule pattern="\d+?\.\d+?">
 69        <token type="LiteralNumberFloat"/>
 70        <pop depth="1"/>
 71      </rule>
 72      <rule pattern="\d+">
 73        <token type="LiteralNumberInteger"/>
 74        <pop depth="1"/>
 75      </rule>
 76      <rule pattern="(&#34;)(.+)(&#34;)">
 77        <bygroups>
 78          <token type="Punctuation"/>
 79          <token type="LiteralStringDouble"/>
 80          <token type="Punctuation"/>
 81        </bygroups>
 82        <pop depth="1"/>
 83      </rule>
 84      <rule pattern="(&#39;)(.{1}|\\.{1})(&#39;)">
 85        <bygroups>
 86          <token type="Punctuation"/>
 87          <token type="LiteralStringChar"/>
 88          <token type="Punctuation"/>
 89        </bygroups>
 90        <pop depth="1"/>
 91      </rule>
 92    </state>
 93    <state name="opcode">
 94      <rule pattern="\n">
 95        <token type="Text"/>
 96        <pop depth="1"/>
 97      </rule>
 98      <rule pattern="(@|;).*\n">
 99        <token type="CommentSingle"/>
100        <pop depth="1"/>
101      </rule>
102      <rule pattern="(\s+|,)">
103        <token type="Text"/>
104      </rule>
105      <rule pattern="[rapcfxwbhsdqv]\d{1,2}">
106        <token type="NameClass"/>
107      </rule>
108      <rule pattern="=0x\w+">
109        <bygroups>
110          <token type="Text"/>
111          <token type="NameLabel"/>
112        </bygroups>
113      </rule>
114      <rule pattern="(=)(\w+)">
115        <bygroups>
116          <token type="Text"/>
117          <token type="NameLabel"/>
118        </bygroups>
119      </rule>
120      <rule pattern="#">
121        <token type="Text"/>
122        <push state="literal"/>
123      </rule>
124    </state>
125  </rules>
126</lexer>