1<lexer>
  2  <config>
  3    <name>JSON</name>
  4    <alias>json</alias>
  5    <filename>*.json</filename>
  6    <mime_type>application/json</mime_type>
  7    <dot_all>true</dot_all>
  8    <not_multiline>true</not_multiline>
  9  </config>
 10  <rules>
 11    <state name="root">
 12      <rule>
 13        <include state="value"/>
 14      </rule>
 15    </state>
 16    <state name="whitespace">
 17      <rule pattern="\s+">
 18        <token type="Text"/>
 19      </rule>
 20    </state>
 21    <state name="comment">
 22      <rule pattern="//.*?\n">
 23        <token type="CommentSingle"/>
 24      </rule>
 25    </state>
 26    <state name="simplevalue">
 27      <rule pattern="(true|false|null)\b">
 28        <token type="KeywordConstant"/>
 29      </rule>
 30      <rule pattern="-?(0|[1-9]\d*)(\.\d+[eE](\+|-)?\d+|[eE](\+|-)?\d+|\.\d+)">
 31        <token type="LiteralNumberFloat"/>
 32      </rule>
 33      <rule pattern="-?(0|[1-9]\d*)">
 34        <token type="LiteralNumberInteger"/>
 35      </rule>
 36      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 37        <token type="LiteralStringDouble"/>
 38      </rule>
 39    </state>
 40    <state name="objectattribute">
 41      <rule>
 42        <include state="value"/>
 43      </rule>
 44      <rule pattern=":">
 45        <token type="Punctuation"/>
 46      </rule>
 47      <rule pattern=",">
 48        <token type="Punctuation"/>
 49        <pop depth="1"/>
 50      </rule>
 51      <rule pattern="\}">
 52        <token type="Punctuation"/>
 53        <pop depth="2"/>
 54      </rule>
 55    </state>
 56    <state name="objectvalue">
 57      <rule>
 58        <include state="whitespace"/>
 59      </rule>
 60      <rule>
 61        <include state="comment"/>
 62      </rule>
 63      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
 64        <token type="NameTag"/>
 65        <push state="objectattribute"/>
 66      </rule>
 67      <rule pattern="\}">
 68        <token type="Punctuation"/>
 69        <pop depth="1"/>
 70      </rule>
 71    </state>
 72    <state name="arrayvalue">
 73      <rule>
 74        <include state="whitespace"/>
 75      </rule>
 76      <rule>
 77        <include state="value"/>
 78      </rule>
 79      <rule>
 80        <include state="comment"/>
 81      </rule>
 82      <rule pattern=",">
 83        <token type="Punctuation"/>
 84      </rule>
 85      <rule pattern="\]">
 86        <token type="Punctuation"/>
 87        <pop depth="1"/>
 88      </rule>
 89    </state>
 90    <state name="value">
 91      <rule>
 92        <include state="whitespace"/>
 93      </rule>
 94      <rule>
 95        <include state="simplevalue"/>
 96      </rule>
 97      <rule>
 98        <include state="comment"/>
 99      </rule>
100      <rule pattern="\{">
101        <token type="Punctuation"/>
102        <push state="objectvalue"/>
103      </rule>
104      <rule pattern="\[">
105        <token type="Punctuation"/>
106        <push state="arrayvalue"/>
107      </rule>
108    </state>
109  </rules>
110</lexer>