1. <lexer>
    
  2.   <config>
    
  3.     <name>Odin</name>
    
  4.     <alias>odin</alias>
    
  5.     <filename>*.odin</filename>
    
  6.     <mime_type>text/odin</mime_type>
    
  7.   </config>
    
  8.   <rules>
    
  9.     <state name="NestedComment">
    
  10.         <rule pattern = "/[*]">
    
  11.             <token type = "CommentMultiline"/>
    
  12.             <push/>
    
  13.         </rule>
    
  14.         <rule pattern = "[*]/">
    
  15.             <token type = "CommentMultiline"/>
    
  16.             <pop depth = "1"/>
    
  17.         </rule>
    
  18.         <rule pattern = "[\s\S]">
    
  19.             <token type = "CommentMultiline"/>
    
  20.         </rule>
    
  21.     </state>
    
  22.     <state name="root">
    
  23.         <rule pattern = "\n">
    
  24.             <token type = "TextWhitespace"/>
    
  25.         </rule>
    
  26.         <rule pattern = "\s+">
    
  27.             <token type = "TextWhitespace"/>
    
  28.         </rule>
    
  29.         <rule pattern = "//.*?\n">
    
  30.             <token type = "CommentSingle"/>
    
  31.         </rule>
    
  32.         <rule pattern = "/[*]">
    
  33.             <token type = "CommentMultiline"/>
    
  34.             <push state="NestedComment"/>
    
  35.         </rule>
    
  36.         <rule pattern = "(import|package)\b">
    
  37.             <token type = "KeywordNamespace"/>
    
  38.         </rule>
    
  39.         <rule pattern = "(proc|struct|map|enum|union)\b">
    
  40.             <token type = "KeywordDeclaration"/>
    
  41.         </rule>
    
  42.         <rule pattern = "(asm|auto_cast|bit_set|break|case|cast|context|continue|defer|distinct|do|dynamic|else|enum|fallthrough|for|foreign|if|import|in|map|not_in|or_else|or_return|package|proc|return|struct|switch|transmute|typeid|union|using|when|where|panic|real|imag|len|cap|append|copy|delete|new|make|clearpanic|real|imag|len|cap|append|copy|delete|new|make|clear)\b">
    
  43.             <token type = "Keyword"/>
    
  44.         </rule>
    
  45.         <rule pattern = "(true|false|nil)\b">
    
  46.             <token type = "KeywordConstant"/>
    
  47.         </rule>
    
  48.         <rule pattern = "(uint|u8|u16|u32|u64|int|i8|i16|i32|i64|i16le|i32le|i64le|i128le|u16le|u32le|u64le|u128le|i16be|i32be|i64be|i128be|u16be|u32be|u64be|u128be|f16|f32|f64|complex32|complex64|complex128|quaternion64|quaternion128|quaternion256|byte|rune|string|cstring|typeid|any|bool|b8|b16|b32|b64|uintptr|rawptr)\b">
    
  49.             <token type = "KeywordType"/>
    
  50.         </rule>
    
  51.         <rule pattern = "\#[a-zA-Z_]+\b">
    
  52.             <token type = "NameDecorator"/>
    
  53.         </rule>
    
  54.         <rule pattern = "\@(\([a-zA-Z_]+\b\s*.*\)|\(?[a-zA-Z_]+\)?)">
    
  55.             <token type = "NameAttribute"/>
    
  56.         </rule>
    
  57.         <rule pattern="[a-zA-Z_]\w*">
    
  58.             <token type="Name"/>
    
  59.         </rule>
    
  60.         <rule pattern="([a-zA-Z_]\w*)(\s*)(\()">
    
  61.             <token type="NameFunction"/>
    
  62.         </rule>
    
  63.         <rule pattern="[^\W\d]\w*">
    
  64.             <token type="NameOther"/>
    
  65.         </rule>
    
  66.         <rule pattern = "\d+i">
    
  67.             <token type = "LiteralNumber"/>
    
  68.         </rule>
    
  69.         <rule pattern = "\d+\.\d*([Ee][-+]\d+)?i">
    
  70.             <token type = "LiteralNumber"/>
    
  71.         </rule>
    
  72.         <rule pattern = "\.\d+([Ee][-+]\d+)?i">
    
  73.             <token type = "LiteralNumber"/>
    
  74.         </rule>
    
  75.         <rule pattern = "\d+[Ee][-+]\d+i">
    
  76.             <token type = "LiteralNumber"/>
    
  77.         </rule>
    
  78.         <rule pattern = "\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)">
    
  79.             <token type = "LiteralNumberFloat"/>
    
  80.         </rule>
    
  81.         <rule pattern = "\.\d+([eE][+\-]?\d+)?">
    
  82.             <token type = "LiteralNumberFloat"/>
    
  83.         </rule>
    
  84.         <rule pattern = "0o[0-7]+">
    
  85.             <token type = "LiteralNumberOct"/>
    
  86.         </rule>
    
  87.         <rule pattern = "0x[0-9a-fA-F_]+">
    
  88.             <token type = "LiteralNumberHex"/>
    
  89.         </rule>
    
  90.         <rule pattern = "0b[01_]+">
    
  91.             <token type = "LiteralNumberBin"/>
    
  92.         </rule>
    
  93.         <rule pattern = "(0|[1-9][0-9_]*)">
    
  94.             <token type = "LiteralNumberInteger"/>
    
  95.         </rule>
    
  96.         <rule pattern = "'(\\['&quot;\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'" >
    
  97.             <token type = "LiteralStringChar"/>
    
  98.         </rule>
    
  99.         <rule pattern = "(`)([^`]*)(`)" >
    
  100.             <token type = "LiteralString"/>
    
  101.         </rule>
    
  102.         <rule pattern = "&quot;(\\\\|\\&quot;|[^&quot;])*&quot;" >
    
  103.             <token type = "LiteralString"/>
    
  104.         </rule>
    
  105.         <rule pattern = "(&lt;&lt;=|&gt;&gt;=|&lt;&lt;|&gt;&gt;|&lt;=|&gt;=|&amp;=|&amp;|\+=|-=|\*=|/=|%=|\||\^|=|&amp;&amp;|\|\||--|-&gt;|=|==|!=|:=|:|::|\.\.\&lt;|\.\.=|[&lt;&gt;+\-*/%&amp;])" >
    
  106.             <token type = "Operator"/>
    
  107.         </rule>
    
  108.         <rule pattern="[{}()\[\],.;]">
    
  109.             <token type="Punctuation"/>
    
  110.         </rule>
    
  111.     </state>  
    
  112.   </rules>
    
  113. </lexer>