1. <lexer>
    
  2.   <config>
    
  3.     <name>Ada</name>
    
  4.     <alias>ada</alias>
    
  5.     <alias>ada95</alias>
    
  6.     <alias>ada2005</alias>
    
  7.     <filename>*.adb</filename>
    
  8.     <filename>*.ads</filename>
    
  9.     <filename>*.ada</filename>
    
  10.     <mime_type>text/x-ada</mime_type>
    
  11.     <case_insensitive>true</case_insensitive>
    
  12.   </config>
    
  13.   <rules>
    
  14.     <state name="end">
    
  15.       <rule pattern="(if|case|record|loop|select)">
    
  16.         <token type="KeywordReserved"/>
    
  17.       </rule>
    
  18.       <rule pattern="&#34;[^&#34;]+&#34;|[\w.]+">
    
  19.         <token type="NameFunction"/>
    
  20.       </rule>
    
  21.       <rule pattern="\s+">
    
  22.         <token type="Text"/>
    
  23.       </rule>
    
  24.       <rule pattern=";">
    
  25.         <token type="Punctuation"/>
    
  26.         <pop depth="1"/>
    
  27.       </rule>
    
  28.     </state>
    
  29.     <state name="array_def">
    
  30.       <rule pattern=";">
    
  31.         <token type="Punctuation"/>
    
  32.         <pop depth="1"/>
    
  33.       </rule>
    
  34.       <rule pattern="(\w+)(\s+)(range)">
    
  35.         <bygroups>
    
  36.           <token type="KeywordType"/>
    
  37.           <token type="Text"/>
    
  38.           <token type="KeywordReserved"/>
    
  39.         </bygroups>
    
  40.       </rule>
    
  41.       <rule>
    
  42.         <include state="root"/>
    
  43.       </rule>
    
  44.     </state>
    
  45.     <state name="package_instantiation">
    
  46.       <rule pattern="(&#34;[^&#34;]+&#34;|\w+)(\s+)(=&gt;)">
    
  47.         <bygroups>
    
  48.           <token type="NameVariable"/>
    
  49.           <token type="Text"/>
    
  50.           <token type="Punctuation"/>
    
  51.         </bygroups>
    
  52.       </rule>
    
  53.       <rule pattern="[\w.\&#39;&#34;]">
    
  54.         <token type="Text"/>
    
  55.       </rule>
    
  56.       <rule pattern="\)">
    
  57.         <token type="Punctuation"/>
    
  58.         <pop depth="1"/>
    
  59.       </rule>
    
  60.       <rule>
    
  61.         <include state="root"/>
    
  62.       </rule>
    
  63.     </state>
    
  64.     <state name="subprogram">
    
  65.       <rule pattern="\(">
    
  66.         <token type="Punctuation"/>
    
  67.         <push state="#pop" state="formal_part"/>
    
  68.       </rule>
    
  69.       <rule pattern=";">
    
  70.         <token type="Punctuation"/>
    
  71.         <pop depth="1"/>
    
  72.       </rule>
    
  73.       <rule pattern="is\b">
    
  74.         <token type="KeywordReserved"/>
    
  75.         <pop depth="1"/>
    
  76.       </rule>
    
  77.       <rule pattern="&#34;[^&#34;]+&#34;|\w+">
    
  78.         <token type="NameFunction"/>
    
  79.       </rule>
    
  80.       <rule>
    
  81.         <include state="root"/>
    
  82.       </rule>
    
  83.     </state>
    
  84.     <state name="type_def">
    
  85.       <rule pattern=";">
    
  86.         <token type="Punctuation"/>
    
  87.         <pop depth="1"/>
    
  88.       </rule>
    
  89.       <rule pattern="\(">
    
  90.         <token type="Punctuation"/>
    
  91.         <push state="formal_part"/>
    
  92.       </rule>
    
  93.       <rule pattern="with|and|use">
    
  94.         <token type="KeywordReserved"/>
    
  95.       </rule>
    
  96.       <rule pattern="array\b">
    
  97.         <token type="KeywordReserved"/>
    
  98.         <push state="#pop" state="array_def"/>
    
  99.       </rule>
    
  100.       <rule pattern="record\b">
    
  101.         <token type="KeywordReserved"/>
    
  102.         <push state="record_def"/>
    
  103.       </rule>
    
  104.       <rule pattern="(null record)(;)">
    
  105.         <bygroups>
    
  106.           <token type="KeywordReserved"/>
    
  107.           <token type="Punctuation"/>
    
  108.         </bygroups>
    
  109.         <pop depth="1"/>
    
  110.       </rule>
    
  111.       <rule>
    
  112.         <include state="root"/>
    
  113.       </rule>
    
  114.     </state>
    
  115.     <state name="import">
    
  116.       <rule pattern="[\w.]+">
    
  117.         <token type="NameNamespace"/>
    
  118.         <pop depth="1"/>
    
  119.       </rule>
    
  120.       <rule>
    
  121.         <pop depth="1"/>
    
  122.       </rule>
    
  123.     </state>
    
  124.     <state name="formal_part">
    
  125.       <rule pattern="\)">
    
  126.         <token type="Punctuation"/>
    
  127.         <pop depth="1"/>
    
  128.       </rule>
    
  129.       <rule pattern="\w+">
    
  130.         <token type="NameVariable"/>
    
  131.       </rule>
    
  132.       <rule pattern=",|:[^=]">
    
  133.         <token type="Punctuation"/>
    
  134.       </rule>
    
  135.       <rule pattern="(in|not|null|out|access)\b">
    
  136.         <token type="KeywordReserved"/>
    
  137.       </rule>
    
  138.       <rule>
    
  139.         <include state="root"/>
    
  140.       </rule>
    
  141.     </state>
    
  142.     <state name="package">
    
  143.       <rule pattern="body">
    
  144.         <token type="KeywordDeclaration"/>
    
  145.       </rule>
    
  146.       <rule pattern="is\s+new|renames">
    
  147.         <token type="KeywordReserved"/>
    
  148.       </rule>
    
  149.       <rule pattern="is">
    
  150.         <token type="KeywordReserved"/>
    
  151.         <pop depth="1"/>
    
  152.       </rule>
    
  153.       <rule pattern=";">
    
  154.         <token type="Punctuation"/>
    
  155.         <pop depth="1"/>
    
  156.       </rule>
    
  157.       <rule pattern="\(">
    
  158.         <token type="Punctuation"/>
    
  159.         <push state="package_instantiation"/>
    
  160.       </rule>
    
  161.       <rule pattern="([\w.]+)">
    
  162.         <token type="NameClass"/>
    
  163.       </rule>
    
  164.       <rule>
    
  165.         <include state="root"/>
    
  166.       </rule>
    
  167.     </state>
    
  168.     <state name="attribute">
    
  169.       <rule pattern="(&#39;)(\w+)">
    
  170.         <bygroups>
    
  171.           <token type="Punctuation"/>
    
  172.           <token type="NameAttribute"/>
    
  173.         </bygroups>
    
  174.       </rule>
    
  175.     </state>
    
  176.     <state name="record_def">
    
  177.       <rule pattern="end record">
    
  178.         <token type="KeywordReserved"/>
    
  179.         <pop depth="1"/>
    
  180.       </rule>
    
  181.       <rule>
    
  182.         <include state="root"/>
    
  183.       </rule>
    
  184.     </state>
    
  185.     <state name="root">
    
  186.       <rule pattern="[^\S\n]+">
    
  187.         <token type="Text"/>
    
  188.       </rule>
    
  189.       <rule pattern="--.*?\n">
    
  190.         <token type="CommentSingle"/>
    
  191.       </rule>
    
  192.       <rule pattern="[^\S\n]+">
    
  193.         <token type="Text"/>
    
  194.       </rule>
    
  195.       <rule pattern="function|procedure|entry">
    
  196.         <token type="KeywordDeclaration"/>
    
  197.         <push state="subprogram"/>
    
  198.       </rule>
    
  199.       <rule pattern="(subtype|type)(\s+)(\w+)">
    
  200.         <bygroups>
    
  201.           <token type="KeywordDeclaration"/>
    
  202.           <token type="Text"/>
    
  203.           <token type="KeywordType"/>
    
  204.         </bygroups>
    
  205.         <push state="type_def"/>
    
  206.       </rule>
    
  207.       <rule pattern="task|protected">
    
  208.         <token type="KeywordDeclaration"/>
    
  209.       </rule>
    
  210.       <rule pattern="(subtype)(\s+)">
    
  211.         <bygroups>
    
  212.           <token type="KeywordDeclaration"/>
    
  213.           <token type="Text"/>
    
  214.         </bygroups>
    
  215.       </rule>
    
  216.       <rule pattern="(end)(\s+)">
    
  217.         <bygroups>
    
  218.           <token type="KeywordReserved"/>
    
  219.           <token type="Text"/>
    
  220.         </bygroups>
    
  221.         <push state="end"/>
    
  222.       </rule>
    
  223.       <rule pattern="(pragma)(\s+)(\w+)">
    
  224.         <bygroups>
    
  225.           <token type="KeywordReserved"/>
    
  226.           <token type="Text"/>
    
  227.           <token type="CommentPreproc"/>
    
  228.         </bygroups>
    
  229.       </rule>
    
  230.       <rule pattern="(true|false|null)\b">
    
  231.         <token type="KeywordConstant"/>
    
  232.       </rule>
    
  233.       <rule pattern="(Short_Short_Integer|Short_Short_Float|Long_Long_Integer|Long_Long_Float|Wide_Character|Reference_Type|Short_Integer|Long_Integer|Wide_String|Short_Float|Controlled|Long_Float|Character|Generator|File_Type|File_Mode|Positive|Duration|Boolean|Natural|Integer|Address|Cursor|String|Count|Float|Byte)\b">
    
  234.         <token type="KeywordType"/>
    
  235.       </rule>
    
  236.       <rule pattern="(and(\s+then)?|in|mod|not|or(\s+else)|rem)\b">
    
  237.         <token type="OperatorWord"/>
    
  238.       </rule>
    
  239.       <rule pattern="generic|private">
    
  240.         <token type="KeywordDeclaration"/>
    
  241.       </rule>
    
  242.       <rule pattern="package">
    
  243.         <token type="KeywordDeclaration"/>
    
  244.         <push state="package"/>
    
  245.       </rule>
    
  246.       <rule pattern="array\b">
    
  247.         <token type="KeywordReserved"/>
    
  248.         <push state="array_def"/>
    
  249.       </rule>
    
  250.       <rule pattern="(with|use)(\s+)">
    
  251.         <bygroups>
    
  252.           <token type="KeywordNamespace"/>
    
  253.           <token type="Text"/>
    
  254.         </bygroups>
    
  255.         <push state="import"/>
    
  256.       </rule>
    
  257.       <rule pattern="(\w+)(\s*)(:)(\s*)(constant)">
    
  258.         <bygroups>
    
  259.           <token type="NameConstant"/>
    
  260.           <token type="Text"/>
    
  261.           <token type="Punctuation"/>
    
  262.           <token type="Text"/>
    
  263.           <token type="KeywordReserved"/>
    
  264.         </bygroups>
    
  265.       </rule>
    
  266.       <rule pattern="&lt;&lt;\w+&gt;&gt;">
    
  267.         <token type="NameLabel"/>
    
  268.       </rule>
    
  269.       <rule pattern="(\w+)(\s*)(:)(\s*)(declare|begin|loop|for|while)">
    
  270.         <bygroups>
    
  271.           <token type="NameLabel"/>
    
  272.           <token type="Text"/>
    
  273.           <token type="Punctuation"/>
    
  274.           <token type="Text"/>
    
  275.           <token type="KeywordReserved"/>
    
  276.         </bygroups>
    
  277.       </rule>
    
  278.       <rule pattern="\b(synchronized|overriding|terminate|interface|exception|protected|separate|constant|abstract|renames|reverse|subtype|aliased|declare|requeue|limited|return|tagged|access|record|select|accept|digits|others|pragma|entry|elsif|delta|delay|array|until|range|raise|while|begin|abort|else|loop|when|type|null|then|body|task|goto|case|exit|end|for|abs|xor|all|new|out|is|of|if|or|do|at)\b">
    
  279.         <token type="KeywordReserved"/>
    
  280.       </rule>
    
  281.       <rule pattern="&#34;[^&#34;]*&#34;">
    
  282.         <token type="LiteralString"/>
    
  283.       </rule>
    
  284.       <rule>
    
  285.         <include state="attribute"/>
    
  286.       </rule>
    
  287.       <rule>
    
  288.         <include state="numbers"/>
    
  289.       </rule>
    
  290.       <rule pattern="&#39;[^&#39;]&#39;">
    
  291.         <token type="LiteralStringChar"/>
    
  292.       </rule>
    
  293.       <rule pattern="(\w+)(\s*|[(,])">
    
  294.         <bygroups>
    
  295.           <token type="Name"/>
    
  296.           <usingself state="root"/>
    
  297.         </bygroups>
    
  298.       </rule>
    
  299.       <rule pattern="(&lt;&gt;|=&gt;|:=|[()|:;,.&#39;])">
    
  300.         <token type="Punctuation"/>
    
  301.       </rule>
    
  302.       <rule pattern="[*&lt;&gt;+=/&amp;-]">
    
  303.         <token type="Operator"/>
    
  304.       </rule>
    
  305.       <rule pattern="\n+">
    
  306.         <token type="Text"/>
    
  307.       </rule>
    
  308.     </state>
    
  309.     <state name="numbers">
    
  310.       <rule pattern="[0-9_]+#[0-9a-f]+#">
    
  311.         <token type="LiteralNumberHex"/>
    
  312.       </rule>
    
  313.       <rule pattern="[0-9_]+\.[0-9_]*">
    
  314.         <token type="LiteralNumberFloat"/>
    
  315.       </rule>
    
  316.       <rule pattern="[0-9_]+">
    
  317.         <token type="LiteralNumberInteger"/>
    
  318.       </rule>
    
  319.     </state>
    
  320.   </rules>
    
  321. </lexer>