1. <lexer>
    
  2.   <config>
    
  3.     <name>Transact-SQL</name>
    
  4.     <alias>tsql</alias>
    
  5.     <alias>t-sql</alias>
    
  6.     <mime_type>text/x-tsql</mime_type>
    
  7.     <case_insensitive>true</case_insensitive>
    
  8.     <not_multiline>true</not_multiline>
    
  9.   </config>
    
  10.   <rules>
    
  11.     <state name="root">
    
  12.       <rule pattern="\s+">
    
  13.         <token type="TextWhitespace"/>
    
  14.       </rule>
    
  15.       <rule pattern="--(?m).*?$\n?">
    
  16.         <token type="CommentSingle"/>
    
  17.       </rule>
    
  18.       <rule pattern="/\*">
    
  19.         <token type="CommentMultiline"/>
    
  20.         <push state="multiline-comments"/>
    
  21.       </rule>
    
  22.       <rule pattern="&#39;">
    
  23.         <token type="LiteralStringSingle"/>
    
  24.         <push state="string"/>
    
  25.       </rule>
    
  26.       <rule pattern="&#34;">
    
  27.         <token type="LiteralStringName"/>
    
  28.         <push state="quoted-ident"/>
    
  29.       </rule>
    
  30.       <rule pattern="(\*=|!=|!&gt;|\^=|&lt;=|&lt;&gt;|\|=|&amp;=|&gt;=|%=|\+=|/=|-=|!&lt;|::|/|-|%|\+|&amp;|&gt;|\||=|\^|&lt;|~|\*)">
    
  31.         <token type="Operator"/>
    
  32.       </rule>
    
  33.       <rule pattern="(intersect|between|except|exists|union|some|like|all|any|not|and|or|in)\b">
    
  34.         <token type="OperatorWord"/>
    
  35.       </rule>
    
  36.       <rule pattern="(uniqueidentifier|datetimeoffset|smalldatetime|hierarchyid|sql_variant|smallmoney|varbinary|datetime2|timestamp|datetime|smallint|nvarchar|decimal|tinyint|varchar|numeric|binary|bigint|cursor|image|nchar|money|float|table|ntext|text|time|real|date|char|int|bit|xml)\b">
    
  37.         <token type="NameClass"/>
    
  38.       </rule>
    
  39.       <rule pattern="(get_filestream_transaction_context|datetimeoffsetfromparts|fulltextserviceproperty|fulltextcatalogproperty|current_transaction_id|smalldatetimefromparts|min_active_rowversion|database_principal_id|current_request_id|databasepropertyex|connectionproperty|datetime2fromparts|object_schema_name|indexkey_property|filegroupproperty|current_timestamp|sysdatetimeoffset|has_perms_by_name|object_definition|datetimefromparts|assemblyproperty|todatetimeoffset|original_db_name|objectpropertyex|is_srvrolemember|error_procedure|binary_checksum|session_context|sp_helplanguage|newsequentialid|error_severity|original_login|objectproperty|opendatasource|columnproperty|sysutcdatetime|scope_identity|serverproperty|certprivatekey|filegroup_name|cursor_status|formatmessage|indexproperty|is_rolemember|datefromparts|timefromparts|string_escape|error_message|switchoffset|filegroup_id|string_split|string_agg|current_user|checksum_agg|applock_test|session_user|typeproperty|rowcount_big|context_info|fileproperty|error_number|datediff_big|applock_mode|sysdatetime|error_state|json_modify|grouping_id|getansinull|try_convert|certencoded|system_user|permissions|schema_name|object_name|suser_sname|difference|xact_state|json_value|\$partition|row_number|json_query|getutcdate|col_length|decompress|error_line|openrowset|stats_date|pwdcompare|dense_rank|pwdencrypt|suser_name|is_member|index_col|quotename|host_name|charindex|parsename|isnumeric|user_name|replicate|openquery|count_big|type_name|object_id|try_parse|file_idex|substring|file_name|textvalid|suser_sid|schema_id|compress|grouping|suser_id|app_name|try_cast|col_name|datepart|datename|datediff|checksum|patindex|openjson|getdate|convert|openxml|file_id|db_name|radians|ceiling|unicode|reverse|dateadd|soundex|degrees|eomonth|user_id|type_id|host_id|textptr|replace|concat|concat_ws|square|isdate|stdevp|isjson|isnull|choose|format|stuff|floor|round|right|upper|log10|rtrim|lower|power|ltrim|space|db_id|month|parse|stdev|nchar|newid|count|ntile|ascii|char|year|varp|rank|left|sign|cast|acos|atn2|atan|asin|rand|sqrt|sin|max|min|tan|avg|cos|log|len|abs|cot|str|iif|exp|var|day|sum|pi)\b">
    
  40.         <token type="NameFunction"/>
    
  41.       </rule>
    
  42.       <rule pattern="(goto)(\s+)(\w+\b)">
    
  43.         <bygroups>
    
  44.           <token type="Keyword"/>
    
  45.           <token type="TextWhitespace"/>
    
  46.           <token type="NameLabel"/>
    
  47.         </bygroups>
    
  48.       </rule>
    
  49.       <rule pattern="(current_transform_group_for_type|current_default_transform_group|semanticsimilaritydetailstable|semanticsimilaritytable|semantickeyphrasetable|occurrences_regex|current_timestamp|character_length|percentile_cont|identity_insert|current_catalog|translate_regex|timezone_minute|substring_regex|percentile_disc|regr_intercept|localtimestamp|current_schema|opendatasource|position_regex|deterministic|timezone_hour|authorization|xmlattributes|corresponding|xmlnamespaces|fulltexttable|containstable|securityaudit|freetexttable|current_date|width_bucket|specifictype|session_user|intersection|percent_rank|sqlexception|current_path|current_role|current_time|xmlserialize|octet_length|nonclustered|current_user|reconfigure|xmlvalidate|cardinality|replication|try_convert|char_length|xmldocument|tablesample|identitycol|system_user|referencing|translation|submultiset|diagnostics|insensitive|distributed|constructor|constraints|stddev_samp|transaction|fillfactor|completion|destructor|descriptor|connection|dictionary|disconnect|initialize|statistics|sqlwarning|stddev_pop|constraint|references|privileges|parameters|deferrable|covar_samp|asymmetric|deallocate|asensitive|checkpoint|regr_count|xmlcomment|regr_slope|updatetext|like_regex|xmliterate|ordinality|openrowset|rowguidcol|xmlelement|bit_length|parameter|temporary|immediate|initially|cume_dist|symmetric|recursive|timestamp|substring|collation|regr_avgy|normalize|covar_pop|indicator|raiserror|structure|procedure|intersect|terminate|isolation|savepoint|precision|condition|openquery|assertion|translate|aggregate|operation|xmlconcat|character|xmlexists|partition|clustered|sensitive|exception|statement|xmlbinary|localtime|xmlforest|regr_avgx|writetext|smallint|shutdown|specific|allocate|overlaps|sqlstate|coalesce|sequence|xmlparse|external|distinct|truncate|absolute|position|sqlerror|xmlquery|xmltable|cascaded|rowcount|preorder|preserve|describe|rollback|freetext|regr_sxy|interval|restrict|continue|function|modifies|trailing|readtext|whenever|relative|deferred|multiset|regr_sxx|grouping|textsize|database|end-exec|var_samp|regr_syy|identity|national|variable|holdlock|contains|language|breadth|include|varying|varchar|waitfor|regr_r2|var_pop|release|unpivot|between|general|restore|integer|unknown|without|returns|cascade|primary|routine|iterate|fortran|foreign|section|overlay|postfix|uescape|lateral|leading|tsequal|xmlcast|catalog|extract|execute|percent|session|partial|setuser|similar|trigger|element|locator|sqlcode|dynamic|collate|nocheck|openxml|collect|compute|destroy|offsets|connect|convert|boolean|numeric|default|declare|decimal|current|natural|xmltext|prepare|window|unnest|called|exists|select|unique|escape|action|filter|nullif|module|object|modify|second|search|except|minute|scroll|schema|errlvl|equals|browse|method|update|member|atomic|option|xmlagg|rollup|double|domain|revoke|output|revert|return|fusion|global|delete|having|before|lineno|pascal|values|binary|system|cursor|column|insert|commit|public|static|ignore|create|prefix|within|backup|result|cross|names|prior|large|cycle|begin|usage|pivot|range|table|reads|input|close|inout|inner|while|index|where|level|limit|using|value|treat|class|group|grant|local|depth|check|deref|lower|state|print|write|start|upper|outer|right|xmlpi|match|order|found|sqlca|array|float|space|catch|under|first|alter|scope|alias|after|admin|throw|month|nchar|fetch|false|every|break|nclob|union|merge|count|zone|exit|file|save|size|rule|some|rows|both|else|bulk|blob|each|dump|drop|free|role|from|full|disk|call|desc|view|when|deny|goto|hold|dbcc|host|hour|real|date|read|data|proc|into|cube|than|then|with|time|join|kill|last|user|left|corr|tran|plan|less|like|clob|path|load|trim|work|char|over|sets|cast|case|only|null|none|year|next|open|exec|true|are|top|use|not|day|sum|dec|sql|end|set|for|row|get|bit|ada|add|mod|ref|int|new|off|key|old|pad|map|out|all|avg|max|and|asc|any|min|try|as|at|on|or|ln|is|of|in|if|go|to|no|by)\b">
    
  50.         <token type="Keyword"/>
    
  51.       </rule>
    
  52.       <rule pattern="(\[)([^]]+)(\])">
    
  53.         <bygroups>
    
  54.           <token type="Operator"/>
    
  55.           <token type="Name"/>
    
  56.           <token type="Operator"/>
    
  57.         </bygroups>
    
  58.       </rule>
    
  59.       <rule pattern="0x[0-9a-f]+">
    
  60.         <token type="LiteralNumberHex"/>
    
  61.       </rule>
    
  62.       <rule pattern="[0-9]+\.[0-9]*(e[+-]?[0-9]+)?">
    
  63.         <token type="LiteralNumberFloat"/>
    
  64.       </rule>
    
  65.       <rule pattern="\.[0-9]+(e[+-]?[0-9]+)?">
    
  66.         <token type="LiteralNumberFloat"/>
    
  67.       </rule>
    
  68.       <rule pattern="[0-9]+e[+-]?[0-9]+">
    
  69.         <token type="LiteralNumberFloat"/>
    
  70.       </rule>
    
  71.       <rule pattern="[0-9]+">
    
  72.         <token type="LiteralNumberInteger"/>
    
  73.       </rule>
    
  74.       <rule pattern="[;(),.]">
    
  75.         <token type="Punctuation"/>
    
  76.       </rule>
    
  77.       <rule pattern="@@\w+">
    
  78.         <token type="NameBuiltin"/>
    
  79.       </rule>
    
  80.       <rule pattern="@\w+">
    
  81.         <token type="NameVariable"/>
    
  82.       </rule>
    
  83.       <rule pattern="(\w+)(:)">
    
  84.         <bygroups>
    
  85.           <token type="NameLabel"/>
    
  86.           <token type="Punctuation"/>
    
  87.         </bygroups>
    
  88.       </rule>
    
  89.       <rule pattern="#?#?\w+">
    
  90.         <token type="Name"/>
    
  91.       </rule>
    
  92.       <rule pattern="\?">
    
  93.         <token type="NameVariableMagic"/>
    
  94.       </rule>
    
  95.     </state>
    
  96.     <state name="multiline-comments">
    
  97.       <rule pattern="/\*">
    
  98.         <token type="CommentMultiline"/>
    
  99.         <push state="multiline-comments"/>
    
  100.       </rule>
    
  101.       <rule pattern="\*/">
    
  102.         <token type="CommentMultiline"/>
    
  103.         <pop depth="1"/>
    
  104.       </rule>
    
  105.       <rule pattern="[^/*]+">
    
  106.         <token type="CommentMultiline"/>
    
  107.       </rule>
    
  108.       <rule pattern="[/*]">
    
  109.         <token type="CommentMultiline"/>
    
  110.       </rule>
    
  111.     </state>
    
  112.     <state name="string">
    
  113.       <rule pattern="[^&#39;]+">
    
  114.         <token type="LiteralStringSingle"/>
    
  115.       </rule>
    
  116.       <rule pattern="&#39;&#39;">
    
  117.         <token type="LiteralStringSingle"/>
    
  118.       </rule>
    
  119.       <rule pattern="&#39;">
    
  120.         <token type="LiteralStringSingle"/>
    
  121.         <pop depth="1"/>
    
  122.       </rule>
    
  123.     </state>
    
  124.     <state name="quoted-ident">
    
  125.       <rule pattern="[^&#34;]+">
    
  126.         <token type="LiteralStringName"/>
    
  127.       </rule>
    
  128.       <rule pattern="&#34;&#34;">
    
  129.         <token type="LiteralStringName"/>
    
  130.       </rule>
    
  131.       <rule pattern="&#34;">
    
  132.         <token type="LiteralStringName"/>
    
  133.         <pop depth="1"/>
    
  134.       </rule>
    
  135.     </state>
    
  136.   </rules>
    
  137. </lexer>