1<lexer>
  2  <config>
  3    <name>Protocol Buffer</name>
  4    <alias>protobuf</alias>
  5    <alias>proto</alias>
  6    <filename>*.proto</filename>
  7  </config>
  8  <rules>
  9    <state name="root">
 10      <rule pattern="[ \t]+">
 11        <token type="Text"/>
 12      </rule>
 13      <rule pattern="[,;{}\[\]()&lt;&gt;]">
 14        <token type="Punctuation"/>
 15      </rule>
 16      <rule pattern="/(\\\n)?/(\n|(.|\n)*?[^\\]\n)">
 17        <token type="CommentSingle"/>
 18      </rule>
 19      <rule pattern="/(\\\n)?\*(.|\n)*?\*(\\\n)?/">
 20        <token type="CommentMultiline"/>
 21      </rule>
 22      <rule pattern="\b(extensions|required|repeated|optional|returns|default|option|packed|import|ctype|oneof|max|rpc|to)\b">
 23        <token type="Keyword"/>
 24      </rule>
 25      <rule pattern="(sfixed32|sfixed64|fixed32|fixed64|sint32|sint64|double|string|uint32|uint64|int32|float|int64|bytes|bool)\b">
 26        <token type="KeywordType"/>
 27      </rule>
 28      <rule pattern="(true|false)\b">
 29        <token type="KeywordConstant"/>
 30      </rule>
 31      <rule pattern="(package)(\s+)">
 32        <bygroups>
 33          <token type="KeywordNamespace"/>
 34          <token type="Text"/>
 35        </bygroups>
 36        <push state="package"/>
 37      </rule>
 38      <rule pattern="(message|extend)(\s+)">
 39        <bygroups>
 40          <token type="KeywordDeclaration"/>
 41          <token type="Text"/>
 42        </bygroups>
 43        <push state="message"/>
 44      </rule>
 45      <rule pattern="(enum|group|service)(\s+)">
 46        <bygroups>
 47          <token type="KeywordDeclaration"/>
 48          <token type="Text"/>
 49        </bygroups>
 50        <push state="type"/>
 51      </rule>
 52      <rule pattern="\&#34;.*?\&#34;">
 53        <token type="LiteralString"/>
 54      </rule>
 55      <rule pattern="\&#39;.*?\&#39;">
 56        <token type="LiteralString"/>
 57      </rule>
 58      <rule pattern="(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[LlUu]*">
 59        <token type="LiteralNumberFloat"/>
 60      </rule>
 61      <rule pattern="(\d+\.\d*|\.\d+|\d+[fF])[fF]?">
 62        <token type="LiteralNumberFloat"/>
 63      </rule>
 64      <rule pattern="(\-?(inf|nan))\b">
 65        <token type="LiteralNumberFloat"/>
 66      </rule>
 67      <rule pattern="0x[0-9a-fA-F]+[LlUu]*">
 68        <token type="LiteralNumberHex"/>
 69      </rule>
 70      <rule pattern="0[0-7]+[LlUu]*">
 71        <token type="LiteralNumberOct"/>
 72      </rule>
 73      <rule pattern="\d+[LlUu]*">
 74        <token type="LiteralNumberInteger"/>
 75      </rule>
 76      <rule pattern="[+-=]">
 77        <token type="Operator"/>
 78      </rule>
 79      <rule pattern="([a-zA-Z_][\w.]*)([ \t]*)(=)">
 80        <bygroups>
 81          <token type="Name"/>
 82          <token type="Text"/>
 83          <token type="Operator"/>
 84        </bygroups>
 85      </rule>
 86      <rule pattern="[a-zA-Z_][\w.]*">
 87        <token type="Name"/>
 88      </rule>
 89    </state>
 90    <state name="package">
 91      <rule pattern="[a-zA-Z_]\w*">
 92        <token type="NameNamespace"/>
 93        <pop depth="1"/>
 94      </rule>
 95      <rule>
 96        <pop depth="1"/>
 97      </rule>
 98    </state>
 99    <state name="message">
100      <rule pattern="[a-zA-Z_]\w*">
101        <token type="NameClass"/>
102        <pop depth="1"/>
103      </rule>
104      <rule>
105        <pop depth="1"/>
106      </rule>
107    </state>
108    <state name="type">
109      <rule pattern="[a-zA-Z_]\w*">
110        <token type="Name"/>
111        <pop depth="1"/>
112      </rule>
113      <rule>
114        <pop depth="1"/>
115      </rule>
116    </state>
117  </rules>
118</lexer>