1<lexer>
 2  <config>
 3    <name>cfstatement</name>
 4    <alias>cfs</alias>
 5    <case_insensitive>true</case_insensitive>
 6    <not_multiline>true</not_multiline>
 7  </config>
 8  <rules>
 9    <state name="root">
10      <rule pattern="//.*?\n">
11        <token type="CommentSingle"/>
12      </rule>
13      <rule pattern="/\*(?:.|\n)*?\*/">
14        <token type="CommentMultiline"/>
15      </rule>
16      <rule pattern="\+\+|--">
17        <token type="Operator"/>
18      </rule>
19      <rule pattern="[-+*/^&=!]">
20        <token type="Operator"/>
21      </rule>
22      <rule pattern="<=|>=|<|>|==">
23        <token type="Operator"/>
24      </rule>
25      <rule pattern="mod\b">
26        <token type="Operator"/>
27      </rule>
28      <rule pattern="(eq|lt|gt|lte|gte|not|is|and|or)\b">
29        <token type="Operator"/>
30      </rule>
31      <rule pattern="\|\||&&">
32        <token type="Operator"/>
33      </rule>
34      <rule pattern="\?">
35        <token type="Operator"/>
36      </rule>
37      <rule pattern=""">
38        <token type="LiteralStringDouble"/>
39        <push state="string"/>
40      </rule>
41      <rule pattern="'.*?'">
42        <token type="LiteralStringSingle"/>
43      </rule>
44      <rule pattern="\d+">
45        <token type="LiteralNumber"/>
46      </rule>
47      <rule pattern="(if|else|len|var|xml|default|break|switch|component|property|function|do|try|catch|in|continue|for|return|while|required|any|array|binary|boolean|component|date|guid|numeric|query|string|struct|uuid|case)\b">
48        <token type="Keyword"/>
49      </rule>
50      <rule pattern="(true|false|null)\b">
51        <token type="KeywordConstant"/>
52      </rule>
53      <rule pattern="(application|session|client|cookie|super|this|variables|arguments)\b">
54        <token type="NameConstant"/>
55      </rule>
56      <rule pattern="([a-z_$][\w.]*)(\s*)(\()">
57        <bygroups>
58          <token type="NameFunction"/>
59          <token type="Text"/>
60          <token type="Punctuation"/>
61        </bygroups>
62      </rule>
63      <rule pattern="[a-z_$][\w.]*">
64        <token type="NameVariable"/>
65      </rule>
66      <rule pattern="[()\[\]{};:,.\\]">
67        <token type="Punctuation"/>
68      </rule>
69      <rule pattern="\s+">
70        <token type="Text"/>
71      </rule>
72    </state>
73    <state name="string">
74      <rule pattern="""">
75        <token type="LiteralStringDouble"/>
76      </rule>
77      <rule pattern="#.+?#">
78        <token type="LiteralStringInterpol"/>
79      </rule>
80      <rule pattern="[^"#]+">
81        <token type="LiteralStringDouble"/>
82      </rule>
83      <rule pattern="#">
84        <token type="LiteralStringDouble"/>
85      </rule>
86      <rule pattern=""">
87        <token type="LiteralStringDouble"/>
88        <pop depth="1"/>
89      </rule>
90    </state>
91  </rules>
92</lexer>