1<lexer>
2 <config>
3 <name>Beef</name>
4 <alias>beef</alias>
5 <filename>*.bf</filename>
6 <mime_type>text/x-beef</mime_type>
7 <dot_all>true</dot_all>
8 <ensure_nl>true</ensure_nl>
9 </config>
10 <rules>
11 <state name="root">
12 <rule pattern="^\s*\[.*?\]">
13 <token type="NameAttribute"/>
14 </rule>
15 <rule pattern="[^\S\n]+">
16 <token type="Text"/>
17 </rule>
18 <rule pattern="\\\n">
19 <token type="Text"/>
20 </rule>
21 <rule pattern="///[^\n\r]*">
22 <token type="CommentSpecial"/>
23 </rule>
24 <rule pattern="//[^\n\r]*">
25 <token type="CommentSingle"/>
26 </rule>
27 <rule pattern="/[*].*?[*]/">
28 <token type="CommentMultiline"/>
29 </rule>
30 <rule pattern="\n">
31 <token type="Text"/>
32 </rule>
33 <rule pattern="[~!%^&*()+=|\[\]:;,.<>/?-]">
34 <token type="Punctuation"/>
35 </rule>
36 <rule pattern="[{}]">
37 <token type="Punctuation"/>
38 </rule>
39 <rule pattern="@"(""|[^"])*"">
40 <token type="LiteralString"/>
41 </rule>
42 <rule pattern="\$@?"(""|[^"])*"">
43 <token type="LiteralString"/>
44 </rule>
45 <rule pattern=""(\\\\|\\"|[^"\n])*["\n]">
46 <token type="LiteralString"/>
47 </rule>
48 <rule pattern="'\\.'|'[^\\]'">
49 <token type="LiteralStringChar"/>
50 </rule>
51 <rule pattern="0[xX][0-9a-fA-F]+[Ll]?|\d[_\d]*(\.\d*)?([eE][+-]?\d+)?[flFLdD]?">
52 <token type="LiteralNumber"/>
53 </rule>
54 <rule pattern="#[ \t]*(if|endif|else|elif|define|undef|line|error|warning|region|endregion|pragma|nullable)\b">
55 <token type="CommentPreproc"/>
56 </rule>
57 <rule pattern="\b(extern)(\s+)(alias)\b">
58 <bygroups>
59 <token type="Keyword"/>
60 <token type="Text"/>
61 <token type="Keyword"/>
62 </bygroups>
63 </rule>
64 <rule pattern="(as|await|base|break|by|case|catch|checked|continue|default|delegate|else|event|finally|fixed|for|repeat|goto|if|in|init|is|let|lock|new|scope|on|out|params|readonly|ref|return|sizeof|stackalloc|switch|this|throw|try|typeof|unchecked|virtual|void|while|get|set|new|yield|add|remove|value|alias|ascending|descending|from|group|into|orderby|select|thenby|where|join|equals)\b">
65 <token type="Keyword"/>
66 </rule>
67 <rule pattern="(global)(::)">
68 <bygroups>
69 <token type="Keyword"/>
70 <token type="Punctuation"/>
71 </bygroups>
72 </rule>
73 <rule pattern="(abstract|async|const|enum|explicit|extern|implicit|internal|operator|override|partial|extension|private|protected|public|static|sealed|unsafe|volatile)\b">
74 <token type="KeywordDeclaration"/>
75 </rule>
76 <rule pattern="(bool|byte|char8|char16|char32|decimal|double|float|int|int8|int16|int32|int64|long|object|sbyte|short|string|uint|uint8|uint16|uint32|uint64|uint|let|var)\b\??">
77 <token type="KeywordType"/>
78 </rule>
79 <rule pattern="(true|false|null)\b">
80 <token type="KeywordConstant"/>
81 </rule>
82 <rule pattern="(class|struct|record|interface)(\s+)">
83 <bygroups>
84 <token type="Keyword"/>
85 <token type="Text"/>
86 </bygroups>
87 <push state="class"/>
88 </rule>
89 <rule pattern="(namespace|using)(\s+)">
90 <bygroups>
91 <token type="Keyword"/>
92 <token type="Text"/>
93 </bygroups>
94 <push state="namespace"/>
95 </rule>
96 <rule pattern="@?[_a-zA-Z]\w*">
97 <token type="Name"/>
98 </rule>
99 </state>
100 <state name="class">
101 <rule pattern="@?[_a-zA-Z]\w*">
102 <token type="NameClass"/>
103 <pop depth="1"/>
104 </rule>
105 <rule>
106 <pop depth="1"/>
107 </rule>
108 </state>
109 <state name="namespace">
110 <rule pattern="(?=\()">
111 <token type="Text"/>
112 <pop depth="1"/>
113 </rule>
114 <rule pattern="(@?[_a-zA-Z]\w*|\.)+">
115 <token type="NameNamespace"/>
116 <pop depth="1"/>
117 </rule>
118 </state>
119 </rules>
120</lexer>