chaiscript.xml

  1<lexer>
  2  <config>
  3    <name>ChaiScript</name>
  4    <alias>chai</alias>
  5    <alias>chaiscript</alias>
  6    <filename>*.chai</filename>
  7    <mime_type>text/x-chaiscript</mime_type>
  8    <mime_type>application/x-chaiscript</mime_type>
  9    <dot_all>true</dot_all>
 10  </config>
 11  <rules>
 12    <state name="dqstring">
 13      <rule pattern="\$\{[^&#34;}]+?\}">
 14        <token type="LiteralStringInterpol"/>
 15      </rule>
 16      <rule pattern="\$">
 17        <token type="LiteralStringDouble"/>
 18      </rule>
 19      <rule pattern="\\\\">
 20        <token type="LiteralStringDouble"/>
 21      </rule>
 22      <rule pattern="\\&#34;">
 23        <token type="LiteralStringDouble"/>
 24      </rule>
 25      <rule pattern="[^\\&#34;$]+">
 26        <token type="LiteralStringDouble"/>
 27      </rule>
 28      <rule pattern="&#34;">
 29        <token type="LiteralStringDouble"/>
 30        <pop depth="1"/>
 31      </rule>
 32    </state>
 33    <state name="commentsandwhitespace">
 34      <rule pattern="\s+">
 35        <token type="Text"/>
 36      </rule>
 37      <rule pattern="//.*?\n">
 38        <token type="CommentSingle"/>
 39      </rule>
 40      <rule pattern="/\*.*?\*/">
 41        <token type="CommentMultiline"/>
 42      </rule>
 43      <rule pattern="^\#.*?\n">
 44        <token type="CommentSingle"/>
 45      </rule>
 46    </state>
 47    <state name="slashstartsregex">
 48      <rule>
 49        <include state="commentsandwhitespace"/>
 50      </rule>
 51      <rule pattern="/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gim]+\b|\B)">
 52        <token type="LiteralStringRegex"/>
 53        <pop depth="1"/>
 54      </rule>
 55      <rule pattern="(?=/)">
 56        <token type="Text"/>
 57        <push state="#pop" state="badregex"/>
 58      </rule>
 59      <rule>
 60        <pop depth="1"/>
 61      </rule>
 62    </state>
 63    <state name="badregex">
 64      <rule pattern="\n">
 65        <token type="Text"/>
 66        <pop depth="1"/>
 67      </rule>
 68    </state>
 69    <state name="root">
 70      <rule>
 71        <include state="commentsandwhitespace"/>
 72      </rule>
 73      <rule pattern="\n">
 74        <token type="Text"/>
 75      </rule>
 76      <rule pattern="[^\S\n]+">
 77        <token type="Text"/>
 78      </rule>
 79      <rule pattern="\+\+|--|~|&amp;&amp;|\?|:|\|\||\\(?=\n)|\.\.(&lt;&lt;|&gt;&gt;&gt;?|==?|!=?|[-&lt;&gt;+*%&amp;|^/])=?">
 80        <token type="Operator"/>
 81        <push state="slashstartsregex"/>
 82      </rule>
 83      <rule pattern="[{(\[;,]">
 84        <token type="Punctuation"/>
 85        <push state="slashstartsregex"/>
 86      </rule>
 87      <rule pattern="[})\].]">
 88        <token type="Punctuation"/>
 89      </rule>
 90      <rule pattern="[=+\-*/]">
 91        <token type="Operator"/>
 92      </rule>
 93      <rule pattern="(for|in|while|do|break|return|continue|if|else|throw|try|catch)\b">
 94        <token type="Keyword"/>
 95        <push state="slashstartsregex"/>
 96      </rule>
 97      <rule pattern="(var)\b">
 98        <token type="KeywordDeclaration"/>
 99        <push state="slashstartsregex"/>
100      </rule>
101      <rule pattern="(attr|def|fun)\b">
102        <token type="KeywordReserved"/>
103      </rule>
104      <rule pattern="(true|false)\b">
105        <token type="KeywordConstant"/>
106      </rule>
107      <rule pattern="(eval|throw)\b">
108        <token type="NameBuiltin"/>
109      </rule>
110      <rule pattern="`\S+`">
111        <token type="NameBuiltin"/>
112      </rule>
113      <rule pattern="[$a-zA-Z_]\w*">
114        <token type="NameOther"/>
115      </rule>
116      <rule pattern="[0-9][0-9]*\.[0-9]+([eE][0-9]+)?[fd]?">
117        <token type="LiteralNumberFloat"/>
118      </rule>
119      <rule pattern="0x[0-9a-fA-F]+">
120        <token type="LiteralNumberHex"/>
121      </rule>
122      <rule pattern="[0-9]+">
123        <token type="LiteralNumberInteger"/>
124      </rule>
125      <rule pattern="&#34;">
126        <token type="LiteralStringDouble"/>
127        <push state="dqstring"/>
128      </rule>
129      <rule pattern="&#39;(\\\\|\\&#39;|[^&#39;])*&#39;">
130        <token type="LiteralStringSingle"/>
131      </rule>
132    </state>
133  </rules>
134</lexer>