chapel.xml

  1<lexer>
  2  <config>
  3    <name>Chapel</name>
  4    <alias>chapel</alias>
  5    <alias>chpl</alias>
  6    <filename>*.chpl</filename>
  7  </config>
  8  <rules>
  9    <state name="procname">
 10      <rule pattern="([a-zA-Z_][.\w$]*|\~[a-zA-Z_][.\w$]*|[+*/!~%&lt;&gt;=&amp;^|\-:]{1,2})">
 11        <token type="NameFunction"/>
 12        <pop depth="1"/>
 13      </rule>
 14      <rule pattern="\(">
 15        <token type="Punctuation"/>
 16        <push state="receivertype"/>
 17      </rule>
 18      <rule pattern="\)+\.">
 19        <token type="Punctuation"/>
 20      </rule>
 21    </state>
 22    <state name="receivertype">
 23      <rule pattern="(unmanaged|borrowed|atomic|single|shared|owned|sync)\b">
 24        <token type="Keyword"/>
 25      </rule>
 26      <rule pattern="(complex|nothing|opaque|string|locale|bytes|range|imag|real|bool|uint|void|int)\b">
 27        <token type="KeywordType"/>
 28      </rule>
 29      <rule pattern="[^()]*">
 30        <token type="NameOther"/>
 31        <pop depth="1"/>
 32      </rule>
 33    </state>
 34    <state name="root">
 35      <rule pattern="\n">
 36        <token type="TextWhitespace"/>
 37      </rule>
 38      <rule pattern="\s+">
 39        <token type="TextWhitespace"/>
 40      </rule>
 41      <rule pattern="\\\n">
 42        <token type="Text"/>
 43      </rule>
 44      <rule pattern="//(.*?)\n">
 45        <token type="CommentSingle"/>
 46      </rule>
 47      <rule pattern="/(\\\n)?[*](.|\n)*?[*](\\\n)?/">
 48        <token type="CommentMultiline"/>
 49      </rule>
 50      <rule pattern="(config|const|inout|param|type|out|ref|var|in)\b">
 51        <token type="KeywordDeclaration"/>
 52      </rule>
 53      <rule pattern="(false|none|true|nil)\b">
 54        <token type="KeywordConstant"/>
 55      </rule>
 56      <rule pattern="(complex|nothing|opaque|string|locale|bytes|range|imag|real|bool|uint|void|int)\b">
 57        <token type="KeywordType"/>
 58      </rule>
 59      <rule pattern="(implements|forwarding|prototype|otherwise|subdomain|primitive|unmanaged|override|borrowed|lifetime|coforall|continue|private|require|dmapped|cobegin|foreach|lambda|sparse|shared|domain|pragma|reduce|except|export|extern|throws|forall|delete|return|noinit|single|import|select|public|inline|serial|atomic|defer|break|local|index|throw|catch|label|begin|where|while|align|yield|owned|only|this|sync|with|scan|else|enum|init|when|then|let|for|try|use|new|zip|if|by|as|on|do)\b">
 60        <token type="Keyword"/>
 61      </rule>
 62      <rule pattern="(iter)(\s+)">
 63        <bygroups>
 64          <token type="Keyword"/>
 65          <token type="TextWhitespace"/>
 66        </bygroups>
 67        <push state="procname"/>
 68      </rule>
 69      <rule pattern="(proc)(\s+)">
 70        <bygroups>
 71          <token type="Keyword"/>
 72          <token type="TextWhitespace"/>
 73        </bygroups>
 74        <push state="procname"/>
 75      </rule>
 76      <rule pattern="(operator)(\s+)">
 77        <bygroups>
 78          <token type="Keyword"/>
 79          <token type="TextWhitespace"/>
 80        </bygroups>
 81        <push state="procname"/>
 82      </rule>
 83      <rule pattern="(class|interface|module|record|union)(\s+)">
 84        <bygroups>
 85          <token type="Keyword"/>
 86          <token type="TextWhitespace"/>
 87        </bygroups>
 88        <push state="classname"/>
 89      </rule>
 90      <rule pattern="\d+i">
 91        <token type="LiteralNumber"/>
 92      </rule>
 93      <rule pattern="\d+\.\d*([Ee][-+]\d+)?i">
 94        <token type="LiteralNumber"/>
 95      </rule>
 96      <rule pattern="\.\d+([Ee][-+]\d+)?i">
 97        <token type="LiteralNumber"/>
 98      </rule>
 99      <rule pattern="\d+[Ee][-+]\d+i">
100        <token type="LiteralNumber"/>
101      </rule>
102      <rule pattern="(\d*\.\d+)([eE][+-]?[0-9]+)?i?">
103        <token type="LiteralNumberFloat"/>
104      </rule>
105      <rule pattern="\d+[eE][+-]?[0-9]+i?">
106        <token type="LiteralNumberFloat"/>
107      </rule>
108      <rule pattern="0[bB][01]+">
109        <token type="LiteralNumberBin"/>
110      </rule>
111      <rule pattern="0[xX][0-9a-fA-F]+">
112        <token type="LiteralNumberHex"/>
113      </rule>
114      <rule pattern="0[oO][0-7]+">
115        <token type="LiteralNumberOct"/>
116      </rule>
117      <rule pattern="[0-9]+">
118        <token type="LiteralNumberInteger"/>
119      </rule>
120      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
121        <token type="LiteralString"/>
122      </rule>
123      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
124        <token type="LiteralString"/>
125      </rule>
126      <rule pattern="(=|\+=|-=|\*=|/=|\*\*=|%=|&amp;=|\|=|\^=|&amp;&amp;=|\|\|=|&lt;&lt;=|&gt;&gt;=|&lt;=&gt;|&lt;~&gt;|\.\.|by|#|\.\.\.|&amp;&amp;|\|\||!|&amp;|\||\^|~|&lt;&lt;|&gt;&gt;|==|!=|&lt;=|&gt;=|&lt;|&gt;|[+\-*/%]|\*\*)">
127        <token type="Operator"/>
128      </rule>
129      <rule pattern="[:;,.?()\[\]{}]">
130        <token type="Punctuation"/>
131      </rule>
132      <rule pattern="[a-zA-Z_][\w$]*">
133        <token type="NameOther"/>
134      </rule>
135    </state>
136    <state name="classname">
137      <rule pattern="[a-zA-Z_][\w$]*">
138        <token type="NameClass"/>
139        <pop depth="1"/>
140      </rule>
141    </state>
142  </rules>
143</lexer>