1. <lexer>
    
  2.   <config>
    
  3.     <name>Thrift</name>
    
  4.     <alias>thrift</alias>
    
  5.     <filename>*.thrift</filename>
    
  6.     <mime_type>application/x-thrift</mime_type>
    
  7.   </config>
    
  8.   <rules>
    
  9.     <state name="class">
    
  10.       <rule pattern="[a-zA-Z_]\w*">
    
  11.         <token type="NameClass"/>
    
  12.         <pop depth="1"/>
    
  13.       </rule>
    
  14.       <rule>
    
  15.         <pop depth="1"/>
    
  16.       </rule>
    
  17.     </state>
    
  18.     <state name="keywords">
    
  19.       <rule pattern="(async|oneway|extends|throws|required|optional)\b">
    
  20.         <token type="Keyword"/>
    
  21.       </rule>
    
  22.       <rule pattern="(true|false)\b">
    
  23.         <token type="KeywordConstant"/>
    
  24.       </rule>
    
  25.       <rule pattern="(const|typedef)\b">
    
  26.         <token type="KeywordDeclaration"/>
    
  27.       </rule>
    
  28.       <rule pattern="(smalltalk_category|smalltalk_prefix|delphi_namespace|csharp_namespace|ruby_namespace|xsd_namespace|cpp_namespace|php_namespace|xsd_nillable|xsd_optional|java_package|cocoa_prefix|perl_package|cpp_include|py_module|xsd_attrs|cpp_type|xsd_all|include)\b">
    
  29.         <token type="KeywordNamespace"/>
    
  30.       </rule>
    
  31.       <rule pattern="(double|binary|string|slist|senum|bool|void|byte|list|i64|map|set|i32|i16)\b">
    
  32.         <token type="KeywordType"/>
    
  33.       </rule>
    
  34.       <rule pattern="\b(__NAMESPACE__|synchronized|__FUNCTION__|__METHOD__|endforeach|implements|enddeclare|instanceof|transient|endswitch|protected|interface|__CLASS__|continue|__FILE__|abstract|function|endwhile|unsigned|register|volatile|__LINE__|declare|foreach|default|__DIR__|private|finally|dynamic|virtual|lambda|elseif|inline|switch|unless|endfor|delete|import|return|module|ensure|native|rescue|assert|sizeof|static|global|except|public|float|BEGIN|super|endif|yield|elsif|throw|clone|class|catch|until|break|retry|begin|raise|alias|while|print|undef|exec|with|when|case|redo|args|elif|this|then|self|goto|else|pass|next|var|for|xor|END|not|try|del|and|def|new|use|nil|end|if|do|is|or|in|as)\b">
    
  35.         <token type="KeywordReserved"/>
    
  36.       </rule>
    
  37.     </state>
    
  38.     <state name="numbers">
    
  39.       <rule pattern="[+-]?(\d+\.\d+([eE][+-]?\d+)?|\.?\d+[eE][+-]?\d+)">
    
  40.         <token type="LiteralNumberFloat"/>
    
  41.       </rule>
    
  42.       <rule pattern="[+-]?0x[0-9A-Fa-f]+">
    
  43.         <token type="LiteralNumberHex"/>
    
  44.       </rule>
    
  45.       <rule pattern="[+-]?[0-9]+">
    
  46.         <token type="LiteralNumberInteger"/>
    
  47.       </rule>
    
  48.     </state>
    
  49.     <state name="root">
    
  50.       <rule>
    
  51.         <include state="whitespace"/>
    
  52.       </rule>
    
  53.       <rule>
    
  54.         <include state="comments"/>
    
  55.       </rule>
    
  56.       <rule pattern="&#34;">
    
  57.         <token type="LiteralStringDouble"/>
    
  58.         <combined state="stringescape" state="dqs"/>
    
  59.       </rule>
    
  60.       <rule pattern="\&#39;">
    
  61.         <token type="LiteralStringSingle"/>
    
  62.         <combined state="stringescape" state="sqs"/>
    
  63.       </rule>
    
  64.       <rule pattern="(namespace)(\s+)">
    
  65.         <bygroups>
    
  66.           <token type="KeywordNamespace"/>
    
  67.           <token type="TextWhitespace"/>
    
  68.         </bygroups>
    
  69.         <push state="namespace"/>
    
  70.       </rule>
    
  71.       <rule pattern="(enum|union|struct|service|exception)(\s+)">
    
  72.         <bygroups>
    
  73.           <token type="KeywordDeclaration"/>
    
  74.           <token type="TextWhitespace"/>
    
  75.         </bygroups>
    
  76.         <push state="class"/>
    
  77.       </rule>
    
  78.       <rule pattern="((?:(?:[^\W\d]|\$)[\w.\[\]$&lt;&gt;]*\s+)+?)((?:[^\W\d]|\$)[\w$]*)(\s*)(\()">
    
  79.         <bygroups>
    
  80.           <usingself state="root"/>
    
  81.           <token type="NameFunction"/>
    
  82.           <token type="Text"/>
    
  83.           <token type="Operator"/>
    
  84.         </bygroups>
    
  85.       </rule>
    
  86.       <rule>
    
  87.         <include state="keywords"/>
    
  88.       </rule>
    
  89.       <rule>
    
  90.         <include state="numbers"/>
    
  91.       </rule>
    
  92.       <rule pattern="[&amp;=]">
    
  93.         <token type="Operator"/>
    
  94.       </rule>
    
  95.       <rule pattern="[:;,{}()&lt;&gt;\[\]]">
    
  96.         <token type="Punctuation"/>
    
  97.       </rule>
    
  98.       <rule pattern="[a-zA-Z_](\.\w|\w)*">
    
  99.         <token type="Name"/>
    
  100.       </rule>
    
  101.     </state>
    
  102.     <state name="dqs">
    
  103.       <rule pattern="&#34;">
    
  104.         <token type="LiteralStringDouble"/>
    
  105.         <pop depth="1"/>
    
  106.       </rule>
    
  107.       <rule pattern="[^\\&#34;\n]+">
    
  108.         <token type="LiteralStringDouble"/>
    
  109.       </rule>
    
  110.     </state>
    
  111.     <state name="namespace">
    
  112.       <rule pattern="[a-z*](\.\w|\w)*">
    
  113.         <token type="NameNamespace"/>
    
  114.         <pop depth="1"/>
    
  115.       </rule>
    
  116.       <rule>
    
  117.         <pop depth="1"/>
    
  118.       </rule>
    
  119.     </state>
    
  120.     <state name="whitespace">
    
  121.       <rule pattern="\n">
    
  122.         <token type="TextWhitespace"/>
    
  123.       </rule>
    
  124.       <rule pattern="\s+">
    
  125.         <token type="TextWhitespace"/>
    
  126.       </rule>
    
  127.     </state>
    
  128.     <state name="comments">
    
  129.       <rule pattern="#.*$">
    
  130.         <token type="Comment"/>
    
  131.       </rule>
    
  132.       <rule pattern="//.*?\n">
    
  133.         <token type="Comment"/>
    
  134.       </rule>
    
  135.       <rule pattern="/\*[\w\W]*?\*/">
    
  136.         <token type="CommentMultiline"/>
    
  137.       </rule>
    
  138.     </state>
    
  139.     <state name="stringescape">
    
  140.       <rule pattern="\\([\\nrt&#34;\&#39;])">
    
  141.         <token type="LiteralStringEscape"/>
    
  142.       </rule>
    
  143.     </state>
    
  144.     <state name="sqs">
    
  145.       <rule pattern="&#39;">
    
  146.         <token type="LiteralStringSingle"/>
    
  147.         <pop depth="1"/>
    
  148.       </rule>
    
  149.       <rule pattern="[^\\\&#39;\n]+">
    
  150.         <token type="LiteralStringSingle"/>
    
  151.       </rule>
    
  152.     </state>
    
  153.   </rules>
    
  154. </lexer>