<lexer>
<config>
<name>ANTLR</name>
<alias>antlr</alias>
</config>
<rules>
<state name="nested-arg-action">
<rule pattern="([^$\[\]\'"/]+|"(\\\\|\\"|[^"])*"|'(\\\\|\\'|[^'])*'|//.*$\n?|/\*(.|\n)*?\*/|/(?!\*)(\\\\|\\/|[^/])*/|/)+">
<token type="Other"/>
</rule>
<rule pattern="\[">
<token type="Punctuation"/>
<push/>
</rule>
<rule pattern="\]">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
<rule pattern="(\$[a-zA-Z]+)(\.?)(text|value)?">
<bygroups>
<token type="NameVariable"/>
<token type="Punctuation"/>
<token type="NameProperty"/>
</bygroups>
</rule>
<rule pattern="(\\\\|\\\]|\\\[|[^\[\]])+">
<token type="Other"/>
</rule>
</state>
<state name="exception">
<rule pattern="\n">
<token type="TextWhitespace"/>
<pop depth="1"/>
</rule>
<rule pattern="\s">
<token type="TextWhitespace"/>
</rule>
<rule>
<include state="comments"/>
</rule>
<rule pattern="\[">
<token type="Punctuation"/>
<push state="nested-arg-action"/>
</rule>
<rule pattern="\{">
<token type="Punctuation"/>
<push state="action"/>
</rule>
</state>
<state name="whitespace">
<rule pattern="\s+">
<token type="TextWhitespace"/>
</rule>
</state>
<state name="root">
<rule>
<include state="whitespace"/>
</rule>
<rule>
<include state="comments"/>
</rule>
<rule pattern="(lexer|parser|tree)?(\s*)(grammar\b)(\s*)([A-Za-z]\w*)(;)">
<bygroups>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="NameClass"/>
<token type="Punctuation"/>
</bygroups>
</rule>
<rule pattern="options\b">
<token type="Keyword"/>
<push state="options"/>
</rule>
<rule pattern="tokens\b">
<token type="Keyword"/>
<push state="tokens"/>
</rule>
<rule pattern="(scope)(\s*)([A-Za-z]\w*)(\s*)(\{)">
<bygroups>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="NameVariable"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
<push state="action"/>
</rule>
<rule pattern="(catch|finally)\b">
<token type="Keyword"/>
<push state="exception"/>
</rule>
<rule pattern="(@[A-Za-z]\w*)(\s*)(::)?(\s*)([A-Za-z]\w*)(\s*)(\{)">
<bygroups>
<token type="NameLabel"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
<token type="TextWhitespace"/>
<token type="NameLabel"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
<push state="action"/>
</rule>
<rule pattern="((?:protected|private|public|fragment)\b)?(\s*)([A-Za-z]\w*)(!)?">
<bygroups>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="NameLabel"/>
<token type="Punctuation"/>
</bygroups>
<push state="rule-alts" state="rule-prelims"/>
</rule>
</state>
<state name="tokens">
<rule>
<include state="whitespace"/>
</rule>
<rule>
<include state="comments"/>
</rule>
<rule pattern="\{">
<token type="Punctuation"/>
</rule>
<rule pattern="([A-Z]\w*)(\s*)(=)?(\s*)(\'(?:\\\\|\\\'|[^\']*)\')?(\s*)(;)">
<bygroups>
<token type="NameLabel"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
<token type="TextWhitespace"/>
<token type="LiteralString"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
</rule>
<rule pattern="\}">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
</state>
<state name="options">
<rule>
<include state="whitespace"/>
</rule>
<rule>
<include state="comments"/>
</rule>
<rule pattern="\{">
<token type="Punctuation"/>
</rule>
<rule pattern="([A-Za-z]\w*)(\s*)(=)(\s*)([A-Za-z]\w*|\'(?:\\\\|\\\'|[^\']*)\'|[0-9]+|\*)(\s*)(;)">
<bygroups>
<token type="NameVariable"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
<token type="TextWhitespace"/>
<token type="Text"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
</rule>
<rule pattern="\}">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
</state>
<state name="rule-alts">
<rule>
<include state="whitespace"/>
</rule>
<rule>
<include state="comments"/>
</rule>
<rule pattern="options\b">
<token type="Keyword"/>
<push state="options"/>
</rule>
<rule pattern=":">
<token type="Punctuation"/>
</rule>
<rule pattern="'(\\\\|\\'|[^'])*'">
<token type="LiteralString"/>
</rule>
<rule pattern=""(\\\\|\\"|[^"])*"">
<token type="LiteralString"/>
</rule>
<rule pattern="<<([^>]|>[^>])>>">
<token type="LiteralString"/>
</rule>
<rule pattern="\$?[A-Z_]\w*">
<token type="NameConstant"/>
</rule>
<rule pattern="\$?[a-z_]\w*">
<token type="NameVariable"/>
</rule>
<rule pattern="(\+|\||->|=>|=|\(|\)|\.\.|\.|\?|\*|\^|!|\#|~)">
<token type="Operator"/>
</rule>
<rule pattern=",">
<token type="Punctuation"/>
</rule>
<rule pattern="\[">
<token type="Punctuation"/>
<push state="nested-arg-action"/>
</rule>
<rule pattern="\{">
<token type="Punctuation"/>
<push state="action"/>
</rule>
<rule pattern=";">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
</state>
<state name="rule-prelims">
<rule>
<include state="whitespace"/>
</rule>
<rule>
<include state="comments"/>
</rule>
<rule pattern="returns\b">
<token type="Keyword"/>
</rule>
<rule pattern="\[">
<token type="Punctuation"/>
<push state="nested-arg-action"/>
</rule>
<rule pattern="\{">
<token type="Punctuation"/>
<push state="action"/>
</rule>
<rule pattern="(throws)(\s+)([A-Za-z]\w*)">
<bygroups>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="NameLabel"/>
</bygroups>
</rule>
<rule pattern="(,)(\s*)([A-Za-z]\w*)">
<bygroups>
<token type="Punctuation"/>
<token type="TextWhitespace"/>
<token type="NameLabel"/>
</bygroups>
</rule>
<rule pattern="options\b">
<token type="Keyword"/>
<push state="options"/>
</rule>
<rule pattern="(scope)(\s+)(\{)">
<bygroups>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
<push state="action"/>
</rule>
<rule pattern="(scope)(\s+)([A-Za-z]\w*)(\s*)(;)">
<bygroups>
<token type="Keyword"/>
<token type="TextWhitespace"/>
<token type="NameLabel"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
</rule>
<rule pattern="(@[A-Za-z]\w*)(\s*)(\{)">
<bygroups>
<token type="NameLabel"/>
<token type="TextWhitespace"/>
<token type="Punctuation"/>
</bygroups>
<push state="action"/>
</rule>
<rule pattern=":">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
</state>
<state name="action">
<rule pattern="([^${}\'"/\\]+|"(\\\\|\\"|[^"])*"|'(\\\\|\\'|[^'])*'|//.*$\n?|/\*(.|\n)*?\*/|/(?!\*)(\\\\|\\/|[^/])*/|\\(?!%)|/)+">
<token type="Other"/>
</rule>
<rule pattern="(\\)(%)">
<bygroups>
<token type="Punctuation"/>
<token type="Other"/>
</bygroups>
</rule>
<rule pattern="(\$[a-zA-Z]+)(\.?)(text|value)?">
<bygroups>
<token type="NameVariable"/>
<token type="Punctuation"/>
<token type="NameProperty"/>
</bygroups>
</rule>
<rule pattern="\{">
<token type="Punctuation"/>
<push/>
</rule>
<rule pattern="\}">
<token type="Punctuation"/>
<pop depth="1"/>
</rule>
</state>
<state name="comments">
<rule pattern="//.*$">
<token type="Comment"/>
</rule>
<rule pattern="/\*(.|\n)*?\*/">
<token type="Comment"/>
</rule>
</state>
</rules>
</lexer>