psl.xml

  1<lexer>
  2  <config>
  3    <name>PSL</name>
  4    <alias>psl</alias>
  5    <filename>*.psl</filename>
  6    <filename>*.BATCH</filename>
  7    <filename>*.TRIG</filename>
  8    <filename>*.PROC</filename>
  9    <mime_type>text/x-psl</mime_type>
 10  </config>
 11  <rules>
 12  <!-- NameFunction|TypeName -->
 13    <state name="root">
 14      <rule pattern="[^\S\n]+">
 15        <token type="Text"/>
 16      </rule>
 17      <rule pattern="\\\n">
 18        <token type="Text"/>
 19      </rule>
 20      <rule pattern="\n">
 21        <token type="Text"/>
 22      </rule>
 23      <rule pattern="//.*$">
 24        <token type="CommentSingle"/>
 25      </rule>
 26      <rule pattern="/(\\\n)?[*](.|\n)*?[*](\\\n)?/">
 27        <token type="CommentMultiline"/>
 28      </rule>
 29      <rule pattern="\+|-|\*|\/|\b%\b|&lt;|&gt;|=|'|\band\b|\bor\b|_|:|!">
 30        <token type="Operator"/>
 31      </rule>
 32      <rule pattern="[{}(,)\[\]]">
 33        <token type="Punctuation"/>
 34        <push state="root"/>
 35      </rule>
 36      <rule pattern="#">
 37        <token type="KeywordPseudo"/>
 38        <push state="directive"/>
 39      </rule>
 40      <rule pattern="\.?\d+">
 41        <token type="LiteralNumber"/>
 42      </rule>
 43      <rule pattern="&quot;">
 44        <token type="LiteralString"/>
 45        <push state="string"/>
 46      </rule>
 47      <rule pattern="\b(do|set|if|else|for|while|quit|catch|return|ret|while)\b">
 48        <token type="Keyword"/>
 49      </rule>
 50      <rule pattern="\b(true|false)\b">
 51        <token type="KeywordConstant"/>
 52      </rule>
 53      <rule pattern="\btype\b">
 54        <token type="KeywordDeclaration"/>
 55        <push state="typename"/>
 56      </rule>
 57      <rule pattern="\b(public|req|private|void)\b">
 58        <token type="KeywordDeclaration"/>
 59      </rule>
 60      <rule pattern="\b(Boolean|String|Number|Date)\b">
 61        <token type="KeywordType"/>
 62      </rule>
 63      <rule pattern="(\${0,2}[_a-zA-z]\w*)?(\^[_a-zA-Z]\w*)">
 64        <bygroups>
 65          <token type="NameFunction"/>
 66          <token type="NameClass"/>
 67        </bygroups>
 68      </rule>
 69      <rule pattern="([_a-zA-z]\w*)(\.[_a-zA-Z]\w*)(\()">
 70        <bygroups>
 71          <token type="Name"/>
 72          <token type="NameFunction"/>
 73          <token type="Punctuation"/>
 74        </bygroups>
 75      </rule>
 76      <rule pattern="(\${0,2}[_a-zA-z]\w*)(\.[_a-zA-Z]\w*)">
 77        <bygroups>
 78          <token type="Name"/>
 79          <token type="NameProperty"/>
 80        </bygroups>
 81      </rule>
 82      <rule pattern="\.?(%|\${0,2})[_a-zA-Z]\w*">
 83        <token type="Name"/>
 84      </rule>
 85    </state>
 86    <state name="string">
 87      <rule pattern="&quot;">
 88        <token type="LiteralString"/>
 89        <pop depth="1"/>
 90      </rule>
 91      <rule pattern="\\([\\abfnrtv&quot;\&#x27;]|x[a-fA-F0-9]{2,4}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|[0-7]{1,3})">
 92        <token type="LiteralStringEscape"/>
 93      </rule>
 94      <rule pattern="[^\\&quot;\n]+">
 95        <token type="LiteralString"/>
 96      </rule>
 97      <rule pattern="\\\n">
 98        <token type="LiteralString"/>
 99      </rule>
100      <rule pattern="\\">
101        <token type="LiteralString"/>
102      </rule>
103    </state>
104    <state name="typename">
105      <rule pattern="\s+">
106        <token type="Text"/>
107      </rule>
108      <rule pattern="\b(public|req|private|void)\b">
109        <token type="KeywordDeclaration"/>
110      </rule>
111      <rule pattern="([_a-zA-Z]\w*)?(\s+)([_a-zA-Z]\w*)">
112        <bygroups>
113          <token type="NameClass"/>
114          <token type="Text"/>
115          <token type="Name"/>
116        </bygroups>
117        <pop depth="1"/>
118      </rule>
119      <rule>
120        <pop depth="1"/>
121      </rule>
122    </state>
123    <state name="directive">
124      <rule pattern="ACCEPT">
125        <token type="KeywordPseudo"/>
126        <push state="accept-directive"/>
127      </rule>
128      <rule pattern="CLASSDEF">
129        <token type="KeywordPseudo"/>
130        <push state="classdef-directive"/>
131      </rule>
132      <rule pattern="IF|ELSEIF">
133        <token type="KeywordPseudo"/>
134        <push state="if-directive"/>
135      </rule>
136      <rule pattern="PACKAGE">
137        <token type="KeywordPseudo"/>
138        <push state="package-directive"/>
139      </rule>
140      <rule pattern="PROPERTYDEF">
141        <token type="KeywordPseudo"/>
142        <pop depth="1"/>
143      </rule>
144      <rule pattern="INFO|WARN">
145        <token type="KeywordPseudo"/>
146        <push state="warn-directive"/>
147      </rule>
148      <rule pattern="OPTION">
149        <token type="KeywordPseudo"/>
150        <push state="option-directive"/>
151      </rule>
152      <rule pattern="BYPASS|ELSE|END|ENDBYPASS|ENDIF|OPTIMIZE">
153        <token type="KeywordPseudo"/>
154        <push state="other-directive"/>
155      </rule>
156    </state>
157    <state name="accept-directive">
158      <rule pattern=".+$">
159        <token type="CommentSingle"/>
160      </rule>
161    </state>
162    <state name="other-directive">
163      <rule pattern=".+$">
164        <token type="CommentSingle"/>
165      </rule>
166    </state>
167    <state name="classdef-directive">
168      <rule pattern="\s+">
169        <token type="Text"/>
170      </rule>
171      <rule pattern="delimiter|extends">
172        <token type="Keyword"/>
173      </rule>
174      <rule pattern="public">
175        <token type="KeywordDeclaration"/>
176      </rule>
177      <rule pattern="=">
178        <token type="Operator"/>
179      </rule>
180      <rule pattern="[\w\d]+">
181        <token type="NameClass"/>
182      </rule>
183    </state>
184    <state name="if-directive">
185      <rule pattern=".+$">
186        <include state="root"/>
187      </rule>
188    </state>
189    <state name="option-directive">
190      <rule pattern="\s+">
191        <token type="Text"/>
192      </rule>
193      <rule pattern="ON|OFF">
194        <token type="KeywordConstant"/>
195        <pop depth="1"/>
196      </rule>
197      <rule pattern="[\w\d]+">
198        <token type="Name"/>
199      </rule>
200    </state>
201    <state name="package-directive">
202      <rule pattern="\s+">
203        <token type="Text"/>
204      </rule>
205      <rule pattern="\w+">
206        <token type="Name"/>
207      </rule>
208      <rule>
209        <include state="root"/>
210      </rule>
211    </state>
212  </rules>
213</lexer>