1<lexer>
 2  <config>
 3    <name>Bicep</name>
 4    <alias>bicep</alias>
 5    <filename>*.bicep</filename>
 6  </config>
 7  <rules>
 8    <state name="interp">
 9      <rule pattern="'">
10        <token type="LiteralString"/>
11        <pop depth="1"/>
12      </rule>
13      <rule pattern="\\.">
14        <token type="LiteralString"/>
15      </rule>
16      <rule pattern="\$\{">
17        <token type="LiteralStringInterpol"/>
18        <push state="interp-inside"/>
19      </rule>
20      <rule pattern="\$">
21        <token type="LiteralString"/>
22      </rule>
23      <rule pattern="[^'\\$]+">
24        <token type="LiteralString"/>
25      </rule>
26    </state>
27    <state name="interp-inside">
28      <rule pattern="\}">
29        <token type="LiteralStringInterpol"/>
30        <pop depth="1"/>
31      </rule>
32      <rule>
33        <include state="root"/>
34      </rule>
35    </state>
36    <state name="commentsandwhitespace">
37      <rule pattern="//[^\n\r]+">
38        <token type="CommentSingle"/>
39      </rule>
40      <rule pattern="/\*.*?\*/">
41        <token type="CommentMultiline"/>
42      </rule>
43      <rule pattern="\s+">
44        <token type="TextWhitespace"/>
45      </rule>
46    </state>
47    <state name="root">
48      <rule>
49        <include state="commentsandwhitespace"/>
50      </rule>
51      <rule pattern="'''.*?'''">
52        <token type="LiteralString"/>
53      </rule>
54      <rule pattern="'">
55        <token type="LiteralString"/>
56        <push state="interp"/>
57      </rule>
58      <rule pattern="#[\w-]+\b">
59        <token type="CommentPreproc"/>
60      </rule>
61      <rule pattern="[\w_]+(?=\()">
62        <token type="NameFunction"/>
63      </rule>
64      <rule pattern="\b(metadata|targetScope|resource|module|param|var|output|for|in|if|existing|import|as|type|with|using|func|assert)\b">
65        <token type="KeywordDeclaration"/>
66      </rule>
67      <rule pattern="\b(true|false|null)\b">
68        <token type="KeywordConstant"/>
69      </rule>
70      <rule pattern="(>=|>|<=|<|==|!=|=~|!~|::|&&|\?\?|!|-|%|\*|\/|\+)">
71        <token type="Operator"/>
72      </rule>
73      <rule pattern="(\(|\)|\[|\]|\.|:|\?|{|}|@|,|\||=>|=)">
74        <token type="Punctuation"/>
75      </rule>
76      <rule pattern="[\w_]+">
77        <token type="NameVariable"/>
78      </rule>
79      <rule pattern="[0-9]+">
80        <token type="LiteralNumberInteger"/>
81      </rule>
82    </state>
83  </rules>
84</lexer>