1<lexer>
2 <config>
3 <name>ucode</name>
4 <filename>*.uc</filename>
5 <mime_type>application/x.ucode</mime_type>
6 <mime_type>text/x.ucode</mime_type>
7 <dot_all>true</dot_all>
8 <ensure_nl>true</ensure_nl>
9 </config>
10 <rules>
11 <state name="interp">
12 <rule pattern="`">
13 <token type="LiteralStringBacktick"/>
14 <pop depth="1"/>
15 </rule>
16 <rule pattern="\\\\">
17 <token type="LiteralStringBacktick"/>
18 </rule>
19 <rule pattern="\\`">
20 <token type="LiteralStringBacktick"/>
21 </rule>
22 <rule pattern="\\[^`\\]">
23 <token type="LiteralStringBacktick"/>
24 </rule>
25 <rule pattern="\$\{">
26 <token type="LiteralStringInterpol"/>
27 <push state="interp-inside"/>
28 </rule>
29 <rule pattern="\$">
30 <token type="LiteralStringBacktick"/>
31 </rule>
32 <rule pattern="[^`\\$]+">
33 <token type="LiteralStringBacktick"/>
34 </rule>
35 </state>
36 <state name="interp-inside">
37 <rule pattern="\}">
38 <token type="LiteralStringInterpol"/>
39 <pop depth="1"/>
40 </rule>
41 <rule>
42 <include state="root"/>
43 </rule>
44 </state>
45 <state name="commentsandwhitespace">
46 <rule pattern="\s+">
47 <token type="Text"/>
48 </rule>
49 <rule pattern="<!--">
50 <token type="Comment"/>
51 </rule>
52 <rule pattern="//.*?\n">
53 <token type="CommentSingle"/>
54 </rule>
55 <rule pattern="/\*.*?\*/">
56 <token type="CommentMultiline"/>
57 </rule>
58 </state>
59 <state name="slashstartsregex">
60 <rule>
61 <include state="commentsandwhitespace"/>
62 </rule>
63 <rule pattern="/(\\.|[^[/\\\n]|\[(\\.|[^\]\\\n])*])+/([gimuy]+\b|\B)">
64 <token type="LiteralStringRegex"/>
65 <pop depth="1"/>
66 </rule>
67 <rule pattern="(?=/)">
68 <token type="Text"/>
69 <push state="#pop" state="badregex"/>
70 </rule>
71 <rule>
72 <pop depth="1"/>
73 </rule>
74 </state>
75 <state name="badregex">
76 <rule pattern="\n">
77 <token type="Text"/>
78 <pop depth="1"/>
79 </rule>
80 </state>
81 <state name="root">
82 <rule pattern="\A#! ?/.*?\n">
83 <token type="CommentHashbang"/>
84 </rule>
85 <rule pattern="^(?=\s|/|<!--)">
86 <token type="Text"/>
87 <push state="slashstartsregex"/>
88 </rule>
89 <rule>
90 <include state="commentsandwhitespace"/>
91 </rule>
92 <rule pattern="\d+(\.\d*|[eE][+\-]?\d+)">
93 <token type="LiteralNumberFloat"/>
94 </rule>
95 <rule pattern="0[bB][01]+">
96 <token type="LiteralNumberBin"/>
97 </rule>
98 <rule pattern="0[oO][0-7]+">
99 <token type="LiteralNumberOct"/>
100 </rule>
101 <rule pattern="0[xX][0-9a-fA-F]+">
102 <token type="LiteralNumberHex"/>
103 </rule>
104 <rule pattern="[0-9][0-9_]*">
105 <token type="LiteralNumberInteger"/>
106 </rule>
107 <rule pattern="\.\.\.|=>">
108 <token type="Punctuation"/>
109 </rule>
110 <rule pattern="\+\+|--|~|&&|\?|:|\|\||\\(?=\n)|(<<|>>>?|==?|!=?|[-<>+*%&|^/])=?">
111 <token type="Operator"/>
112 <push state="slashstartsregex"/>
113 </rule>
114 <rule pattern="[{(\[;,]">
115 <token type="Punctuation"/>
116 <push state="slashstartsregex"/>
117 </rule>
118 <rule pattern="[})\].]">
119 <token type="Punctuation"/>
120 </rule>
121 <rule pattern="(import|export|from|as|for|in|while|break|return|continue|switch|case|default|if|else|try|catch|delete|this)\b">
122 <token type="Keyword"/>
123 <push state="slashstartsregex"/>
124 </rule>
125 <rule pattern="(const|let|function)\b">
126 <token type="KeywordDeclaration"/>
127 <push state="slashstartsregex"/>
128 </rule>
129 <rule pattern="(true|false|null|NaN|Infinity)\b">
130 <token type="KeywordConstant"/>
131 </rule>
132 <rule pattern="(?:[$_\p{L}\p{N}]|\\u[a-fA-F0-9]{4})(?:(?:[$\p{L}\p{N}]|\\u[a-fA-F0-9]{4}))*">
133 <token type="NameOther"/>
134 </rule>
135 <rule pattern=""(\\\\|\\"|[^"])*"">
136 <token type="LiteralStringDouble"/>
137 </rule>
138 <rule pattern="'(\\\\|\\'|[^'])*'">
139 <token type="LiteralStringSingle"/>
140 </rule>
141 <rule pattern="`">
142 <token type="LiteralStringBacktick"/>
143 <push state="interp"/>
144 </rule>
145 </state>
146 </rules>
147</lexer>