awk.xml

 1<lexer>
 2  <config>
 3    <name>Awk</name>
 4    <alias>awk</alias>
 5    <alias>gawk</alias>
 6    <alias>mawk</alias>
 7    <alias>nawk</alias>
 8    <filename>*.awk</filename>
 9    <mime_type>application/x-awk</mime_type>
10  </config>
11  <rules>
12    <state name="root">
13      <rule pattern="^(?=\s|/)">
14        <token type="Text"/>
15        <push state="slashstartsregex"/>
16      </rule>
17      <rule>
18        <include state="commentsandwhitespace"/>
19      </rule>
20      <rule pattern="\+\+|--|\|\||&amp;&amp;|in\b|\$|!?~|\|&amp;|(\*\*|[-&lt;&gt;+*%\^/!=|])=?">
21        <token type="Operator"/>
22        <push state="slashstartsregex"/>
23      </rule>
24      <rule pattern="[{(\[;,]">
25        <token type="Punctuation"/>
26        <push state="slashstartsregex"/>
27      </rule>
28      <rule pattern="[})\].]">
29        <token type="Punctuation"/>
30      </rule>
31      <rule pattern="(break|continue|do|while|exit|for|if|else|return|switch|case|default)\b">
32        <token type="Keyword"/>
33        <push state="slashstartsregex"/>
34      </rule>
35      <rule pattern="function\b">
36        <token type="KeywordDeclaration"/>
37        <push state="slashstartsregex"/>
38      </rule>
39      <rule pattern="(atan2|cos|exp|int|log|rand|sin|sqrt|srand|gensub|gsub|index|length|match|split|patsplit|sprintf|sub|substr|tolower|toupper|close|fflush|getline|next(file)|print|printf|strftime|systime|mktime|delete|system|strtonum|and|compl|lshift|or|rshift|asorti?|isarray|bindtextdomain|dcn?gettext|@(include|load|namespace))\b">
40        <token type="KeywordReserved"/>
41      </rule>
42      <rule pattern="(ARGC|ARGIND|ARGV|BEGIN(FILE)?|BINMODE|CONVFMT|ENVIRON|END(FILE)?|ERRNO|FIELDWIDTHS|FILENAME|FNR|FPAT|FS|IGNORECASE|LINT|NF|NR|OFMT|OFS|ORS|PROCINFO|RLENGTH|RS|RSTART|RT|SUBSEP|TEXTDOMAIN)\b">
43        <token type="NameBuiltin"/>
44      </rule>
45      <rule pattern="[@$a-zA-Z_]\w*">
46        <token type="NameOther"/>
47      </rule>
48      <rule pattern="[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?">
49        <token type="LiteralNumberFloat"/>
50      </rule>
51      <rule pattern="0x[0-9a-fA-F]+">
52        <token type="LiteralNumberHex"/>
53      </rule>
54      <rule pattern="[0-9]+">
55        <token type="LiteralNumberInteger"/>
56      </rule>
57      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
58        <token type="LiteralStringDouble"/>
59      </rule>
60      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
61        <token type="LiteralStringSingle"/>
62      </rule>
63    </state>
64    <state name="commentsandwhitespace">
65      <rule pattern="\s+">
66        <token type="Text"/>
67      </rule>
68      <rule pattern="#.*$">
69        <token type="CommentSingle"/>
70      </rule>
71    </state>
72    <state name="slashstartsregex">
73      <rule>
74        <include state="commentsandwhitespace"/>
75      </rule>
76      <rule pattern="/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/\B">
77        <token type="LiteralStringRegex"/>
78        <pop depth="1"/>
79      </rule>
80      <rule pattern="(?=/)">
81        <token type="Text"/>
82        <push state="#pop" state="badregex"/>
83      </rule>
84      <rule>
85        <pop depth="1"/>
86      </rule>
87    </state>
88    <state name="badregex">
89      <rule pattern="\n">
90        <token type="Text"/>
91        <pop depth="1"/>
92      </rule>
93    </state>
94  </rules>
95</lexer>