1<lexer>
2 <config>
3 <name>Gleam</name>
4 <alias>gleam</alias>
5 <filename>*.gleam</filename>
6 <mime_type>text/x-gleam</mime_type>
7 </config>
8 <rules>
9 <state name="root">
10 <rule pattern="\s+">
11 <token type="TextWhitespace"/>
12 </rule>
13 <rule pattern="///(.*?)\n">
14 <token type="LiteralStringDoc"/>
15 </rule>
16 <rule pattern="//(.*?)\n">
17 <token type="CommentSingle"/>
18 </rule>
19 <rule pattern="(as|assert|case|opaque|panic|pub|todo)\b">
20 <token type="Keyword"/>
21 </rule>
22 <rule pattern="(import|use)\b">
23 <token type="KeywordNamespace"/>
24 </rule>
25 <rule pattern="(auto|const|delegate|derive|echo|else|if|implement|macro|test)\b">
26 <token type="KeywordReserved"/>
27 </rule>
28 <rule pattern="(let)\b">
29 <token type="KeywordDeclaration"/>
30 </rule>
31 <rule pattern="(fn)\b">
32 <token type="Keyword"/>
33 </rule>
34 <rule pattern="(type)\b">
35 <token type="Keyword"/>
36 <push state="typename"/>
37 </rule>
38 <rule pattern="(True|False)\b">
39 <token type="KeywordConstant"/>
40 </rule>
41 <rule pattern="0[bB][01](_?[01])*">
42 <token type="LiteralNumberBin"/>
43 </rule>
44 <rule pattern="0[oO][0-7](_?[0-7])*">
45 <token type="LiteralNumberOct"/>
46 </rule>
47 <rule pattern="0[xX][\da-fA-F](_?[\dA-Fa-f])*">
48 <token type="LiteralNumberHex"/>
49 </rule>
50 <rule pattern="\d(_?\d)*\.\d(_?\d)*([eE][-+]?\d(_?\d)*)?">
51 <token type="LiteralNumberFloat"/>
52 </rule>
53 <rule pattern="\d(_?\d)*">
54 <token type="LiteralNumberInteger"/>
55 </rule>
56 <rule pattern=""">
57 <token type="LiteralString"/>
58 <push state="string"/>
59 </rule>
60 <rule pattern="@([a-z_]\w*[!?]?)">
61 <token type="NameAttribute"/>
62 </rule>
63 <rule pattern="[{}()\[\],]|[#(]|\.\.|<>|<<|>>">
64 <token type="Punctuation"/>
65 </rule>
66 <rule pattern="[+\-*/%!=<>&|.]|<-">
67 <token type="Operator"/>
68 </rule>
69 <rule pattern=":|->">
70 <token type="Operator"/>
71 <push state="typename"/>
72 </rule>
73 <rule pattern="([a-z_][A-Za-z0-9_]*)(\()">
74 <bygroups>
75 <token type="NameFunction"/>
76 <token type="Punctuation"/>
77 </bygroups>
78 </rule>
79 <rule pattern="([A-Z][A-Za-z0-9_]*)(\()">
80 <bygroups>
81 <token type="NameClass"/>
82 <token type="Punctuation"/>
83 </bygroups>
84 </rule>
85 <rule pattern="([a-z_]\w*[!?]?)">
86 <token type="Name"/>
87 </rule>
88 </state>
89 <state name="typename">
90 <rule pattern="\s+">
91 <token type="TextWhitespace"/>
92 </rule>
93 <rule pattern="[A-Z][A-Za-z0-9_]*">
94 <token type="NameClass"/>
95 <pop depth="1"/>
96 </rule>
97 <rule>
98 <pop depth="1"/>
99 </rule>
100 </state>
101 <state name="string">
102 <rule pattern=""">
103 <token type="LiteralString"/>
104 <pop depth="1"/>
105 </rule>
106 <rule pattern="\\["\\fnrt]|\\u\{[\da-fA-F]{1,6}\}">
107 <token type="LiteralStringEscape"/>
108 </rule>
109 <rule pattern="[^\\"]+">
110 <token type="LiteralString"/>
111 </rule>
112 <rule pattern="\\">
113 <token type="LiteralString"/>
114 </rule>
115 </state>
116 </rules>
117</lexer>