1<lexer>
2 <config>
3 <name>PRQL</name>
4 <alias>prql</alias>
5 <filename>*.prql</filename>
6 <mime_type>application/prql</mime_type>
7 </config>
8 <rules>
9 <state name="root">
10 <rule pattern="#!.*"><token type="LiteralStringDoc"/></rule>
11 <rule pattern="#.*"><token type="CommentSingle"/></rule>
12 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
13 <rule pattern="^(\s*)(module)(\s*)"><bygroups><token type="TextWhitespace"/><token type="KeywordNamespace"/><token type="TextWhitespace"/></bygroups><push state="imports"/></rule>
14 <rule pattern="(bool|int|int8|int16|int32|int64|int128|float|text|set)\b"><token type="KeywordType"/></rule>
15 <rule pattern="^prql "><token type="KeywordReserved"/></rule>
16 <rule pattern="let"><token type="KeywordDeclaration"/></rule>
17 <rule><include state="keywords"/></rule>
18 <rule><include state="expr"/></rule>
19 <rule pattern="^[A-Za-z_][a-zA-Z0-9_]*"><token type="Keyword"/></rule>
20 </state>
21 <state name="expr">
22 <rule pattern="(f)(""")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringDouble"/></bygroups><combined state="fstringescape" state="tdqf"/></rule>
23 <rule pattern="(f)(''')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringSingle"/></bygroups><combined state="fstringescape" state="tsqf"/></rule>
24 <rule pattern="(f)(")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringDouble"/></bygroups><combined state="fstringescape" state="dqf"/></rule>
25 <rule pattern="(f)(')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringSingle"/></bygroups><combined state="fstringescape" state="sqf"/></rule>
26 <rule pattern="(s)(""")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringDouble"/></bygroups><combined state="stringescape" state="tdqf"/></rule>
27 <rule pattern="(s)(''')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringSingle"/></bygroups><combined state="stringescape" state="tsqf"/></rule>
28 <rule pattern="(s)(")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringDouble"/></bygroups><combined state="stringescape" state="dqf"/></rule>
29 <rule pattern="(s)(')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringSingle"/></bygroups><combined state="stringescape" state="sqf"/></rule>
30 <rule pattern="(?i)(r)(""")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringDouble"/></bygroups><push state="tdqs"/></rule>
31 <rule pattern="(?i)(r)(''')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringSingle"/></bygroups><push state="tsqs"/></rule>
32 <rule pattern="(?i)(r)(")"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringDouble"/></bygroups><push state="dqs"/></rule>
33 <rule pattern="(?i)(r)(')"><bygroups><token type="LiteralStringAffix"/><token type="LiteralStringSingle"/></bygroups><push state="sqs"/></rule>
34 <rule pattern="""""><token type="LiteralStringDouble"/><combined state="stringescape" state="tdqs"/></rule>
35 <rule pattern="'''"><token type="LiteralStringSingle"/><combined state="stringescape" state="tsqs"/></rule>
36 <rule pattern="""><token type="LiteralStringDouble"/><combined state="stringescape" state="dqs"/></rule>
37 <rule pattern="'"><token type="LiteralStringSingle"/><combined state="stringescape" state="sqs"/></rule>
38 <rule pattern="@\d{4}-\d{2}-\d{2}T\d{2}(:\d{2})?(:\d{2})?(\.\d{1,6})?(Z|[+-]\d{1,2}(:\d{1,2})?)?"><token type="LiteralDate"/></rule>
39 <rule pattern="@\d{4}-\d{2}-\d{2}"><token type="LiteralDate"/></rule>
40 <rule pattern="@\d{2}(:\d{2})?(:\d{2})?(\.\d{1,6})?(Z|[+-]\d{1,2}(:\d{1,2})?)?"><token type="LiteralDate"/></rule>
41 <rule pattern="[^\S\n]+"><token type="Text"/></rule>
42 <rule><include state="numbers"/></rule>
43 <rule pattern="->|=>|==|!=|>=|<=|~=|&&|\|\||\?\?|\/\/"><token type="Operator"/></rule>
44 <rule pattern="[-~+/*%=<>&^|.@]"><token type="Operator"/></rule>
45 <rule pattern="[]{}:(),;[]"><token type="Punctuation"/></rule>
46 <rule><include state="functions"/></rule>
47 <rule pattern="[A-Za-z_][a-zA-Z0-9_]*"><token type="NameVariable"/></rule>
48 </state>
49 <state name="numbers">
50 <rule pattern="(\d(?:_?\d)*\.(?:\d(?:_?\d)*)?|(?:\d(?:_?\d)*)?\.\d(?:_?\d)*)([eE][+-]?\d(?:_?\d)*)?"><token type="LiteralNumberFloat"/></rule>
51 <rule pattern="\d(?:_?\d)*[eE][+-]?\d(?:_?\d)*j?"><token type="LiteralNumberFloat"/></rule>
52 <rule pattern="0[oO](?:_?[0-7])+"><token type="LiteralNumberOct"/></rule>
53 <rule pattern="0[bB](?:_?[01])+"><token type="LiteralNumberBin"/></rule>
54 <rule pattern="0[xX](?:_?[a-fA-F0-9])+"><token type="LiteralNumberHex"/></rule>
55 <rule pattern="\d(?:_?\d)*"><token type="LiteralNumberInteger"/></rule>
56 </state>
57 <state name="fstringescape">
58 <rule><include state="stringescape"/></rule>
59 </state>
60 <state name="bytesescape">
61 <rule pattern="\\([\\bfnrt"\']|\n|x[a-fA-F0-9]{2}|[0-7]{1,3})"><token type="LiteralStringEscape"/></rule>
62 </state>
63 <state name="stringescape">
64 <rule pattern="\\(N\{.*?\}|u\{[a-fA-F0-9]{1,6}\})"><token type="LiteralStringEscape"/></rule>
65 <rule><include state="bytesescape"/></rule>
66 </state>
67 <state name="fstrings-single">
68 <rule pattern="\}"><token type="LiteralStringInterpol"/></rule>
69 <rule pattern="\{"><token type="LiteralStringInterpol"/><push state="expr-inside-fstring"/></rule>
70 <rule pattern="[^\\\'"{}\n]+"><token type="LiteralStringSingle"/></rule>
71 <rule pattern="[\'"\\]"><token type="LiteralStringSingle"/></rule>
72 </state>
73 <state name="fstrings-double">
74 <rule pattern="\}"><token type="LiteralStringInterpol"/></rule>
75 <rule pattern="\{"><token type="LiteralStringInterpol"/><push state="expr-inside-fstring"/></rule>
76 <rule pattern="[^\\\'"{}\n]+"><token type="LiteralStringDouble"/></rule>
77 <rule pattern="[\'"\\]"><token type="LiteralStringDouble"/></rule>
78 </state>
79 <state name="strings-single">
80 <rule pattern="\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}"><token type="LiteralStringInterpol"/></rule>
81 <rule pattern="[^\\\'"%{\n]+"><token type="LiteralStringSingle"/></rule>
82 <rule pattern="[\'"\\]"><token type="LiteralStringSingle"/></rule>
83 <rule pattern="%|(\{{1,2})"><token type="LiteralStringSingle"/></rule>
84 </state>
85 <state name="strings-double">
86 <rule pattern="\{((\w+)((\.\w+)|(\[[^\]]+\]))*)?(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[E-GXb-gnosx%]?)?\}"><token type="LiteralStringInterpol"/></rule>
87 <rule pattern="[^\\\'"%{\n]+"><token type="LiteralStringDouble"/></rule>
88 <rule pattern="[\'"\\]"><token type="LiteralStringDouble"/></rule>
89 <rule pattern="%|(\{{1,2})"><token type="LiteralStringDouble"/></rule>
90 </state>
91 <state name="dqf">
92 <rule pattern="""><token type="LiteralStringDouble"/><pop depth="1"/></rule>
93 <rule pattern="\\\\|\\"|\\\n"><token type="LiteralStringEscape"/></rule>
94 <rule><include state="fstrings-double"/></rule>
95 </state>
96 <state name="sqf">
97 <rule pattern="'"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
98 <rule pattern="\\\\|\\'|\\\n"><token type="LiteralStringEscape"/></rule>
99 <rule><include state="fstrings-single"/></rule>
100 </state>
101 <state name="dqs">
102 <rule pattern="""><token type="LiteralStringDouble"/><pop depth="1"/></rule>
103 <rule pattern="\\\\|\\"|\\\n"><token type="LiteralStringEscape"/></rule>
104 <rule><include state="strings-double"/></rule>
105 </state>
106 <state name="sqs">
107 <rule pattern="'"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
108 <rule pattern="\\\\|\\'|\\\n"><token type="LiteralStringEscape"/></rule>
109 <rule><include state="strings-single"/></rule>
110 </state>
111 <state name="tdqf">
112 <rule pattern="""""><token type="LiteralStringDouble"/><pop depth="1"/></rule>
113 <rule><include state="fstrings-double"/></rule>
114 <rule pattern="\n"><token type="LiteralStringDouble"/></rule>
115 </state>
116 <state name="tsqf">
117 <rule pattern="'''"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
118 <rule><include state="fstrings-single"/></rule>
119 <rule pattern="\n"><token type="LiteralStringSingle"/></rule>
120 </state>
121 <state name="tdqs">
122 <rule pattern="""""><token type="LiteralStringDouble"/><pop depth="1"/></rule>
123 <rule><include state="strings-double"/></rule>
124 <rule pattern="\n"><token type="LiteralStringDouble"/></rule>
125 </state>
126 <state name="tsqs">
127 <rule pattern="'''"><token type="LiteralStringSingle"/><pop depth="1"/></rule>
128 <rule><include state="strings-single"/></rule>
129 <rule pattern="\n"><token type="LiteralStringSingle"/></rule>
130 </state>
131 <state name="expr-inside-fstring">
132 <rule pattern="[{([]"><token type="Punctuation"/><push state="expr-inside-fstring-inner"/></rule>
133 <rule pattern="(=\s*)?\}"><token type="LiteralStringInterpol"/><pop depth="1"/></rule>
134 <rule pattern="(=\s*)?:"><token type="LiteralStringInterpol"/><pop depth="1"/></rule>
135 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
136 <rule><include state="expr"/></rule>
137 </state>
138 <state name="expr-inside-fstring-inner">
139 <rule pattern="[{([]"><token type="Punctuation"/><push state="expr-inside-fstring-inner"/></rule>
140 <rule pattern="[])}]"><token type="Punctuation"/><pop depth="1"/></rule>
141 <rule pattern="\s+"><token type="TextWhitespace"/></rule>
142 <rule><include state="expr"/></rule>
143 </state>
144 <state name="keywords">
145 <rule pattern="(into|case|type|module|internal)\b"><token type="Keyword"/></rule>
146 <rule pattern="(true|false|null)\b"><token type="KeywordConstant"/></rule>
147 </state>
148 <state name="functions">
149 <rule pattern="(min|max|sum|average|stddev|every|any|concat_array|count|lag|lead|first|last|rank|rank_dense|row_number|round|as|in|tuple_every|tuple_map|tuple_zip|_eq|_is_null|from_text|lower|upper|read_parquet|read_csv)\b"><token type="NameFunction"/></rule>
150 </state>
151 <state name="comment">
152 <rule pattern="-(?!\})"><token type="CommentMultiline"/></rule>
153 <rule pattern="\{-"><token type="CommentMultiline"/><push state="comment"/></rule>
154 <rule pattern="[^-}]"><token type="CommentMultiline"/></rule>
155 <rule pattern="-\}"><token type="CommentMultiline"/><pop depth="1"/></rule>
156 </state>
157 <state name="imports">
158 <rule pattern="\w+(\.\w+)*"><token type="NameClass"/><pop depth="1"/></rule>
159 </state>
160 </rules>
161</lexer>