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="(&gt;=|&gt;|&lt;=|&lt;|==|!=|=~|!~|::|&amp;&amp;|\?\?|!|-|%|\*|\/|\+)">
    
  71.         <token type="Operator"/>
    
  72.       </rule>
    
  73.       <rule pattern="(\(|\)|\[|\]|\.|:|\?|{|}|@|,|\||=&gt;|=)">
    
  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>