<lexer> <config> <name>PSL</name> <alias>psl</alias> <filename>*.psl</filename> <filename>*.BATCH</filename> <filename>*.TRIG</filename> <filename>*.PROC</filename> <mime_type>text/x-psl</mime_type> </config> <rules> <!-- NameFunction|TypeName --> <state name="root"> <rule pattern="[^\S\n]+"> <token type="Text"/> </rule> <rule pattern="\\\n"> <token type="Text"/> </rule> <rule pattern="\n"> <token type="Text"/> </rule> <rule pattern="//.*$"> <token type="CommentSingle"/> </rule> <rule pattern="/(\\\n)?[*](.|\n)*?[*](\\\n)?/"> <token type="CommentMultiline"/> </rule> <rule pattern="\+|-|\*|\/|\b%\b|<|>|=|'|\band\b|\bor\b|_|:|!"> <token type="Operator"/> </rule> <rule pattern="[{}(,)\[\]]"> <token type="Punctuation"/> <push state="root"/> </rule> <rule pattern="#"> <token type="KeywordPseudo"/> <push state="directive"/> </rule> <rule pattern="\.?\d+"> <token type="LiteralNumber"/> </rule> <rule pattern="""> <token type="LiteralString"/> <push state="string"/> </rule> <rule pattern="\b(do|set|if|else|for|while|quit|catch|return|ret|while)\b"> <token type="Keyword"/> </rule> <rule pattern="\b(true|false)\b"> <token type="KeywordConstant"/> </rule> <rule pattern="\btype\b"> <token type="KeywordDeclaration"/> <push state="typename"/> </rule> <rule pattern="\b(public|req|private|void)\b"> <token type="KeywordDeclaration"/> </rule> <rule pattern="\b(Boolean|String|Number|Date)\b"> <token type="KeywordType"/> </rule> <rule pattern="(\${0,2}[_a-zA-z]\w*)?(\^[_a-zA-Z]\w*)"> <bygroups> <token type="NameFunction"/> <token type="NameClass"/> </bygroups> </rule> <rule pattern="([_a-zA-z]\w*)(\.[_a-zA-Z]\w*)(\()"> <bygroups> <token type="Name"/> <token type="NameFunction"/> <token type="Punctuation"/> </bygroups> </rule> <rule pattern="(\${0,2}[_a-zA-z]\w*)(\.[_a-zA-Z]\w*)"> <bygroups> <token type="Name"/> <token type="NameProperty"/> </bygroups> </rule> <rule pattern="\.?(%|\${0,2})[_a-zA-Z]\w*"> <token type="Name"/> </rule> </state> <state name="string"> <rule pattern="""> <token type="LiteralString"/> <pop depth="1"/> </rule> <rule pattern="\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})"> <token type="LiteralStringEscape"/> </rule> <rule pattern="[^\\"\n]+"> <token type="LiteralString"/> </rule> <rule pattern="\\\n"> <token type="LiteralString"/> </rule> <rule pattern="\\"> <token type="LiteralString"/> </rule> </state> <state name="typename"> <rule pattern="\s+"> <token type="Text"/> </rule> <rule pattern="\b(public|req|private|void)\b"> <token type="KeywordDeclaration"/> </rule> <rule pattern="([_a-zA-Z]\w*)?(\s+)([_a-zA-Z]\w*)"> <bygroups> <token type="NameClass"/> <token type="Text"/> <token type="Name"/> </bygroups> <pop depth="1"/> </rule> <rule> <pop depth="1"/> </rule> </state> <state name="directive"> <rule pattern="ACCEPT"> <token type="KeywordPseudo"/> <push state="accept-directive"/> </rule> <rule pattern="CLASSDEF"> <token type="KeywordPseudo"/> <push state="classdef-directive"/> </rule> <rule pattern="IF|ELSEIF"> <token type="KeywordPseudo"/> <push state="if-directive"/> </rule> <rule pattern="PACKAGE"> <token type="KeywordPseudo"/> <push state="package-directive"/> </rule> <rule pattern="PROPERTYDEF"> <token type="KeywordPseudo"/> <pop depth="1"/> </rule> <rule pattern="INFO|WARN"> <token type="KeywordPseudo"/> <push state="warn-directive"/> </rule> <rule pattern="OPTION"> <token type="KeywordPseudo"/> <push state="option-directive"/> </rule> <rule pattern="BYPASS|ELSE|END|ENDBYPASS|ENDIF|OPTIMIZE"> <token type="KeywordPseudo"/> <push state="other-directive"/> </rule> </state> <state name="accept-directive"> <rule pattern=".+$"> <token type="CommentSingle"/> </rule> </state> <state name="other-directive"> <rule pattern=".+$"> <token type="CommentSingle"/> </rule> </state> <state name="classdef-directive"> <rule pattern="\s+"> <token type="Text"/> </rule> <rule pattern="delimiter|extends"> <token type="Keyword"/> </rule> <rule pattern="public"> <token type="KeywordDeclaration"/> </rule> <rule pattern="="> <token type="Operator"/> </rule> <rule pattern="[\w\d]+"> <token type="NameClass"/> </rule> </state> <state name="if-directive"> <rule pattern=".+$"> <include state="root"/> </rule> </state> <state name="option-directive"> <rule pattern="\s+"> <token type="Text"/> </rule> <rule pattern="ON|OFF"> <token type="KeywordConstant"/> <pop depth="1"/> </rule> <rule pattern="[\w\d]+"> <token type="Name"/> </rule> </state> <state name="package-directive"> <rule pattern="\s+"> <token type="Text"/> </rule> <rule pattern="\w+"> <token type="Name"/> </rule> <rule> <include state="root"/> </rule> </state> </rules> </lexer>