1. <lexer>
    
  2.   <config>
    
  3.     <name>PromQL</name>
    
  4.     <alias>promql</alias>
    
  5.     <filename>*.promql</filename>
    
  6.   </config>
    
  7.   <rules>
    
  8.     <state name="range">
    
  9.       <rule pattern="\]">
    
  10.         <token type="Punctuation"/>
    
  11.         <pop depth="1"/>
    
  12.       </rule>
    
  13.       <rule pattern="[1-9][0-9]*[smhdwy]">
    
  14.         <token type="LiteralString"/>
    
  15.       </rule>
    
  16.     </state>
    
  17.     <state name="function">
    
  18.       <rule pattern="\)">
    
  19.         <token type="Operator"/>
    
  20.         <pop depth="1"/>
    
  21.       </rule>
    
  22.       <rule pattern="\(">
    
  23.         <token type="Operator"/>
    
  24.         <push/>
    
  25.       </rule>
    
  26.       <rule>
    
  27.         <pop depth="1"/>
    
  28.       </rule>
    
  29.     </state>
    
  30.     <state name="root">
    
  31.       <rule pattern="\n">
    
  32.         <token type="TextWhitespace"/>
    
  33.       </rule>
    
  34.       <rule pattern="\s+">
    
  35.         <token type="TextWhitespace"/>
    
  36.       </rule>
    
  37.       <rule pattern=",">
    
  38.         <token type="Punctuation"/>
    
  39.       </rule>
    
  40.       <rule pattern="(group_right|group_left|ignoring|without|offset|bool|on|by)\b">
    
  41.         <token type="Keyword"/>
    
  42.       </rule>
    
  43.       <rule pattern="(count_values|quantile|bottomk|stdvar|stddev|count|group|topk|sum|min|max|avg)\b">
    
  44.         <token type="Keyword"/>
    
  45.       </rule>
    
  46.       <rule pattern="(histogram_quantile|quantile_over_time|absent_over_time|stdvar_over_time|stddev_over_time|count_over_time|predict_linear|label_replace|max_over_time|avg_over_time|sum_over_time|days_in_month|min_over_time|day_of_month|holt_winters|day_of_week|label_join|sort_desc|clamp_max|timestamp|clamp_min|increase|changes|resets|vector|absent|idelta|minute|scalar|log10|delta|month|floor|deriv|round|irate|rate|year|sort|log2|sqrt|ceil|time|hour|abs|exp|ln)\b">
    
  47.         <token type="KeywordReserved"/>
    
  48.       </rule>
    
  49.       <rule pattern="[1-9][0-9]*[smhdwy]">
    
  50.         <token type="LiteralString"/>
    
  51.       </rule>
    
  52.       <rule pattern="-?[0-9]+\.[0-9]+">
    
  53.         <token type="LiteralNumberFloat"/>
    
  54.       </rule>
    
  55.       <rule pattern="-?[0-9]+">
    
  56.         <token type="LiteralNumberInteger"/>
    
  57.       </rule>
    
  58.       <rule pattern="#.*?$">
    
  59.         <token type="CommentSingle"/>
    
  60.       </rule>
    
  61.       <rule pattern="(\+|\-|\*|\/|\%|\^)">
    
  62.         <token type="Operator"/>
    
  63.       </rule>
    
  64.       <rule pattern="==|!=|&gt;=|&lt;=|&lt;|&gt;">
    
  65.         <token type="Operator"/>
    
  66.       </rule>
    
  67.       <rule pattern="and|or|unless">
    
  68.         <token type="OperatorWord"/>
    
  69.       </rule>
    
  70.       <rule pattern="[_a-zA-Z][a-zA-Z0-9_]+">
    
  71.         <token type="NameVariable"/>
    
  72.       </rule>
    
  73.       <rule pattern="([&#34;\&#39;])(.*?)([&#34;\&#39;])">
    
  74.         <bygroups>
    
  75.           <token type="Punctuation"/>
    
  76.           <token type="LiteralString"/>
    
  77.           <token type="Punctuation"/>
    
  78.         </bygroups>
    
  79.       </rule>
    
  80.       <rule pattern="\(">
    
  81.         <token type="Operator"/>
    
  82.         <push state="function"/>
    
  83.       </rule>
    
  84.       <rule pattern="\)">
    
  85.         <token type="Operator"/>
    
  86.       </rule>
    
  87.       <rule pattern="\{">
    
  88.         <token type="Punctuation"/>
    
  89.         <push state="labels"/>
    
  90.       </rule>
    
  91.       <rule pattern="\[">
    
  92.         <token type="Punctuation"/>
    
  93.         <push state="range"/>
    
  94.       </rule>
    
  95.     </state>
    
  96.     <state name="labels">
    
  97.       <rule pattern="\}">
    
  98.         <token type="Punctuation"/>
    
  99.         <pop depth="1"/>
    
  100.       </rule>
    
  101.       <rule pattern="\n">
    
  102.         <token type="TextWhitespace"/>
    
  103.       </rule>
    
  104.       <rule pattern="\s+">
    
  105.         <token type="TextWhitespace"/>
    
  106.       </rule>
    
  107.       <rule pattern=",">
    
  108.         <token type="Punctuation"/>
    
  109.       </rule>
    
  110.       <rule pattern="([_a-zA-Z][a-zA-Z0-9_]*?)(\s*?)(=~|!=|=|!~)(\s*?)(&#34;|&#39;)(.*?)(&#34;|&#39;)">
    
  111.         <bygroups>
    
  112.           <token type="NameLabel"/>
    
  113.           <token type="TextWhitespace"/>
    
  114.           <token type="Operator"/>
    
  115.           <token type="TextWhitespace"/>
    
  116.           <token type="Punctuation"/>
    
  117.           <token type="LiteralString"/>
    
  118.           <token type="Punctuation"/>
    
  119.         </bygroups>
    
  120.       </rule>
    
  121.     </state>
    
  122.   </rules>
    
  123. </lexer>