1. <lexer>
    
  2.   <config>
    
  3.     <name>ArangoDB AQL</name>
    
  4.     <alias>aql</alias>
    
  5.     <filename>*.aql</filename>
    
  6.     <mime_type>text/x-aql</mime_type>
    
  7.     <case_insensitive>true</case_insensitive>
    
  8.     <dot_all>true</dot_all>
    
  9.     <ensure_nl>true</ensure_nl>
    
  10.   </config>
    
  11.   <rules>
    
  12.     <state name="comments-and-whitespace">
    
  13.       <rule pattern="\s+">
    
  14.         <token type="Text"/>
    
  15.       </rule>
    
  16.       <rule pattern="//.*?\n">
    
  17.         <token type="CommentSingle"/>
    
  18.       </rule>
    
  19.       <rule pattern="/\*">
    
  20.         <token type="CommentMultiline"/>
    
  21.         <push state="multiline-comment"/>
    
  22.       </rule>
    
  23.     </state>
    
  24.     <state name="multiline-comment">
    
  25.       <rule pattern="[^*]+">
    
  26.         <token type="CommentMultiline"/>
    
  27.       </rule>
    
  28.       <rule pattern="\*/">
    
  29.         <token type="CommentMultiline"/>
    
  30.         <pop depth="1"/>
    
  31.       </rule>
    
  32.       <rule pattern="\*">
    
  33.         <token type="CommentMultiline"/>
    
  34.       </rule>
    
  35.     </state>
    
  36.     <state name="double-quote">
    
  37.       <rule pattern="\\.">
    
  38.         <token type="LiteralStringDouble"/>
    
  39.       </rule>
    
  40.       <rule pattern="[^&#34;\\]+">
    
  41.         <token type="LiteralStringDouble"/>
    
  42.       </rule>
    
  43.       <rule pattern="&#34;">
    
  44.         <token type="LiteralStringDouble"/>
    
  45.         <pop depth="1"/>
    
  46.       </rule>
    
  47.     </state>
    
  48.     <state name="single-quote">
    
  49.       <rule pattern="\\.">
    
  50.         <token type="LiteralStringSingle"/>
    
  51.       </rule>
    
  52.       <rule pattern="[^&#39;\\]+">
    
  53.         <token type="LiteralStringSingle"/>
    
  54.       </rule>
    
  55.       <rule pattern="&#39;">
    
  56.         <token type="LiteralStringSingle"/>
    
  57.         <pop depth="1"/>
    
  58.       </rule>
    
  59.     </state>
    
  60.     <state name="backtick">
    
  61.       <rule pattern="\\.">
    
  62.         <token type="Name"/>
    
  63.       </rule>
    
  64.       <rule pattern="[^`\\]+">
    
  65.         <token type="Name"/>
    
  66.       </rule>
    
  67.       <rule pattern="`">
    
  68.         <token type="Name"/>
    
  69.         <pop depth="1"/>
    
  70.       </rule>
    
  71.     </state>
    
  72.     <state name="forwardtick">
    
  73.       <rule pattern="\\.">
    
  74.         <token type="Name"/>
    
  75.       </rule>
    
  76.       <rule pattern="[^´\\]+">
    
  77.         <token type="Name"/>
    
  78.       </rule>
    
  79.       <rule pattern="´">
    
  80.         <token type="Name"/>
    
  81.         <pop depth="1"/>
    
  82.       </rule>
    
  83.     </state>
    
  84.     <state name="identifier">
    
  85.       <rule pattern="(?:\$?|_+)[a-z]+[_a-z0-9]*">
    
  86.         <token type="Name"/>
    
  87.       </rule>
    
  88.       <rule pattern="`">
    
  89.         <token type="Name"/>
    
  90.         <push state="backtick"/>
    
  91.       </rule>
    
  92.       <rule pattern="´">
    
  93.         <token type="Name"/>
    
  94.         <push state="forwardtick"/>
    
  95.       </rule>
    
  96.     </state>
    
  97.     <state name="root">
    
  98.       <rule>
    
  99.         <include state="comments-and-whitespace"/>
    
  100.       </rule>
    
  101.       <rule pattern="0b[01]+">
    
  102.         <token type="LiteralNumberBin"/>
    
  103.       </rule>
    
  104.       <rule pattern="0x[0-9a-f]+">
    
  105.         <token type="LiteralNumberHex"/>
    
  106.       </rule>
    
  107.       <rule pattern="(?:0|[1-9][0-9]*)(?![\.e])">
    
  108.         <token type="LiteralNumberInteger"/>
    
  109.       </rule>
    
  110.       <rule pattern="(?:(?:0|[1-9][0-9]*)(?:\.[0-9]+)?|\.[0-9]+)(?:e[\-\+]?[0-9]+)?">
    
  111.         <token type="LiteralNumberFloat"/>
    
  112.       </rule>
    
  113.       <rule pattern="@@(?:_+[a-z0-9]+[a-z0-9_]*|[a-z0-9][a-z0-9_]*)">
    
  114.         <token type="NameVariableGlobal"/>
    
  115.       </rule>
    
  116.       <rule pattern="@(?:_+[a-z0-9]+[a-z0-9_]*|[a-z0-9][a-z0-9_]*)">
    
  117.         <token type="NameVariable"/>
    
  118.       </rule>
    
  119.       <rule pattern="=~|!~|[=!&lt;&gt;]=?|[%?:/*+-]|\.\.|&amp;&amp;|\|\|">
    
  120.         <token type="Operator"/>
    
  121.       </rule>
    
  122.       <rule pattern="[.,(){}\[\]]">
    
  123.         <token type="Punctuation"/>
    
  124.       </rule>
    
  125.       <rule pattern="[a-zA-Z0-9][a-zA-Z0-9_]*(?:::[a-zA-Z0-9_]+)+(?=\s*\()">
    
  126.         <token type="NameFunction"/>
    
  127.       </rule>
    
  128.       <rule pattern="(WITH)(\s+)(COUNT)(\s+)(INTO)\b">
    
  129.         <bygroups>
    
  130.           <token type="KeywordReserved"/>
    
  131.           <token type="Text"/>
    
  132.           <token type="KeywordPseudo"/>
    
  133.           <token type="Text"/>
    
  134.           <token type="KeywordReserved"/>
    
  135.         </bygroups>
    
  136.       </rule>
    
  137.       <rule pattern="(?:KEEP|PRUNE|SEARCH|TO)\b">
    
  138.         <token type="KeywordPseudo"/>
    
  139.       </rule>
    
  140.       <rule pattern="OPTIONS(?=\s*\{)">
    
  141.         <token type="KeywordPseudo"/>
    
  142.       </rule>
    
  143.       <rule pattern="(?:AGGREGATE|ALL|ALL_SHORTEST_PATHS|AND|ANY|ASC|AT LEAST|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LIKE|LIMIT|NONE|NOT|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WITH|WINDOW)\b">
    
  144.         <token type="KeywordReserved"/>
    
  145.       </rule>
    
  146.       <rule pattern="LET\b">
    
  147.         <token type="KeywordDeclaration"/>
    
  148.       </rule>
    
  149.       <rule pattern="(?:true|false|null)\b">
    
  150.         <token type="KeywordConstant"/>
    
  151.       </rule>
    
  152.       <rule pattern="(?-i)(?:CURRENT|NEW|OLD)\b">
    
  153.         <token type="NameBuiltinPseudo"/>
    
  154.       </rule>
    
  155.       <rule pattern="(?:to_bool|to_number|to_string|to_array|to_list|is_null|is_bool|is_number|is_string|is_array|is_list|is_object|is_document|is_datestring|typename|json_stringify|json_parse|concat|concat_separator|char_length|lower|upper|substring|substring_bytes|left|right|trim|reverse|contains|log|log2|log10|exp|exp2|sin|cos|tan|asin|acos|atan|atan2|radians|degrees|pi|regex_test|regex_replace|like|floor|ceil|round|abs|rand|sqrt|pow|length|count|min|max|average|avg|sum|product|median|variance_population|variance_sample|variance|percentile|bit_and|bit_or|bit_xor|bit_negate|bit_test|bit_popcount|bit_shift_left|bit_shift_right|bit_construct|bit_deconstruct|bit_to_string|bit_from_string|first|last|unique|outersection|interleave|in_range|jaccard|matches|merge|merge_recursive|has|attributes|keys|values|unset|unset_recursive|keep|keep_recursive|near|within|within_rectangle|is_in_polygon|distance|fulltext|stddev_sample|stddev_population|stddev|slice|nth|position|contains_array|translate|zip|call|apply|push|append|pop|shift|unshift|remove_value|remove_values|remove_nth|replace_nth|date_now|date_timestamp|date_iso8601|date_dayofweek|date_year|date_month|date_day|date_hour|date_minute|date_second|date_millisecond|date_dayofyear|date_isoweek|date_isoweekyear|date_leapyear|date_quarter|date_days_in_month|date_trunc|date_round|date_add|date_subtract|date_diff|date_compare|date_format|date_utctolocal|date_localtoutc|date_timezone|date_timezones|fail|passthru|v8|sleep|schema_get|schema_validate|shard_id|version|noopt|noeval|not_null|first_list|first_document|parse_identifier|current_user|current_database|collection_count|pregel_result|collections|document|decode_rev|range|union|union_distinct|minus|intersection|flatten|is_same_collection|check_document|ltrim|rtrim|find_first|find_last|split|substitute|ipv4_to_number|ipv4_from_number|is_ipv4|md5|sha1|sha256|sha512|crc32|fnv64|hash|random_token|to_base64|to_hex|encode_uri_component|soundex|assert|warn|is_key|sorted|sorted_unique|count_distinct|count_unique|levenshtein_distance|levenshtein_match|regex_matches|regex_split|ngram_match|ngram_similarity|ngram_positional_similarity|uuid|tokens|exists|starts_with|phrase|min_match|bm25|tfidf|boost|analyzer|offset_info|value|cosine_similarity|decay_exp|decay_gauss|decay_linear|l1_distance|l2_distance|minhash|minhash_count|minhash_error|minhash_match|geo_point|geo_multipoint|geo_polygon|geo_multipolygon|geo_linestring|geo_multilinestring|geo_contains|geo_intersects|geo_equals|geo_distance|geo_area|geo_in_range)(?=\s*\()">
    
  156.         <token type="NameFunction"/>
    
  157.       </rule>
    
  158.       <rule pattern="&#34;">
    
  159.         <token type="LiteralStringDouble"/>
    
  160.         <push state="double-quote"/>
    
  161.       </rule>
    
  162.       <rule pattern="&#39;">
    
  163.         <token type="LiteralStringSingle"/>
    
  164.         <push state="single-quote"/>
    
  165.       </rule>
    
  166.       <rule pattern="#\d+\b">
    
  167.         <token type="NameLabel"/>
    
  168.       </rule>
    
  169.       <rule>
    
  170.         <include state="identifier"/>
    
  171.       </rule>
    
  172.     </state>
    
  173.   </rules>
    
  174. </lexer>