1. <lexer>
    
  2.   <config>
    
  3.     <name>Hare</name>
    
  4.     <alias>hare</alias>
    
  5.     <filename>*.ha</filename>
    
  6.     <mime_type>text/x-hare</mime_type>
    
  7.   </config>
    
  8.   <rules>
    
  9.     <state name="string">
    
  10.       <rule pattern="&quot;">
    
  11.         <token type="LiteralString"/>
    
  12.         <pop depth="1"/>
    
  13.       </rule>
    
  14.       <rule pattern="\\([\\0abfnrtv&quot;']|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})">
    
  15.         <token type="LiteralStringEscape"/>
    
  16.       </rule>
    
  17.       <rule pattern="[^\\&quot;\n]+">
    
  18.         <token type="LiteralString"/>
    
  19.       </rule>
    
  20.       <rule pattern="\\">
    
  21.         <token type="LiteralString"/>
    
  22.       </rule>
    
  23.     </state>
    
  24.     <state name="root">
    
  25.       <rule pattern="[\s\n]+">
    
  26.         <token type="TextWhitespace"/>
    
  27.       </rule>
    
  28.       <rule pattern="@[a-z]+">
    
  29.         <token type="NameDecorator"/>
    
  30.       </rule>
    
  31.       <rule pattern="//.*\n">
    
  32.         <token type="CommentSingle"/>
    
  33.       </rule>
    
  34.       <rule pattern="&quot;">
    
  35.         <token type="LiteralString"/>
    
  36.         <push state="string"/>
    
  37.       </rule>
    
  38.       <rule pattern="`[^`]*`">
    
  39.         <token type="LiteralString"/>
    
  40.       </rule>
    
  41.       <rule pattern="'(\\[\\0abfnrtv&quot;']||\\(x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})|[^\\'])'">
    
  42.         <token type="LiteralStringChar"/>
    
  43.       </rule>
    
  44.       <rule pattern="(0|[1-9]\d*)\.\d+([eE][+-]?\d+)?(f32|f64)?">
    
  45.         <token type="LiteralNumberFloat"/>
    
  46.       </rule>
    
  47.       <rule pattern="(0|[1-9]\d*)([eE][+-]?\d+)?(f32|f64)">
    
  48.         <token type="LiteralNumberFloat"/>
    
  49.       </rule>
    
  50.       <rule pattern="0x[0-9a-fA-F]+\.[0-9a-fA-F]+([pP][+-]?\d+(f32|f64)?)?">
    
  51.         <token type="LiteralNumberFloat"/>
    
  52.       </rule>
    
  53.       <rule pattern="0x[0-9a-fA-F]+[pP][+-]?\d+(f32|f64)">
    
  54.         <token type="LiteralNumberFloat"/>
    
  55.       </rule>
    
  56.       <rule pattern="0x[0-9a-fA-F]+(z|[iu](8|16|32|64)?)?">
    
  57.         <token type="LiteralNumberHex"/>
    
  58.       </rule>
    
  59.       <rule pattern="0o[0-7]+(z|[iu](8|16|32|64)?)?">
    
  60.         <token type="LiteralNumberOct"/>
    
  61.       </rule>
    
  62.       <rule pattern="0b[01]+(z|[iu](8|16|32|64)?)?">
    
  63.         <token type="LiteralNumberBin"/>
    
  64.       </rule>
    
  65.       <rule pattern="(0|[1-9]\d*)([eE][+-]?\d+)?(z|[iu](8|16|32|64)?)?">
    
  66.         <token type="LiteralNumberInteger"/>
    
  67.       </rule>
    
  68.       <rule pattern="[~!%^&amp;*+=|?:&lt;&gt;/-]|[ai]s\b|\.\.\.">
    
  69.         <token type="Operator"/>
    
  70.       </rule>
    
  71.       <rule pattern="[()\[\],.{};]">
    
  72.         <token type="Punctuation"/>
    
  73.       </rule>
    
  74.       <rule pattern="use\b">
    
  75.         <token type="KeywordNamespace"/>
    
  76.       </rule>
    
  77.       <rule pattern="(_|align|break|const|continue|else|enum|export|for|if|return|static|struct|offset|union|fn|free|assert|abort|alloc|let|len|def|type|match|switch|case|append|delete|insert|defer|yield|vastart|vaarg|vaend)\b">
    
  78.         <token type="Keyword"/>
    
  79.       </rule>
    
  80.       <rule pattern="(size)([\s\n]*)(\()">
    
  81.         <bygroups>
    
  82.           <token type="Keyword" />
    
  83.           <token type="TextWhitespace" />
    
  84.           <token type="Punctuation" />
    
  85.         </bygroups>
    
  86.       </rule>
    
  87.       <rule pattern="(str|size|rune|bool|int|uint|uintptr|u8|u16|u32|u64|i8|i16|i32|i64|f32|f64|null|void|nullable|valist|opaque|never)\b">
    
  88.         <token type="KeywordType"/>
    
  89.       </rule>
    
  90.       <rule pattern="(true|false)\b">
    
  91.         <token type="NameBuiltin"/>
    
  92.       </rule>
    
  93.       <rule pattern="[a-zA-Z_]\w*">
    
  94.         <token type="Name"/>
    
  95.       </rule>
    
  96.     </state>
    
  97.   </rules>
    
  98. </lexer>