1. <lexer>
    
  2.   <config>
    
  3.     <name>PL/pgSQL</name>
    
  4.     <alias>plpgsql</alias>
    
  5.     <mime_type>text/x-plpgsql</mime_type>
    
  6.     <case_insensitive>true</case_insensitive>
    
  7.     <not_multiline>true</not_multiline>
    
  8.   </config>
    
  9.   <rules>
    
  10.     <state name="root">
    
  11.       <rule pattern="\%[a-z]\w*\b">
    
  12.         <token type="NameBuiltin"/>
    
  13.       </rule>
    
  14.       <rule pattern=":=">
    
  15.         <token type="Operator"/>
    
  16.       </rule>
    
  17.       <rule pattern="\&lt;\&lt;[a-z]\w*\&gt;\&gt;">
    
  18.         <token type="NameLabel"/>
    
  19.       </rule>
    
  20.       <rule pattern="\#[a-z]\w*\b">
    
  21.         <token type="KeywordPseudo"/>
    
  22.       </rule>
    
  23.       <rule pattern="\s+">
    
  24.         <token type="TextWhitespace"/>
    
  25.       </rule>
    
  26.       <rule pattern="--.*\n?">
    
  27.         <token type="CommentSingle"/>
    
  28.       </rule>
    
  29.       <rule pattern="/\*">
    
  30.         <token type="CommentMultiline"/>
    
  31.         <push state="multiline-comments"/>
    
  32.       </rule>
    
  33.       <rule pattern="(bigint|bigserial|bit|bit\s+varying|bool|boolean|box|bytea|char|character|character\s+varying|cidr|circle|date|decimal|double\s+precision|float4|float8|inet|int|int2|int4|int8|integer|interval|json|jsonb|line|lseg|macaddr|money|numeric|path|pg_lsn|point|polygon|real|serial|serial2|serial4|serial8|smallint|smallserial|text|time|timestamp|timestamptz|timetz|tsquery|tsvector|txid_snapshot|uuid|varbit|varchar|with\s+time\s+zone|without\s+time\s+zone|xml|anyarray|anyelement|anyenum|anynonarray|anyrange|cstring|fdw_handler|internal|language_handler|opaque|record|void)\b">
    
  34.         <token type="NameBuiltin"/>
    
  35.       </rule>
    
  36.       <rule pattern="(CURRENT_TIMESTAMP|CHARACTERISTICS|CURRENT_CATALOG|CURRENT_SCHEMA|LOCALTIMESTAMP|XMLATTRIBUTES|AUTHORIZATION|CONFIGURATION|CURRENT_TIME|CURRENT_ROLE|CURRENT_USER|CURRENT_DATE|MATERIALIZED|SESSION_USER|SERIALIZABLE|CONCURRENTLY|XMLSERIALIZE|DIAGNOSTICS|UNCOMMITTED|UNENCRYPTED|TRANSACTION|INSENSITIVE|CONSTRAINTS|CONVERSION|ORDINALITY|LC_COLLATE|DEALLOCATE|CONSTRAINT|CONNECTION|PRIVILEGES|PROCEDURAL|STANDALONE|DICTIONARY|XMLELEMENT|STATISTICS|DEFERRABLE|DELIMITERS|REPEATABLE|TABLESPACE|REFERENCES|CHECKPOINT|WHITESPACE|ASYMMETRIC|ASSIGNMENT|CHARACTER|INCLUDING|SYMMETRIC|IMMUTABLE|IMMEDIATE|XMLCONCAT|INTERSECT|ISOLATION|DELIMITER|COLLATION|TIMESTAMP|INCREMENT|ENCRYPTED|PROCEDURE|COMMITTED|SUBSTRING|EXCEPTION|VALIDATOR|UNBOUNDED|PARTITION|ATTRIBUTE|INITIALLY|EXCLUSIVE|SAVEPOINT|XMLEXISTS|ASSERTION|EXTENSION|STATEMENT|RETURNING|LEAKPROOF|RECURSIVE|FUNCTIONS|AGGREGATE|LOCALTIME|FOLLOWING|PRECEDING|PRECISION|SEQUENCES|XMLFOREST|TEMPORARY|EXCLUDING|DATABASE|XMLPARSE|CONTINUE|INHERITS|UNLOGGED|DEFAULTS|COMMENTS|DEFERRED|MINVALUE|TRAILING|VARIADIC|COALESCE|INTERVAL|OVERLAPS|MAXVALUE|IMPLICIT|DISTINCT|VOLATILE|DOCUMENT|SMALLINT|OPERATOR|SEQUENCE|CONSTANT|CASCADED|IDENTITY|ENCODING|SNAPSHOT|TRUNCATE|ROLLBACK|PREPARED|LANGUAGE|UNLISTEN|TEMPLATE|BACKWARD|VALIDATE|NATIONAL|REASSIGN|GREATEST|LC_CTYPE|EXTERNAL|PASSWORD|SECURITY|LOCATION|PRESERVE|FUNCTION|RELATIVE|POSITION|SQLSTATE|ABSOLUTE|RESTRICT|BOOLEAN|FORWARD|UNKNOWN|FOREIGN|RECHECK|NOTHING|NOTNULL|EXTRACT|NATURAL|GRANTED|EXPLAIN|EXECUTE|HANDLER|EXCLUDE|NUMERIC|TRUSTED|VERSION|TRIGGER|VERBOSE|WITHOUT|WRAPPER|OPTIONS|DISCARD|VARYING|DISABLE|DEFINER|DEFAULT|INDEXES|PRIMARY|DECLARE|DECIMAL|PROGRAM|RETURNS|CURRENT|XMLROOT|CONTENT|COMMENT|INSTEAD|COLLATE|INTEGER|CLUSTER|SESSION|VARCHAR|INVOKER|CATALOG|CASCADE|OVERLAY|RESTART|BETWEEN|REPLICA|PARTIAL|REPLACE|FOREACH|LATERAL|PASSING|PERFORM|LEADING|ANALYZE|ANALYSE|SIMILAR|REFRESH|MAPPING|RELEASE|PLACING|REVERSE|REINDEX|STORAGE|INHERIT|PREPARE|UPDATE|VACUUM|RENAME|ISNULL|VALUES|MINUTE|INSERT|INLINE|SCROLL|REVOKE|HEADER|HAVING|TABLES|SYSTEM|GLOBAL|FREEZE|UNIQUE|SCHEMA|SEARCH|FILTER|NOTIFY|SECOND|NOWAIT|FAMILY|NULLIF|EXISTS|EXCEPT|OBJECT|SELECT|ESCAPE|OFFSET|WINDOW|WITHIN|ENABLE|DOUBLE|OPTION|DOMAIN|DELETE|CURSOR|CREATE|SERVER|COMMIT|COLUMN|SIMPLE|CALLED|BINARY|BIGINT|PARSER|STABLE|BEFORE|NOTICE|ALWAYS|STDOUT|RETURN|POLICY|STRICT|ACTION|ACCESS|LISTEN|ABORT|PLANS|MONTH|PRIOR|OWNER|OWNED|OUTER|ORDER|QUOTE|RANGE|TREAT|TYPES|NULLS|UNION|NCHAR|NAMES|UNTIL|MATCH|LOCAL|USING|LIMIT|LEVEL|LEAST|LARGE|LABEL|RESET|VALUE|INPUT|INOUT|INNER|INDEX|RIGHT|ILIKE|VIEWS|GROUP|TABLE|GRANT|WHERE|FORCE|FLOAT|FIRST|FETCH|FALSE|EVENT|WRITE|CYCLE|CROSS|XMLPI|CLOSE|CLASS|SYSID|SETOF|SHARE|CHECK|WHILE|CHAIN|ALIAS|CACHE|ELSIF|BEGIN|ARRAY|START|QUERY|RAISE|STDIN|ALTER|AFTER|ADMIN|STRIP|VALID|WORK|ALSO|RULE|ROWS|OPEN|ROLE|TEMP|LOOP|REAL|TEXT|THEN|TIME|READ|SOME|OVER|EXIT|BOTH|ONLY|TRIM|TRUE|CASE|OIDS|TYPE|CAST|ZONE|NULL|YEAR|NONE|CHAR|NEXT|NAME|MOVE|MODE|LOCK|USER|LOAD|LIKE|LEFT|LAST|COST|JOIN|DATA|INTO|DESC|DROP|ELSE|HOUR|VIEW|HOLD|FULL|WHEN|FROM|EACH|ENUM|WITH|SHOW|COPY|OUT|FOR|ADD|XML|ALL|INT|DEC|DAY|SET|CSV|KEY|AND|ANY|NOT|YES|ROW|END|ASC|REF|GET|BIT|OFF|TO|OR|BY|ON|OF|AS|NO|AT|IS|DO|IN|IF)\b">
    
  37.         <token type="Keyword"/>
    
  38.       </rule>
    
  39.       <rule pattern="[+*/&lt;&gt;=~!@#%^&amp;|`?-]+">
    
  40.         <token type="Operator"/>
    
  41.       </rule>
    
  42.       <rule pattern="::">
    
  43.         <token type="Operator"/>
    
  44.       </rule>
    
  45.       <rule pattern="\$\d+">
    
  46.         <token type="NameVariable"/>
    
  47.       </rule>
    
  48.       <rule pattern="([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?">
    
  49.         <token type="LiteralNumberFloat"/>
    
  50.       </rule>
    
  51.       <rule pattern="[0-9]+">
    
  52.         <token type="LiteralNumberInteger"/>
    
  53.       </rule>
    
  54.       <rule pattern="((?:E|U&amp;)?)(&#39;)">
    
  55.         <bygroups>
    
  56.           <token type="LiteralStringAffix"/>
    
  57.           <token type="LiteralStringSingle"/>
    
  58.         </bygroups>
    
  59.         <push state="string"/>
    
  60.       </rule>
    
  61.       <rule pattern="((?:U&amp;)?)(&#34;)">
    
  62.         <bygroups>
    
  63.           <token type="LiteralStringAffix"/>
    
  64.           <token type="LiteralStringName"/>
    
  65.         </bygroups>
    
  66.         <push state="quoted-ident"/>
    
  67.       </rule>
    
  68.       <rule pattern="[a-z_]\w*">
    
  69.         <token type="Name"/>
    
  70.       </rule>
    
  71.       <rule pattern=":([&#39;&#34;]?)[a-z]\w*\b\1">
    
  72.         <token type="NameVariable"/>
    
  73.       </rule>
    
  74.       <rule pattern="[;:()\[\]{},.]">
    
  75.         <token type="Punctuation"/>
    
  76.       </rule>
    
  77.     </state>
    
  78.     <state name="multiline-comments">
    
  79.       <rule pattern="/\*">
    
  80.         <token type="CommentMultiline"/>
    
  81.         <push state="multiline-comments"/>
    
  82.       </rule>
    
  83.       <rule pattern="\*/">
    
  84.         <token type="CommentMultiline"/>
    
  85.         <pop depth="1"/>
    
  86.       </rule>
    
  87.       <rule pattern="[^/*]+">
    
  88.         <token type="CommentMultiline"/>
    
  89.       </rule>
    
  90.       <rule pattern="[/*]">
    
  91.         <token type="CommentMultiline"/>
    
  92.       </rule>
    
  93.     </state>
    
  94.     <state name="string">
    
  95.       <rule pattern="[^&#39;]+">
    
  96.         <token type="LiteralStringSingle"/>
    
  97.       </rule>
    
  98.       <rule pattern="&#39;&#39;">
    
  99.         <token type="LiteralStringSingle"/>
    
  100.       </rule>
    
  101.       <rule pattern="&#39;">
    
  102.         <token type="LiteralStringSingle"/>
    
  103.         <pop depth="1"/>
    
  104.       </rule>
    
  105.     </state>
    
  106.     <state name="quoted-ident">
    
  107.       <rule pattern="[^&#34;]+">
    
  108.         <token type="LiteralStringName"/>
    
  109.       </rule>
    
  110.       <rule pattern="&#34;&#34;">
    
  111.         <token type="LiteralStringName"/>
    
  112.       </rule>
    
  113.       <rule pattern="&#34;">
    
  114.         <token type="LiteralStringName"/>
    
  115.         <pop depth="1"/>
    
  116.       </rule>
    
  117.     </state>
    
  118.   </rules>
    
  119. </lexer>