1+ <lexer >
2+ <config >
3+ <name >JSONata</name >
4+ <alias >jsonata</alias >
5+ <filename >*.jsonata</filename >
6+ <dot_all >true</dot_all >
7+ </config >
8+ <rules >
9+ <state name =" root" >
10+ <rule pattern =" /\*.*?\*/" >
11+ <token type =" CommentMultiline" />
12+ </rule >
13+ <rule pattern =" [{}()\[\]:;,\.=]" >
14+ <token type =" Punctuation" />
15+ </rule >
16+ <rule pattern =" \.\." > // Spread operator
17+ <token type =" Operator" />
18+ </rule >
19+ <rule pattern =" \^(?=\()" > // Sort operator
20+ <token type =" Operator" />
21+ </rule >
22+ <rule pattern =" \*\*|\*(?=\.)|\*" > // Descendant | Wildcard | Multiplication
23+ <token type =" Operator" />
24+ </rule >
25+ <rule pattern =" \/(?!\*)" > // Division
26+ <token type =" Operator" />
27+ </rule >
28+ <rule pattern =" [<> !]=?" > // Comparison operators
29+ <token type =" Operator" />
30+ </rule >
31+ <rule pattern =" ~>" >
32+ <token type =" Operator" />
33+ </rule >
34+ <rule pattern =" \b(and|or|in)\b" >
35+ <token type =" Operator" />
36+ </rule >
37+ <rule pattern =" [%@#& ?]|\+(?!\d)|\-(?!\d)" >
38+ <token type =" Operator" />
39+ </rule >
40+ <rule pattern =" \$[a-zA-Z0-9_]*(?![\w\(])" >
41+ <token type =" NameVariable" />
42+ </rule >
43+ <rule pattern =" \$\w*(?=\()" >
44+ <token type =" NameFunction" />
45+ </rule >
46+ <rule pattern =" \s+" >
47+ <token type =" Text" />
48+ </rule >
49+ <rule pattern =" (true|false)\b" >
50+ <token type =" KeywordConstant" />
51+ </rule >
52+ <rule pattern =" \b(function)\b" >
53+ <token type =" Keyword" />
54+ </rule >
55+ <rule pattern =" (\+|-)?(0|[1-9]\d*)(\.\d+[eE](\+|-)?\d+|[eE](\+|-)?\d+|\.\d+)" >
56+ <token type =" LiteralNumberFloat" />
57+ </rule >
58+ <rule pattern =" (\+|-)?(0|[1-9]\d*)" >
59+ <token type =" LiteralNumberInteger" />
60+ </rule >
61+ <!-- NOTE: This expression matches all object keys (NameTags), which are essentially strings with double quotes
62+ that should only be captured on the left side of a colon (:) within a JSON-like object.
63+ Therefore, this expression must preceed the one for all LiteralStringDouble -->
64+ <rule pattern =" " (\\.|[^\\" \r\n])*" (?=\s*:)" >
65+ <token type =" NameTag" />
66+ </rule >
67+ <rule pattern =" " (\\\\|\\" |[^" ])*" " >
68+ <token type =" LiteralStringDouble" />
69+ </rule >
70+ <rule pattern =" ' (\\|\\' |[^' ])*' " >
71+ <token type =" LiteralStringSingle" />
72+ </rule >
73+ <rule pattern =" `.*`" >
74+ <token type =" LiteralStringBacktick" />
75+ </rule >
76+ <!-- NOTE: This expression matches everything remaining, which should be only JSONata names.
77+ Therefore, it has been left as last intentionally -->
78+ <rule pattern =" [a-zA-Z0-9_]*" >
79+ <token type =" Name" />
80+ </rule >
81+ </state >
82+ </rules >
83+ </lexer >
0 commit comments