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