1<lexer>
  2  <config>
  3    <name>mcfunction</name>
  4    <alias>mcfunction</alias>
  5    <filename>*.mcfunction</filename>
  6    <dot_all>true</dot_all>
  7    <not_multiline>true</not_multiline>
  8  </config>
  9  <rules>
 10    <state name="nbtobjectvalue">
 11      <rule pattern="(&#34;(\\\\|\\&#34;|[^&#34;])*&#34;|[a-zA-Z0-9_]+)">
 12        <token type="NameTag"/>
 13        <push state="nbtobjectattribute"/>
 14      </rule>
 15      <rule pattern="\}">
 16        <token type="Punctuation"/>
 17        <pop depth="1"/>
 18      </rule>
 19    </state>
 20    <state name="nbtarrayvalue">
 21      <rule>
 22        <include state="nbtvalue"/>
 23      </rule>
 24      <rule pattern=",">
 25        <token type="Punctuation"/>
 26      </rule>
 27      <rule pattern="\]">
 28        <token type="Punctuation"/>
 29        <pop depth="1"/>
 30      </rule>
 31    </state>
 32    <state name="nbtvalue">
 33      <rule>
 34        <include state="simplevalue"/>
 35      </rule>
 36      <rule pattern="\{">
 37        <token type="Punctuation"/>
 38        <push state="nbtobjectvalue"/>
 39      </rule>
 40      <rule pattern="\[">
 41        <token type="Punctuation"/>
 42        <push state="nbtarrayvalue"/>
 43      </rule>
 44    </state>
 45    <state name="argumentvalue">
 46      <rule>
 47        <include state="simplevalue"/>
 48      </rule>
 49      <rule pattern=",">
 50        <token type="Punctuation"/>
 51        <pop depth="1"/>
 52      </rule>
 53      <rule pattern="[}\]]">
 54        <token type="Punctuation"/>
 55        <pop depth="2"/>
 56      </rule>
 57    </state>
 58    <state name="argumentlist">
 59      <rule pattern="(nbt)(={)">
 60        <bygroups>
 61          <token type="NameAttribute"/>
 62          <token type="Punctuation"/>
 63        </bygroups>
 64        <push state="nbtobjectvalue"/>
 65      </rule>
 66      <rule pattern="([A-Za-z0-9/_!]+)(={)">
 67        <bygroups>
 68          <token type="NameAttribute"/>
 69          <token type="Punctuation"/>
 70        </bygroups>
 71        <push state="argumentlist"/>
 72      </rule>
 73      <rule pattern="([A-Za-z0-9/_!]+)(=)">
 74        <bygroups>
 75          <token type="NameAttribute"/>
 76          <token type="Punctuation"/>
 77        </bygroups>
 78        <push state="argumentvalue"/>
 79      </rule>
 80      <rule>
 81        <include state="simplevalue"/>
 82      </rule>
 83      <rule pattern=",">
 84        <token type="Punctuation"/>
 85      </rule>
 86      <rule pattern="[}\]]">
 87        <token type="Punctuation"/>
 88        <pop depth="1"/>
 89      </rule>
 90    </state>
 91    <state name="root">
 92      <rule pattern="#.*?\n">
 93        <token type="CommentSingle"/>
 94      </rule>
 95      <rule pattern="/?(geteduclientinfo|clearspawnpoint|defaultgamemode|transferserver|toggledownfall|immutableworld|detectredstone|setidletimeout|playanimation|classroommode|spreadplayers|testforblocks|setmaxplayers|setworldspawn|testforblock|worldbuilder|createagent|worldborder|camerashake|advancement|raytracefog|locatebiome|tickingarea|replaceitem|attributes|spawnpoint|difficulty|experience|scoreboard|whitelist|structure|playsound|stopsound|forceload|spectate|gamerule|function|schedule|wsserver|teleport|position|save-off|particle|setblock|datapack|mobevent|transfer|gamemode|save-all|bossbar|enchant|trigger|collect|execute|weather|teammsg|tpagent|banlist|dropall|publish|tellraw|testfor|save-on|destroy|ability|locate|summon|remove|effect|reload|ban-ip|recipe|pardon|detect|music|clear|clone|event|mixer|debug|title|ride|stop|list|turn|data|team|kick|loot|tell|help|give|flog|fill|move|time|seed|kill|save|item|deop|code|tag|ban|msg|say|tp|me|op|xp|w)\b">
 96        <token type="KeywordReserved"/>
 97      </rule>
 98      <rule pattern="(@p|@r|@a|@e|@s|@c|@v)">
 99        <token type="KeywordConstant"/>
100      </rule>
101      <rule pattern="\[">
102        <token type="Punctuation"/>
103        <push state="argumentlist"/>
104      </rule>
105      <rule pattern="{">
106        <token type="Punctuation"/>
107        <push state="nbtobjectvalue"/>
108      </rule>
109      <rule pattern="~">
110        <token type="NameBuiltin"/>
111      </rule>
112      <rule pattern="([a-zA-Z_]+:)?[a-zA-Z_]+\b">
113        <token type="Text"/>
114      </rule>
115      <rule pattern="([a-z]+)(\.)([0-9]+)\b">
116        <bygroups>
117          <token type="Text"/>
118          <token type="Punctuation"/>
119          <token type="LiteralNumber"/>
120        </bygroups>
121      </rule>
122      <rule pattern="([&lt;&gt;=]|&lt;=|&gt;=)">
123        <token type="Punctuation"/>
124      </rule>
125      <rule>
126        <include state="simplevalue"/>
127      </rule>
128      <rule pattern="\s+">
129        <token type="TextWhitespace"/>
130      </rule>
131    </state>
132    <state name="simplevalue">
133      <rule pattern="(true|false)">
134        <token type="KeywordConstant"/>
135      </rule>
136      <rule pattern="[01]b">
137        <token type="LiteralNumber"/>
138      </rule>
139      <rule pattern="-?(0|[1-9]\d*)(\.\d+[eE](\+|-)?\d+|[eE](\+|-)?\d+|\.\d+)">
140        <token type="LiteralNumberFloat"/>
141      </rule>
142      <rule pattern="(-?\d+)(\.\.)(-?\d+)">
143        <bygroups>
144          <token type="LiteralNumberInteger"/>
145          <token type="Punctuation"/>
146          <token type="LiteralNumberInteger"/>
147        </bygroups>
148      </rule>
149      <rule pattern="-?(0|[1-9]\d*)">
150        <token type="LiteralNumberInteger"/>
151      </rule>
152      <rule pattern="&#34;(\\\\|\\&#34;|[^&#34;])*&#34;">
153        <token type="LiteralStringDouble"/>
154      </rule>
155      <rule pattern="&#39;[^&#39;]+&#39;">
156        <token type="LiteralStringSingle"/>
157      </rule>
158      <rule pattern="([!#]?)(\w+)">
159        <bygroups>
160          <token type="Punctuation"/>
161          <token type="Text"/>
162        </bygroups>
163      </rule>
164    </state>
165    <state name="nbtobjectattribute">
166      <rule>
167        <include state="nbtvalue"/>
168      </rule>
169      <rule pattern=":">
170        <token type="Punctuation"/>
171      </rule>
172      <rule pattern=",">
173        <token type="Punctuation"/>
174        <pop depth="1"/>
175      </rule>
176      <rule pattern="\}">
177        <token type="Punctuation"/>
178        <pop depth="2"/>
179      </rule>
180    </state>
181  </rules>
182</lexer>