ll_sparql_parser/syntax_kind/
generated.rs

1use logos::Logos;
2
3#[allow(non_camel_case_types)]
4#[derive(Logos, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)]
5#[repr(u16)]
6pub enum SyntaxKind {
7    Eof = 0,
8    Error,
9    #[regex(r"[ \t\n\r\f]+")]
10    WHITESPACE,
11    #[regex(r"#[^\n]*", allow_greedy = true)]
12    Comment,
13    #[token("BASE", ignore(case))]
14    BASE,
15    #[regex(r#"<[^<>\"{}|^`\\\u{00}-\u{20}]*>"#)]
16    IRIREF,
17    #[token("PREFIX", ignore(case))]
18    PREFIX,
19    #[regex("[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}]([A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}_.-]*[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}_-])?:")]
20    PNAME_NS,
21    #[token("SELECT", ignore(case))]
22    SELECT,
23    #[token("DISTINCT", ignore(case))]
24    DISTINCT,
25    #[token("REDUCED", ignore(case))]
26    REDUCED,
27    #[token("(")]
28    LParen,
29    #[token("AS", ignore(case))]
30    AS,
31    #[token(")")]
32    RParen,
33    #[token("*")]
34    Star,
35    #[token("CONSTRUCT", ignore(case))]
36    CONSTRUCT,
37    #[token("WHERE", ignore(case))]
38    WHERE,
39    #[token("{")]
40    LCurly,
41    #[token("}")]
42    RCurly,
43    #[token("DESCRIBE", ignore(case))]
44    DESCRIBE,
45    #[token("ASK", ignore(case))]
46    ASK,
47    #[token("FROM", ignore(case))]
48    FROM,
49    #[token("NAMED", ignore(case))]
50    NAMED,
51    #[token("GROUP", ignore(case))]
52    GROUP,
53    #[token("BY", ignore(case))]
54    BY,
55    #[token("HAVING", ignore(case))]
56    HAVING,
57    #[token("ORDER", ignore(case))]
58    ORDER,
59    #[token("ASC", ignore(case))]
60    ASC,
61    #[token("DESC", ignore(case))]
62    DESC,
63    #[token("LIMIT", ignore(case))]
64    LIMIT,
65    #[token("OFFSET", ignore(case))]
66    OFFSET,
67    #[token("VALUES", ignore(case))]
68    VALUES,
69    #[token(";")]
70    Semicolon,
71    #[token("LOAD", ignore(case))]
72    LOAD,
73    #[token("SILENT", ignore(case))]
74    SILENT,
75    #[token("INTO", ignore(case))]
76    INTO,
77    #[token("CLEAR", ignore(case))]
78    CLEAR,
79    #[token("DROP", ignore(case))]
80    DROP,
81    #[token("CREATE", ignore(case))]
82    CREATE,
83    #[token("ADD", ignore(case))]
84    ADD,
85    #[token("TO", ignore(case))]
86    TO,
87    #[token("MOVE", ignore(case))]
88    MOVE,
89    #[token("COPY", ignore(case))]
90    COPY,
91    #[token("INSERT", ignore(case))]
92    INSERT,
93    #[token("DATA", ignore(case))]
94    DATA,
95    // #[regex(r"?i:INSERT\s+DATA)")]
96    #[token("INSERT DATA", ignore(case))]
97    // ERROR: This is currently not possible due to a bug in the tokenizer
98    INSERT_DATA,
99    #[regex(r"(?i:DELETE\s+DATA)")]
100    DELETE_DATA,
101    #[regex(r"(?i:DELETE\s+WHERE)")]
102    DELETE_WHERE,
103    #[token("DELETE", ignore(case))]
104    DELETE,
105    #[token("WITH", ignore(case))]
106    WITH,
107    #[token("USING", ignore(case))]
108    USING,
109    #[token("DEFAULT", ignore(case))]
110    DEFAULT,
111    #[token("GRAPH", ignore(case))]
112    GRAPH,
113    #[token("ALL", ignore(case))]
114    ALL,
115    #[token(".")]
116    Dot,
117    #[token("OPTIONAL", ignore(case))]
118    OPTIONAL,
119    #[token("SERVICE", ignore(case))]
120    SERVICE,
121    #[token("BIND", ignore(case))]
122    BIND,
123    #[token("NIL", ignore(case))]
124    NIL,
125    #[token("UNDEF", ignore(case))]
126    UNDEF,
127    #[token("MINUS", ignore(case))]
128    MINUS,
129    #[token("UNION", ignore(case))]
130    UNION,
131    #[token("FILTER", ignore(case))]
132    FILTER,
133    #[token(",")]
134    Comma,
135    // FIXME: https://github.com/maciejhirsz/logos/issues/291
136    #[token(" a ")]
137    a,
138    #[token("|")]
139    Pipe,
140    #[token("/")]
141    Slash,
142    #[token("^")]
143    Zirkumflex,
144    #[token("?")]
145    QuestionMark,
146    #[token("+")]
147    Plus,
148    #[token("!")]
149    ExclamationMark,
150    #[token("[")]
151    LBrack,
152    #[token("]")]
153    RBrack,
154    // (?:(?:(?:[A-Z]|[a-z]|[\u{00C0}-\u{00D6}]|[\u{00D8}-\u{00F6}]|[\u{00F8}-\u{02FF}]|[\u{0370}-\u{037D}]|[\u{037F}-\u{1FFF}]|[\u{200C}-\u{200D}]|[\u{2070}-\u{218F}]|[\u{2C00}-\u{2FEF}]|[\u{3001}-\u{D7FF}]|[\u{F900}-\u{FDCF}]|[\u{FDF0}-\u{FFFD}]|[\u{10000}-\u{EFFFF}])|_)|[0-9])(?:(?:(?:[A-Z]|[a-z]|[\u{00C0}-\u{00D6}]|[\u{00D8}-\u{00F6}]|[\u{00F8}-\u{02FF}]|[\u{0370}-\u{037D}]|[\u{037F}-\u{1FFF}]|[\u{200C}-\u{200D}]|[\u{2070}-\u{218F}]|[\u{2C00}-\u{2FEF}]|[\u{3001}-\u{D7FF}]|[\u{F900}-\u{FDCF}]|[\u{FDF0}-\u{FFFD}]|[\u{10000}-\u{EFFFF}])|_)|[0-9]|\u{00B7}|[\u{0300}-\u{036F}]|[\u{203F}-\u{2040}])*
155    #[regex(
156        r"\?(?:(?:(?:[A-Z]|[a-z]|[\u{00C0}-\u{00D6}]|[\u{00D8}-\u{00F6}]|[\u{00F8}-\u{02FF}]|[\u{0370}-\u{037D}]|[\u{037F}-\u{1FFF}]|[\u{200C}-\u{200D}]|[\u{2070}-\u{218F}]|[\u{2C00}-\u{2FEF}]|[\u{3001}-\u{D7FF}]|[\u{F900}-\u{FDCF}]|[\u{FDF0}-\u{FFFD}]|[\u{10000}-\u{EFFFF}])|_)|[0-9])(?:(?:(?:[A-Z]|[a-z]|[\u{00C0}-\u{00D6}]|[\u{00D8}-\u{00F6}]|[\u{00F8}-\u{02FF}]|[\u{0370}-\u{037D}]|[\u{037F}-\u{1FFF}]|[\u{200C}-\u{200D}]|[\u{2070}-\u{218F}]|[\u{2C00}-\u{2FEF}]|[\u{3001}-\u{D7FF}]|[\u{F900}-\u{FDCF}]|[\u{FDF0}-\u{FFFD}]|[\u{10000}-\u{EFFFF}])|_)|[0-9]|\u{00B7}|[\u{0300}-\u{036F}]|[\u{203F}-\u{2040}])*"
157    )]
158    VAR1,
159    #[regex(
160        r"\$(?:(?:(?:[A-Z]|[a-z]|[\u{00C0}-\u{00D6}]|[\u{00D8}-\u{00F6}]|[\u{00F8}-\u{02FF}]|[\u{0370}-\u{037D}]|[\u{037F}-\u{1FFF}]|[\u{200C}-\u{200D}]|[\u{2070}-\u{218F}]|[\u{2C00}-\u{2FEF}]|[\u{3001}-\u{D7FF}]|[\u{F900}-\u{FDCF}]|[\u{FDF0}-\u{FFFD}]|[\u{10000}-\u{EFFFF}])|_)|[0-9])(?:(?:(?:[A-Z]|[a-z]|[\u{00C0}-\u{00D6}]|[\u{00D8}-\u{00F6}]|[\u{00F8}-\u{02FF}]|[\u{0370}-\u{037D}]|[\u{037F}-\u{1FFF}]|[\u{200C}-\u{200D}]|[\u{2070}-\u{218F}]|[\u{2C00}-\u{2FEF}]|[\u{3001}-\u{D7FF}]|[\u{F900}-\u{FDCF}]|[\u{FDF0}-\u{FFFD}]|[\u{10000}-\u{EFFFF}])|_)|[0-9]|\u{00B7}|[\u{0300}-\u{036F}]|[\u{203F}-\u{2040}])*"
161    )]
162    VAR2,
163    #[token("||")]
164    DoublePipe,
165    #[token("&&")]
166    DoubleAnd,
167    #[token("=")]
168    Equals,
169    #[token("!=")]
170    ExclamationMarkEquals,
171    #[token("<")]
172    Less,
173    #[token(">")]
174    More,
175    #[token("<=")]
176    LessEquals,
177    #[token(">=")]
178    MoreEquals,
179    // FIXME: This is not optimal!
180    #[token("IN ", ignore(case))]
181    IN,
182    #[token("NOT", ignore(case))]
183    NOT,
184    #[token("-")]
185    Minus,
186    #[token("STR", ignore(case))]
187    STR,
188    #[token("LANG", ignore(case))]
189    LANG,
190    #[token("LANGMATCHES", ignore(case))]
191    LANGMATCHES,
192    #[token("DATATYPE", ignore(case))]
193    DATATYPE,
194    #[token("BOUND", ignore(case))]
195    BOUND,
196    #[token("IRI", ignore(case))]
197    IRI,
198    #[token("URI", ignore(case))]
199    URI,
200    #[token("BNODE", ignore(case))]
201    BNODE,
202    #[token("RAND", ignore(case))]
203    RAND,
204    #[token("ABS", ignore(case))]
205    ABS,
206    #[token("CEIL", ignore(case))]
207    CEIL,
208    #[token("FLOOR", ignore(case))]
209    FLOOR,
210    #[token("ROUND", ignore(case))]
211    ROUND,
212    #[token("CONCAT", ignore(case))]
213    CONCAT,
214    #[token("STRLEN", ignore(case))]
215    STRLEN,
216    #[token("UCASE", ignore(case))]
217    UCASE,
218    #[token("LCASE", ignore(case))]
219    LCASE,
220    #[token("ENCODE_FOR_URI", ignore(case))]
221    ENCODE_FOR_URI,
222    #[token("CONTAINS", ignore(case))]
223    CONTAINS,
224    #[token("STRSTARTS", ignore(case))]
225    STRSTARTS,
226    #[token("STRENDS", ignore(case))]
227    STRENDS,
228    #[token("STRBEFORE", ignore(case))]
229    STRBEFORE,
230    #[token("STRAFTER", ignore(case))]
231    STRAFTER,
232    #[token("YEAR", ignore(case))]
233    YEAR,
234    #[token("MONTH", ignore(case))]
235    MONTH,
236    #[token("DAY", ignore(case))]
237    DAY,
238    #[token("HOURS", ignore(case))]
239    HOURS,
240    #[token("MINUTES", ignore(case))]
241    MINUTES,
242    #[token("SECONDS", ignore(case))]
243    SECONDS,
244    #[token("TIMEZONE", ignore(case))]
245    TIMEZONE,
246    #[token("TZ", ignore(case))]
247    TZ,
248    #[token("NOW", ignore(case))]
249    NOW,
250    #[token("UUID", ignore(case))]
251    UUID,
252    #[token("STRUUID", ignore(case))]
253    STRUUID,
254    #[token("MD5", ignore(case))]
255    MD5,
256    #[token("SHA1", ignore(case))]
257    SHA1,
258    #[token("SHA256", ignore(case))]
259    SHA256,
260    #[token("SHA384", ignore(case))]
261    SHA384,
262    #[token("SHA512", ignore(case))]
263    SHA512,
264    #[token("COALESCE", ignore(case))]
265    COALESCE,
266    #[token("IF", ignore(case))]
267    IF,
268    #[token("STRLANG", ignore(case))]
269    STRLANG,
270    #[token("STRDT", ignore(case))]
271    STRDT,
272    #[token("sameTerm", ignore(case))]
273    sameTerm,
274    #[token("isIRI", ignore(case))]
275    isIRI,
276    #[token("isURI", ignore(case))]
277    isURI,
278    #[token("isBLANK", ignore(case))]
279    isBLANK,
280    #[token("isLITERAL", ignore(case))]
281    isLITERAL,
282    #[token("isNUMERIC", ignore(case))]
283    isNUMERIC,
284    #[token("REGEX", ignore(case))]
285    REGEX,
286    #[token("SUBSTR", ignore(case))]
287    SUBSTR,
288    #[token("REPLACE", ignore(case))]
289    REPLACE,
290    #[token("EXISTS", ignore(case))]
291    EXISTS,
292    #[token("COUNT", ignore(case))]
293    COUNT,
294    #[token("SUM", ignore(case))]
295    SUM,
296    #[token("MIN", ignore(case))]
297    MIN,
298    #[token("MAX", ignore(case))]
299    MAX,
300    #[token("AVG", ignore(case))]
301    AVG,
302    #[token("SAMPLE", ignore(case))]
303    SAMPLE,
304    #[token("GROUP_CONCAT", ignore(case))]
305    GROUP_CONCAT,
306    #[token("SEPARATOR", ignore(case))]
307    SEPARATOR,
308    #[regex("@[a-zA-Z]+(?:-[a-zA-Z0-9]+)*")]
309    LANGTAG,
310    #[token("^^")]
311    DoubleZirkumflex,
312    #[regex(r"\d+")]
313    INTEGER,
314    #[regex(r"\d*\.\d+")]
315    DECIMAL,
316    #[regex(r"(?:\d+\.\d*(?:[eE][+-]?\d+))|(?:\.\d+([eE][+-]?\d+))|(?:\d+([eE][+-]?\d+))")]
317    DOUBLE,
318    #[regex(r"\+\d+")]
319    INTEGER_POSITIVE,
320    #[regex(r"\+\d*\.\d+")]
321    DECIMAL_POSITIVE,
322    #[regex(r"\+(?:\d+\.\d*(?:[eE][+-]?\d+))|\+(?:\.\d+([eE][+-]?\d+))|\+(?:\d+([eE][+-]?\d+))")]
323    DOUBLE_POSITIVE,
324    #[regex(r"-\d+")]
325    INTEGER_NEGATIVE,
326    #[regex(r"-\d*\.\d+")]
327    DECIMAL_NEGATIVE,
328    #[regex(r"-(?:\d+\.\d*(?:[eE][+-]?\d+))|-(?:\.\d+([eE][+-]?\d+))|-(?:\d+([eE][+-]?\d+))")]
329    DOUBLE_NEGATIVE,
330    #[token("true")]
331    True,
332    #[token("false")]
333    False,
334    #[regex("'[^\u{27}\u{5C}\u{A}\u{D}]*'")]
335    STRING_LITERAL1,
336    #[regex(r#""([^"\\\x00-\x1F]|\\(["\\bnfrt/]|u[a-fA-F0-9]{4}))*""#)]
337    STRING_LITERAL2,
338    // [158]  	STRING_LITERAL_LONG1	  ::=  	"'''" ( ( "'" | "''" )? ( [^'\] | ECHAR ) )* "'''"
339    // [159]  	STRING_LITERAL_LONG2	  ::=  	'"""' ( ( '"' | '""' )? ( [^"\] | ECHAR ) )* '"""'
340    #[regex(r#"'''(?:(?:'|'')?(?:[^'\\]|[\\\r\n\f\r\t]))*'''"#)]
341    STRING_LITERAL_LONG1,
342    #[regex(r#""""(?:(?:"|"")?(?:[^"\\]|[\\\r\n\f\r\t]))*""""#)]
343    STRING_LITERAL_LONG2,
344    #[regex(r"[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}](?:[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}_\.-]*[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}_-])?:(?:[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}_0-9:]|%[0-9A-Fa-f])(?:[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}_:\.-]|%[0-9A-Fa-f])*(?:[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}_:-]|%[0-9A-Fa-f])?")]
345    PNAME_LN,
346
347    // FIXME: This regex allows "." as suffix (incorrect).
348    // The correct regex currently (28.05.25) causes issues.
349    // This is  known problem of logos and might be solved in the future
350    // https://github.com/maciejhirsz/logos/issues/291
351    #[regex(r"_:(?:(?:[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}_])|(?:[0-9]))(?:[A-Za-z\u{00C0}-\u{00D6}\u{00D8}-\u{00F6}\u{00F8}-\u{02FF}\u{0370}-\u{037D}\u{037F}-\u{1FFF}\u{200C}-\u{200D}\u{2070}-\u{218F}\u{2C00}-\u{2FEF}\u{3001}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFFD}\u{10000}-\u{EFFFF}_0-9\u{00B7}\u{0300}-\u{036F}\u{203F}-\u{2040}\.-]*)?")]
352    BLANK_NODE_LABEL,
353    // FIXME: here we want tu use \[\s*\]
354    // but this is causing issues with LBrack.
355    // There is no known fix.
356    // Here is the issue, currently open (14.04.2025)
357    // https://github.com/maciejhirsz/logos/issues/315
358    #[regex(r"\[\s*\]")]
359    ANON,
360
361    // Composite nodes
362    /// QueryUnit => Query
363    QueryUnit,
364    /// Query => Prologue (SelectQuery | ConstructQuery | DescribeQuery | AskQuery) ValuesClause
365    Query,
366    /// Prologue => (BaseDecl | PrefixDecl)*
367    Prologue,
368    /// SelectQuery => SelectClause DatasetClause* WhereClause SolutionModifier
369    SelectQuery,
370    /// ConstructQuery => 'CONSTRUCT' (ConstructTemplate DatasetClause* WhereClause SolutionModifier | DatasetClause* 'WHERE' '{' TriplesTemplate? '}' SolutionModifier)
371    ConstructQuery,
372    /// DescribeQuery => 'DESCRIBE' (VarOrIri VarOrIri* | '*') DatasetClause* WhereClause? SolutionModifier
373    DescribeQuery,
374    /// AskQuery => 'ASK' DatasetClause* WhereClause SolutionModifier
375    AskQuery,
376    /// ValuesClause => ('VALUES' DataBlock)?
377    ValuesClause,
378    /// UpdateUnit => Update
379    UpdateUnit,
380    /// Update => Prologue (UpdateOne (';' Update)?)?
381    Update,
382    /// BaseDecl => 'BASE' 'IRIREF'
383    BaseDecl,
384    /// PrefixDecl => 'PREFIX' 'PNAME_NS' 'IRIREF'
385    PrefixDecl,
386    /// SelectClause => 'SELECT' ('DISTINCT' | 'REDUCED')? ((Var | '(' Expression 'AS' Var ')') (Var | '(' Expression 'AS' Var ')')* | '*')
387    SelectClause,
388    /// DatasetClause => 'FROM' (DefaultGraphClause | NamedGraphClause)
389    DatasetClause,
390    /// WhereClause => 'WHERE'? GroupGraphPattern
391    WhereClause,
392    /// SolutionModifier => GroupClause? HavingClause? OrderClause? LimitOffsetClauses?
393    SolutionModifier,
394    /// SubSelect => SelectClause WhereClause SolutionModifier ValuesClause
395    SubSelect,
396    /// Var => 'VAR1' | 'VAR2'
397    Var,
398    /// Expression => ConditionalOrExpression
399    Expression,
400    /// ConstructTemplate => '{' ConstructTriples? '}'
401    ConstructTemplate,
402    /// TriplesTemplate => TriplesSameSubject ('.' TriplesTemplate?)?
403    TriplesTemplate,
404    /// VarOrIri => Var | iri
405    VarOrIri,
406    /// DefaultGraphClause => SourceSelector
407    DefaultGraphClause,
408    /// NamedGraphClause => 'NAMED' SourceSelector
409    NamedGraphClause,
410    /// SourceSelector => iri
411    SourceSelector,
412    /// iri => 'IRIREF' | PrefixedName
413    iri,
414    /// GroupGraphPattern => '{' (SubSelect | GroupGraphPatternSub) '}'
415    GroupGraphPattern,
416    /// GroupClause => 'GROUP' 'BY' GroupCondition GroupCondition*
417    GroupClause,
418    /// HavingClause => 'HAVING' HavingCondition HavingCondition*
419    HavingClause,
420    /// OrderClause => 'ORDER' 'BY' OrderCondition OrderCondition*
421    OrderClause,
422    /// LimitOffsetClauses => LimitClause OffsetClause? | OffsetClause LimitClause?
423    LimitOffsetClauses,
424    /// GroupCondition => BuiltInCall | FunctionCall | '(' Expression ('AS' Var)? ')' | Var
425    GroupCondition,
426    /// BuiltInCall => Aggregate | 'STR' '(' Expression ')' | 'LANG' '(' Expression ')' | 'LANGMATCHES' '(' Expression ',' Expression ')' | 'DATATYPE' '(' Expression ')' | 'BOUND' '(' Var ')' | 'IRI' '(' Expression ')' | 'URI' '(' Expression ')' | 'BNODE' ('(' Expression ')' | 'NIL') | 'RAND' 'NIL' | 'ABS' '(' Expression ')' | 'CEIL' '(' Expression ')' | 'FLOOR' '(' Expression ')' | 'ROUND' '(' Expression ')' | 'CONCAT' ExpressionList | SubstringExpression | 'STRLEN' '(' Expression ')' | StrReplaceExpression | 'UCASE' '(' Expression ')' | 'LCASE' '(' Expression ')' | 'ENCODE_FOR_URI' '(' Expression ')' | 'CONTAINS' '(' Expression ',' Expression ')' | 'STRSTARTS' '(' Expression ',' Expression ')' | 'STRENDS' '(' Expression ',' Expression ')' | 'STRBEFORE' '(' Expression ',' Expression ')' | 'STRAFTER' '(' Expression ',' Expression ')' | 'YEAR' '(' Expression ')' | 'MONTH' '(' Expression ')' | 'DAY' '(' Expression ')' | 'HOURS' '(' Expression ')' | 'MINUTES' '(' Expression ')' | 'SECONDS' '(' Expression ')' | 'TIMEZONE' '(' Expression ')' | 'TZ' '(' Expression ')' | 'NOW' 'NIL' | 'UUID' 'NIL' | 'STRUUID' 'NIL' | 'MD5' '(' Expression ')' | 'SHA1' '(' Expression ')' | 'SHA256' '(' Expression ')' | 'SHA384' '(' Expression ')' | 'SHA512' '(' Expression ')' | 'COALESCE' ExpressionList | 'IF' '(' Expression ',' Expression ',' Expression ')' | 'STRLANG' '(' Expression ',' Expression ')' | 'STRDT' '(' Expression ',' Expression ')' | 'sameTerm' '(' Expression ',' Expression ')' | 'isIRI' '(' Expression ')' | 'isURI' '(' Expression ')' | 'isBLANK' '(' Expression ')' | 'isLITERAL' '(' Expression ')' | 'isNUMERIC' '(' Expression ')' | RegexExpression | ExistsFunc | NotExistsFunc
427    BuiltInCall,
428    /// FunctionCall => iri ArgList
429    FunctionCall,
430    /// HavingCondition => Constraint
431    HavingCondition,
432    /// Constraint => BrackettedExpression | BuiltInCall | FunctionCall
433    Constraint,
434    /// OrderCondition => ('ASC' | 'DESC') BrackettedExpression | Constraint | Var
435    OrderCondition,
436    /// BrackettedExpression => '(' Expression ')'
437    BrackettedExpression,
438    /// LimitClause => 'LIMIT' 'INTEGER'
439    LimitClause,
440    /// OffsetClause => 'OFFSET' 'INTEGER'
441    OffsetClause,
442    /// DataBlock => InlineDataOneVar | InlineDataFull
443    DataBlock,
444    /// UpdateOne => Load | Clear | Drop | Add | Move | Copy | Create | InsertData | DeleteData | DeleteWhere | Modify
445    UpdateOne,
446    /// Load => 'LOAD' 'SILENT'? iri ('INTO' GraphRef)?
447    Load,
448    /// Clear => 'CLEAR' 'SILENT'? GraphRefAll
449    Clear,
450    /// Drop => 'DROP' 'SILENT'? GraphRefAll
451    Drop,
452    /// Add => 'ADD' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault
453    Add,
454    /// Move => 'MOVE' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault
455    Move,
456    /// Copy => 'COPY' 'SILENT'? GraphOrDefault 'TO' GraphOrDefault
457    Copy,
458    /// Create => 'CREATE' 'SILENT'? GraphRef
459    Create,
460    /// InsertData => 'INSERT_DATA' QuadData
461    InsertData,
462    /// DeleteData => 'DELETE_DATA' QuadData
463    DeleteData,
464    /// DeleteWhere => 'DELETE_WHERE' QuadPattern
465    DeleteWhere,
466    /// Modify => ('WITH' iri)? (DeleteClause InsertClause? | InsertClause) UsingClause* 'WHERE' GroupGraphPattern
467    Modify,
468    /// GraphRef => 'GRAPH' iri
469    GraphRef,
470    /// GraphRefAll => GraphRef | 'DEFAULT' | 'NAMED' | 'ALL'
471    GraphRefAll,
472    /// GraphOrDefault => 'DEFAULT' | 'GRAPH'? iri
473    GraphOrDefault,
474    /// QuadData => '{' Quads '}'
475    QuadData,
476    /// QuadPattern => '{' Quads '}'
477    QuadPattern,
478    /// DeleteClause => 'DELETE' QuadPattern
479    DeleteClause,
480    /// InsertClause => 'INSERT' QuadPattern
481    InsertClause,
482    /// UsingClause => 'USING' (iri | 'NAMED' iri)
483    UsingClause,
484    /// Quads => TriplesTemplate? (QuadsNotTriples '.'? TriplesTemplate?)*
485    Quads,
486    /// QuadsNotTriples => 'GRAPH' VarOrIri '{' TriplesTemplate? '}'
487    QuadsNotTriples,
488    /// TriplesSameSubject => VarOrTerm PropertyListNotEmpty | TriplesNode PropertyList
489    TriplesSameSubject,
490    /// GroupGraphPatternSub => TriplesBlock? (GraphPatternNotTriples '.'? TriplesBlock?)*
491    GroupGraphPatternSub,
492    /// TriplesBlock => TriplesSameSubjectPath ('.' TriplesBlock?)?
493    TriplesBlock,
494    /// GraphPatternNotTriples => GroupOrUnionGraphPattern | OptionalGraphPattern | MinusGraphPattern | GraphGraphPattern | ServiceGraphPattern | Filter | Bind | InlineData
495    GraphPatternNotTriples,
496    /// TriplesSameSubjectPath => VarOrTerm PropertyListPathNotEmpty | TriplesNodePath PropertyListPath
497    TriplesSameSubjectPath,
498    /// GroupOrUnionGraphPattern => GroupGraphPattern ('UNION' GroupGraphPattern)*
499    GroupOrUnionGraphPattern,
500    /// OptionalGraphPattern => 'OPTIONAL' GroupGraphPattern
501    OptionalGraphPattern,
502    /// MinusGraphPattern => 'MINUS' GroupGraphPattern
503    MinusGraphPattern,
504    /// GraphGraphPattern => 'GRAPH' VarOrIri GroupGraphPattern
505    GraphGraphPattern,
506    /// ServiceGraphPattern => 'SERVICE' 'SILENT'? VarOrIri GroupGraphPattern
507    ServiceGraphPattern,
508    /// Filter => 'FILTER' Constraint
509    Filter,
510    /// Bind => 'BIND' '(' Expression 'AS' Var ')'
511    Bind,
512    /// InlineData => 'VALUES' DataBlock
513    InlineData,
514    /// InlineDataOneVar => Var '{' DataBlockValue* '}'
515    InlineDataOneVar,
516    /// InlineDataFull => ('NIL' | '(' Var* ')') '{' ('(' DataBlockValue* ')' | 'NIL')* '}'
517    InlineDataFull,
518    /// DataBlockValue => iri | RDFLiteral | NumericLiteral | BooleanLiteral | 'UNDEF'
519    DataBlockValue,
520    /// RDFLiteral => String ('LANGTAG' | '^^' iri)?
521    RDFLiteral,
522    /// NumericLiteral => NumericLiteralUnsigned | NumericLiteralPositive | NumericLiteralNegative
523    NumericLiteral,
524    /// BooleanLiteral => 'true' | 'false'
525    BooleanLiteral,
526    /// ArgList => 'NIL' | '(' 'DISTINCT'? Expression (',' Expression)* ')'
527    ArgList,
528    /// ExpressionList => 'NIL' | '(' Expression (',' Expression)* ')'
529    ExpressionList,
530    /// ConstructTriples => TriplesSameSubject ('.' ConstructTriples?)?
531    ConstructTriples,
532    /// VarOrTerm => Var | GraphTerm
533    VarOrTerm,
534    /// PropertyListNotEmpty => Verb ObjectList (';' (Verb ObjectList)?)*
535    PropertyListNotEmpty,
536    /// TriplesNode => Collection | BlankNodePropertyList
537    TriplesNode,
538    /// PropertyList => PropertyListNotEmpty?
539    PropertyList,
540    /// Verb => VarOrIri | 'a'
541    Verb,
542    /// ObjectList => Object (',' Object)*
543    ObjectList,
544    /// Object => GraphNode
545    Object,
546    /// GraphNode => VarOrTerm | TriplesNode
547    GraphNode,
548    /// PropertyListPathNotEmpty => (VerbPath | VerbSimple) ObjectListPath (';' ((VerbPath | VerbSimple) ObjectList)?)*
549    PropertyListPathNotEmpty,
550    /// TriplesNodePath => CollectionPath | BlankNodePropertyListPath
551    TriplesNodePath,
552    /// PropertyListPath => PropertyListPathNotEmpty?
553    PropertyListPath,
554    /// VerbPath => Path
555    VerbPath,
556    /// VerbSimple => Var
557    VerbSimple,
558    /// ObjectListPath => ObjectPath (',' ObjectPath)*
559    ObjectListPath,
560    /// Path => PathAlternative
561    Path,
562    /// ObjectPath => GraphNodePath
563    ObjectPath,
564    /// GraphNodePath => VarOrTerm | TriplesNodePath
565    GraphNodePath,
566    /// PathAlternative => PathSequence ('|' PathSequence)*
567    PathAlternative,
568    /// PathSequence => PathEltOrInverse ('/' PathEltOrInverse)*
569    PathSequence,
570    /// PathEltOrInverse => PathElt | '^' PathElt
571    PathEltOrInverse,
572    /// PathElt => PathPrimary PathMod?
573    PathElt,
574    /// PathPrimary => iri | 'a' | '!' PathNegatedPropertySet | '(' Path ')'
575    PathPrimary,
576    /// PathMod => '?' | '*' | '+'
577    PathMod,
578    /// PathNegatedPropertySet => PathOneInPropertySet | '(' (PathOneInPropertySet ('|' PathOneInPropertySet)*)? ')'
579    PathNegatedPropertySet,
580    /// PathOneInPropertySet => iri | 'a' | '^' (iri | 'a')
581    PathOneInPropertySet,
582    /// Integer => 'INTEGER'
583    Integer,
584    /// Collection => '(' GraphNode GraphNode* ')'
585    Collection,
586    /// BlankNodePropertyList => '[' PropertyListNotEmpty ']'
587    BlankNodePropertyList,
588    /// CollectionPath => '(' GraphNodePath GraphNodePath* ')'
589    CollectionPath,
590    /// BlankNodePropertyListPath => '[' PropertyListPathNotEmpty ']'
591    BlankNodePropertyListPath,
592    /// GraphTerm => iri | RDFLiteral | NumericLiteral | BooleanLiteral | BlankNode | 'NIL'
593    GraphTerm,
594    /// BlankNode => 'BLANK_NODE_LABEL' | 'ANON'
595    BlankNode,
596    /// ConditionalOrExpression => ConditionalAndExpression ('||' ConditionalAndExpression)*
597    ConditionalOrExpression,
598    /// ConditionalAndExpression => ValueLogical ('&&' ValueLogical)*
599    ConditionalAndExpression,
600    /// ValueLogical => RelationalExpression
601    ValueLogical,
602    /// RelationalExpression => NumericExpression ('=' NumericExpression | '!=' NumericExpression | '<' NumericExpression | '>' NumericExpression | '<=' NumericExpression | '>=' NumericExpression | 'IN' ExpressionList | 'NOT' 'IN' ExpressionList)?
603    RelationalExpression,
604    /// NumericExpression => AdditiveExpression
605    NumericExpression,
606    /// AdditiveExpression => MultiplicativeExpression ('+' MultiplicativeExpression | '-' MultiplicativeExpression | (NumericLiteralPositive | NumericLiteralNegative) ('*' UnaryExpression | '/' UnaryExpression)*)*
607    AdditiveExpression,
608    /// MultiplicativeExpression => UnaryExpression ('*' UnaryExpression | '/' UnaryExpression)*
609    MultiplicativeExpression,
610    /// NumericLiteralPositive => 'INTEGER_POSITIVE' | 'DECIMAL_POSITIVE' | 'DOUBLE_POSITIVE'
611    NumericLiteralPositive,
612    /// NumericLiteralNegative => 'INTEGER_NEGATIVE' | 'DECIMAL_NEGATIVE' | 'DOUBLE_NEGATIVE'
613    NumericLiteralNegative,
614    /// UnaryExpression => '!' PrimaryExpression | '+' PrimaryExpression | '-' PrimaryExpression | PrimaryExpression
615    UnaryExpression,
616    /// PrimaryExpression => BrackettedExpression | BuiltInCall | iriOrFunction | RDFLiteral | NumericLiteral | BooleanLiteral | Var
617    PrimaryExpression,
618    /// iriOrFunction => iri ArgList?
619    iriOrFunction,
620    /// Aggregate => 'COUNT' '(' 'DISTINCT'? ('*' | Expression) ')' | 'SUM' '(' 'DISTINCT'? Expression ')' | 'MIN' '(' 'DISTINCT'? Expression ')' | 'MAX' '(' 'DISTINCT'? Expression ')' | 'AVG' '(' 'DISTINCT'? Expression ')' | 'SAMPLE' '(' 'DISTINCT'? Expression ')' | 'GROUP_CONCAT' '(' 'DISTINCT'? Expression (';' 'SEPARATOR' '=' String)? ')'
621    Aggregate,
622    /// SubstringExpression => 'SUBSTR' '(' Expression ',' Expression (',' Expression)? ')'
623    SubstringExpression,
624    /// StrReplaceExpression => 'REPLACE' '(' Expression ',' Expression ',' Expression (',' Expression)? ')'
625    StrReplaceExpression,
626    /// RegexExpression => 'REGEX' '(' Expression ',' Expression (',' Expression)? ')'
627    RegexExpression,
628    /// ExistsFunc => 'EXISTS' GroupGraphPattern
629    ExistsFunc,
630    /// NotExistsFunc => 'NOT' 'EXISTS' GroupGraphPattern
631    NotExistsFunc,
632    /// String => 'STRING_LITERAL1' | 'STRING_LITERAL2' | 'STRING_LITERAL_LONG1' | 'STRING_LITERAL_LONG2'
633    String,
634    /// NumericLiteralUnsigned => 'INTEGER' | 'DECIMAL' | 'DOUBLE'
635    NumericLiteralUnsigned,
636    /// PrefixedName => 'PNAME_LN' | 'PNAME_NS'
637    PrefixedName,
638}