Skip to main content

rdf_parsers/turtle/
parser.rs

1use crate::TokenTrait;
2pub type SyntaxNode = rowan::SyntaxNode<Lang>;
3#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, logos :: Logos)]
4# [logos (subpattern HEX = r#"([0-9]|[A-F]|[a-f])"#)]
5# [logos (subpattern UCHAR = r#"(\\u(?&HEX)(?&HEX)(?&HEX)(?&HEX)|\\U(?&HEX)(?&HEX)(?&HEX)(?&HEX)(?&HEX)(?&HEX)(?&HEX)(?&HEX))"#)]
6# [logos (subpattern IRIREF = r#"<(([^\x{00}-\x{20}<>"{}|^`\\]|(?&UCHAR)))*>"#)]
7# [logos (subpattern PN_CHARS_BASE = r#"([A-Z]|[a-z]|[\x{00C0}-\x{00D6}]|[\x{00D8}-\x{00F6}]|[\x{00F8}-\x{02FF}]|[\x{0370}-\x{037D}]|[\x{037F}-\x{1FFF}]|[\x{200C}-\x{200D}]|[\x{2070}-\x{218F}]|[\x{2C00}-\x{2FEF}]|[\x{3001}-\x{D7FF}]|[\x{F900}-\x{FDCF}]|[\x{FDF0}-\x{FFFD}]|[\x{10000}-\x{EFFFF}])"#)]
8# [logos (subpattern PN_CHARS_U = r#"((?&PN_CHARS_BASE)|_)"#)]
9# [logos (subpattern PN_CHARS = r#"((?&PN_CHARS_U)|-|[0-9]|\u00B7|[\x{0300}-\x{036F}]|[\x{203F}-\x{2040}])"#)]
10# [logos (subpattern PN_PREFIX = r#"(?&PN_CHARS_BASE)((((?&PN_CHARS)|\.))*(?&PN_CHARS))?"#)]
11# [logos (subpattern PNAME_NS = r#"((?&PN_PREFIX))?:"#)]
12# [logos (subpattern PERCENT = r#"%(?&HEX)(?&HEX)"#)]
13# [logos (subpattern PN_LOCAL_ESC = r#"\\(_|~|\.|-|!|\$|&|'|\(|\)|\*|\+|,|;|=|/|\?|#|@|%)"#)]
14# [logos (subpattern PLX = r#"((?&PERCENT)|(?&PN_LOCAL_ESC))"#)]
15# [logos (subpattern PN_LOCAL = r#"((?&PN_CHARS_U)|:|[0-9]|(?&PLX))((((?&PN_CHARS)|\.|:|(?&PLX)))*((?&PN_CHARS)|:|(?&PLX)))?"#)]
16# [logos (subpattern PNAME_LN = r#"(?&PNAME_NS)(?&PN_LOCAL)"#)]
17# [logos (subpattern BLANK_NODE_LABEL = r#"_:((?&PN_CHARS_U)|[0-9])((((?&PN_CHARS)|\.))*(?&PN_CHARS))?"#)]
18# [logos (subpattern LANGTAG = r#"@([a-zA-Z])+(-([a-zA-Z0-9])+)*"#)]
19# [logos (subpattern INTEGER = r#"([+-])?([0-9])+"#)]
20# [logos (subpattern DECIMAL = r#"([+-])?([0-9])*\.([0-9])+"#)]
21# [logos (subpattern EXPONENT = r#"[eE]([+-])?([0-9])+"#)]
22# [logos (subpattern DOUBLE = r#"([+-])?(([0-9])+\.([0-9])*(?&EXPONENT)|\.([0-9])+(?&EXPONENT)|([0-9])+(?&EXPONENT))"#)]
23# [logos (subpattern ECHAR = r#"\\[tbnrf"'\\]"#)]
24# [logos (subpattern STRING_LITERAL_QUOTE = r#""(([^\x{22}\x{5C}\x{A}\x{D}]|(?&ECHAR)|(?&UCHAR)))*""#)]
25# [logos (subpattern STRING_LITERAL_SINGLE_QUOTE = r#"'(([^\x{27}\x{5C}\x{A}\x{D}]|(?&ECHAR)|(?&UCHAR)))*'"#)]
26# [logos (subpattern STRING_LITERAL_LONG_SINGLE_QUOTE = r#"'''((('|''))?([^'\\]|(?&ECHAR)|(?&UCHAR)))*'''"#)]
27# [logos (subpattern STRING_LITERAL_LONG_QUOTE = r#""""((("|""))?([^"\\]|(?&ECHAR)|(?&UCHAR)))*""""#)]
28# [logos (subpattern WS = r#"(\u0020|\u0009|\u000D|\u000A)"#)]
29#[repr(u16)]
30pub enum SyntaxKind {
31    Eof = 0,
32    #[regex(r"[ \t\n\r]+")]
33    WhiteSpace,
34    #[regex(r"#[^\n]*", allow_greedy = true)]
35    Comment,
36    #[doc = r" producings"]
37    BlankNode,
38    BooleanLiteral,
39    NumericLiteral,
40    PrefixedName,
41    Rdfliteral,
42    MyString,
43    Base,
44    BlankNodePropertyList,
45    BlankNodePropertyList2,
46    Collection,
47    Directive,
48    Iri,
49    Literal,
50    Object,
51    ObjectList,
52    Predicate,
53    PredicateObjectList,
54    PrefixId,
55    SparqlBase,
56    SparqlPrefix,
57    Statement,
58    Subject,
59    Triples,
60    TurtleDoc,
61    Verb,
62    #[doc = r" terminals"]
63    #[token("(")]
64    ClOpen,
65    #[token(")")]
66    ClClose,
67    #[token(",")]
68    Comma,
69    #[token(".")]
70    Stop,
71    #[token(";")]
72    Colon,
73    #[token("@base")]
74    BaseToken,
75    #[token("@prefix")]
76    PrefixToken,
77    #[token("BASE", ignore(case))]
78    SparqlBaseToken,
79    #[token("PREFIX", ignore(case))]
80    SparqlPrefixToken,
81    #[token("[")]
82    SqOpen,
83    #[token("]")]
84    SqClose,
85    #[token("^^")]
86    Datatype,
87    #[token("a")]
88    Alit,
89    #[token("false")]
90    FalseLit,
91    #[token("true")]
92    TrueLit,
93    #[regex("(?&BLANK_NODE_LABEL)")]
94    BlankNodeLabel,
95    #[regex("(?&DECIMAL)")]
96    Decimal,
97    #[regex("(?&DOUBLE)")]
98    Double,
99    #[regex("(?&INTEGER)")]
100    Integer,
101    #[regex("(?&IRIREF)")]
102    Iriref,
103    #[regex("(?&LANGTAG)")]
104    Langtag,
105    #[regex("(?&PNAME_LN)")]
106    PnameLn,
107    #[regex("(?&PNAME_NS)")]
108    PnameNs,
109    #[regex("(?&STRING_LITERAL_LONG_QUOTE)")]
110    StringLiteralLongQuote,
111    #[regex("(?&STRING_LITERAL_LONG_SINGLE_QUOTE)")]
112    StringLiteralLongSingleQuote,
113    #[regex("(?&STRING_LITERAL_QUOTE)")]
114    StringLiteralQuote,
115    #[regex("(?&STRING_LITERAL_SINGLE_QUOTE)")]
116    StringLiteralSingleQuote,
117    Error,
118    ROOT,
119}
120impl From<SyntaxKind> for rowan::SyntaxKind {
121    fn from(kind: SyntaxKind) -> Self {
122        Self(kind as u16)
123    }
124}
125impl From<rowan::SyntaxKind> for SyntaxKind {
126    fn from(value: rowan::SyntaxKind) -> Self {
127        assert!(value.0 <= SyntaxKind::ROOT as u16);
128        unsafe { std::mem::transmute::<u16, SyntaxKind>(value.0) }
129    }
130}
131#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
132pub enum Lang {}
133impl rowan::Language for Lang {
134    type Kind = SyntaxKind;
135    fn kind_from_raw(raw: rowan::SyntaxKind) -> Self::Kind {
136        assert!(raw.0 <= SyntaxKind::ROOT as u16);
137        unsafe { std::mem::transmute::<u16, SyntaxKind>(raw.0) }
138    }
139    fn kind_to_raw(kind: Self::Kind) -> rowan::SyntaxKind {
140        kind.into()
141    }
142}
143mod definitions {
144    use super::*;
145    #[derive(Debug, Clone, Copy)]
146    pub struct Rule {
147        pub kind: SyntaxKind,
148        pub state: usize,
149    }
150    impl Rule {
151        pub fn new(kind: SyntaxKind) -> Self {
152            match kind {
153                SyntaxKind::TurtleDoc => Rule {
154                    kind,
155                    state: 1usize,
156                },
157                SyntaxKind::Statement => Rule {
158                    kind,
159                    state: 1usize,
160                },
161                SyntaxKind::Directive => Rule {
162                    kind,
163                    state: 1usize,
164                },
165                SyntaxKind::PrefixId => Rule {
166                    kind,
167                    state: 4usize,
168                },
169                SyntaxKind::Base => Rule {
170                    kind,
171                    state: 3usize,
172                },
173                SyntaxKind::SparqlBase => Rule {
174                    kind,
175                    state: 2usize,
176                },
177                SyntaxKind::SparqlPrefix => Rule {
178                    kind,
179                    state: 3usize,
180                },
181                SyntaxKind::Triples => Rule {
182                    kind,
183                    state: 1usize,
184                },
185                SyntaxKind::PredicateObjectList => Rule {
186                    kind,
187                    state: 7usize,
188                },
189                SyntaxKind::ObjectList => Rule {
190                    kind,
191                    state: 4usize,
192                },
193                SyntaxKind::Verb => Rule {
194                    kind,
195                    state: 1usize,
196                },
197                SyntaxKind::Subject => Rule {
198                    kind,
199                    state: 1usize,
200                },
201                SyntaxKind::Predicate => Rule {
202                    kind,
203                    state: 1usize,
204                },
205                SyntaxKind::Object => Rule {
206                    kind,
207                    state: 1usize,
208                },
209                SyntaxKind::Literal => Rule {
210                    kind,
211                    state: 1usize,
212                },
213                SyntaxKind::BlankNodePropertyList2 => Rule {
214                    kind,
215                    state: 4usize,
216                },
217                SyntaxKind::BlankNodePropertyList => Rule {
218                    kind,
219                    state: 3usize,
220                },
221                SyntaxKind::Collection => Rule {
222                    kind,
223                    state: 4usize,
224                },
225                SyntaxKind::NumericLiteral => Rule {
226                    kind,
227                    state: 1usize,
228                },
229                SyntaxKind::Rdfliteral => Rule {
230                    kind,
231                    state: 6usize,
232                },
233                SyntaxKind::BooleanLiteral => Rule {
234                    kind,
235                    state: 1usize,
236                },
237                SyntaxKind::MyString => Rule {
238                    kind,
239                    state: 1usize,
240                },
241                SyntaxKind::Iri => Rule {
242                    kind,
243                    state: 1usize,
244                },
245                SyntaxKind::PrefixedName => Rule {
246                    kind,
247                    state: 1usize,
248                },
249                SyntaxKind::BlankNode => Rule {
250                    kind,
251                    state: 1usize,
252                },
253                SyntaxKind::ClOpen => Rule { kind, state: 0 },
254                SyntaxKind::ClClose => Rule { kind, state: 0 },
255                SyntaxKind::Comma => Rule { kind, state: 0 },
256                SyntaxKind::Stop => Rule { kind, state: 0 },
257                SyntaxKind::Colon => Rule { kind, state: 0 },
258                SyntaxKind::BaseToken => Rule { kind, state: 0 },
259                SyntaxKind::PrefixToken => Rule { kind, state: 0 },
260                SyntaxKind::SparqlBaseToken => Rule { kind, state: 0 },
261                SyntaxKind::SparqlPrefixToken => Rule { kind, state: 0 },
262                SyntaxKind::SqOpen => Rule { kind, state: 0 },
263                SyntaxKind::SqClose => Rule { kind, state: 0 },
264                SyntaxKind::Datatype => Rule { kind, state: 0 },
265                SyntaxKind::Alit => Rule { kind, state: 0 },
266                SyntaxKind::FalseLit => Rule { kind, state: 0 },
267                SyntaxKind::TrueLit => Rule { kind, state: 0 },
268                SyntaxKind::BlankNodeLabel => Rule { kind, state: 0 },
269                SyntaxKind::Decimal => Rule { kind, state: 0 },
270                SyntaxKind::Double => Rule { kind, state: 0 },
271                SyntaxKind::Integer => Rule { kind, state: 0 },
272                SyntaxKind::Iriref => Rule { kind, state: 0 },
273                SyntaxKind::Langtag => Rule { kind, state: 0 },
274                SyntaxKind::PnameLn => Rule { kind, state: 0 },
275                SyntaxKind::PnameNs => Rule { kind, state: 0 },
276                SyntaxKind::StringLiteralLongQuote => Rule { kind, state: 0 },
277                SyntaxKind::StringLiteralLongSingleQuote => Rule { kind, state: 0 },
278                SyntaxKind::StringLiteralQuote => Rule { kind, state: 0 },
279                SyntaxKind::StringLiteralSingleQuote => Rule { kind, state: 0 },
280                _ => panic!("Unknown rule kind {:?}", kind),
281            }
282        }
283    }
284    pub fn first_tokens(kind: SyntaxKind) -> &'static [SyntaxKind] {
285        match kind {
286            SyntaxKind::BlankNode => &[SyntaxKind::SqOpen],
287            SyntaxKind::BooleanLiteral => &[SyntaxKind::FalseLit, SyntaxKind::TrueLit],
288            SyntaxKind::NumericLiteral => &[],
289            SyntaxKind::PrefixedName => &[],
290            SyntaxKind::Rdfliteral => &[],
291            SyntaxKind::MyString => &[],
292            SyntaxKind::Base => &[SyntaxKind::BaseToken],
293            SyntaxKind::BlankNodePropertyList => &[SyntaxKind::SqOpen],
294            SyntaxKind::BlankNodePropertyList2 => &[SyntaxKind::SqOpen],
295            SyntaxKind::Collection => &[SyntaxKind::ClOpen],
296            SyntaxKind::Directive => &[
297                SyntaxKind::BaseToken,
298                SyntaxKind::PrefixToken,
299                SyntaxKind::SparqlBaseToken,
300                SyntaxKind::SparqlPrefixToken,
301            ],
302            SyntaxKind::Iri => &[],
303            SyntaxKind::Literal => &[SyntaxKind::FalseLit, SyntaxKind::TrueLit],
304            SyntaxKind::Object => &[
305                SyntaxKind::ClOpen,
306                SyntaxKind::FalseLit,
307                SyntaxKind::SqOpen,
308                SyntaxKind::TrueLit,
309            ],
310            SyntaxKind::ObjectList => &[
311                SyntaxKind::ClOpen,
312                SyntaxKind::FalseLit,
313                SyntaxKind::SqOpen,
314                SyntaxKind::TrueLit,
315            ],
316            SyntaxKind::Predicate => &[],
317            SyntaxKind::PredicateObjectList => &[SyntaxKind::Alit],
318            SyntaxKind::PrefixId => &[SyntaxKind::PrefixToken],
319            SyntaxKind::SparqlBase => &[SyntaxKind::SparqlBaseToken],
320            SyntaxKind::SparqlPrefix => &[SyntaxKind::SparqlPrefixToken],
321            SyntaxKind::Statement => &[
322                SyntaxKind::BaseToken,
323                SyntaxKind::ClOpen,
324                SyntaxKind::PrefixToken,
325                SyntaxKind::SparqlBaseToken,
326                SyntaxKind::SparqlPrefixToken,
327                SyntaxKind::SqOpen,
328            ],
329            SyntaxKind::Subject => &[SyntaxKind::ClOpen, SyntaxKind::SqOpen],
330            SyntaxKind::Triples => &[SyntaxKind::ClOpen, SyntaxKind::SqOpen],
331            SyntaxKind::TurtleDoc => &[
332                SyntaxKind::BaseToken,
333                SyntaxKind::ClOpen,
334                SyntaxKind::PrefixToken,
335                SyntaxKind::SparqlBaseToken,
336                SyntaxKind::SparqlPrefixToken,
337                SyntaxKind::SqOpen,
338            ],
339            SyntaxKind::Verb => &[SyntaxKind::Alit],
340            SyntaxKind::ClOpen => &[SyntaxKind::ClOpen],
341            SyntaxKind::ClClose => &[SyntaxKind::ClClose],
342            SyntaxKind::Comma => &[SyntaxKind::Comma],
343            SyntaxKind::Stop => &[SyntaxKind::Stop],
344            SyntaxKind::Colon => &[SyntaxKind::Colon],
345            SyntaxKind::BaseToken => &[SyntaxKind::BaseToken],
346            SyntaxKind::PrefixToken => &[SyntaxKind::PrefixToken],
347            SyntaxKind::SparqlBaseToken => &[SyntaxKind::SparqlBaseToken],
348            SyntaxKind::SparqlPrefixToken => &[SyntaxKind::SparqlPrefixToken],
349            SyntaxKind::SqOpen => &[SyntaxKind::SqOpen],
350            SyntaxKind::SqClose => &[SyntaxKind::SqClose],
351            SyntaxKind::Datatype => &[SyntaxKind::Datatype],
352            SyntaxKind::Alit => &[SyntaxKind::Alit],
353            SyntaxKind::FalseLit => &[SyntaxKind::FalseLit],
354            SyntaxKind::TrueLit => &[SyntaxKind::TrueLit],
355            SyntaxKind::BlankNodeLabel => &[SyntaxKind::BlankNodeLabel],
356            SyntaxKind::Decimal => &[SyntaxKind::Decimal],
357            SyntaxKind::Double => &[SyntaxKind::Double],
358            SyntaxKind::Integer => &[SyntaxKind::Integer],
359            SyntaxKind::Iriref => &[SyntaxKind::Iriref],
360            SyntaxKind::Langtag => &[SyntaxKind::Langtag],
361            SyntaxKind::PnameLn => &[SyntaxKind::PnameLn],
362            SyntaxKind::PnameNs => &[SyntaxKind::PnameNs],
363            SyntaxKind::StringLiteralLongQuote => &[SyntaxKind::StringLiteralLongQuote],
364            SyntaxKind::StringLiteralLongSingleQuote => &[SyntaxKind::StringLiteralLongSingleQuote],
365            SyntaxKind::StringLiteralQuote => &[SyntaxKind::StringLiteralQuote],
366            SyntaxKind::StringLiteralSingleQuote => &[SyntaxKind::StringLiteralSingleQuote],
367            _ => &[],
368        }
369    }
370    #[doc = r" Returns the minimum error cost that `kind` must incur when `tok`"]
371    #[doc = r" is the current token.  0 means the token is reachable (or the rule"]
372    #[doc = r" is nullable); positive means the rule cannot make progress without"]
373    #[doc = r" at least that much error cost."]
374    pub fn min_error_for_token(kind: SyntaxKind, tok: SyntaxKind) -> isize {
375        match kind {
376            SyntaxKind::BlankNode => match tok {
377                SyntaxKind::BlankNodeLabel | SyntaxKind::SqClose | SyntaxKind::SqOpen => 0,
378                _ => kind.max_error_value(),
379            },
380            SyntaxKind::BooleanLiteral => match tok {
381                SyntaxKind::FalseLit | SyntaxKind::TrueLit => 0,
382                _ => kind.max_error_value(),
383            },
384            SyntaxKind::NumericLiteral => match tok {
385                SyntaxKind::Decimal | SyntaxKind::Double | SyntaxKind::Integer => 0,
386                _ => kind.max_error_value(),
387            },
388            SyntaxKind::PrefixedName => match tok {
389                SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
390                _ => kind.max_error_value(),
391            },
392            SyntaxKind::Rdfliteral => match tok {
393                SyntaxKind::Datatype
394                | SyntaxKind::Iriref
395                | SyntaxKind::Langtag
396                | SyntaxKind::PnameLn
397                | SyntaxKind::PnameNs
398                | SyntaxKind::StringLiteralLongQuote
399                | SyntaxKind::StringLiteralLongSingleQuote
400                | SyntaxKind::StringLiteralQuote
401                | SyntaxKind::StringLiteralSingleQuote => 0,
402                _ => kind.max_error_value(),
403            },
404            SyntaxKind::MyString => match tok {
405                SyntaxKind::StringLiteralLongQuote
406                | SyntaxKind::StringLiteralLongSingleQuote
407                | SyntaxKind::StringLiteralQuote
408                | SyntaxKind::StringLiteralSingleQuote => 0,
409                _ => kind.max_error_value(),
410            },
411            SyntaxKind::Base => match tok {
412                SyntaxKind::BaseToken | SyntaxKind::Iriref | SyntaxKind::Stop => 0,
413                _ => kind.max_error_value(),
414            },
415            SyntaxKind::BlankNodePropertyList => match tok {
416                SyntaxKind::Alit
417                | SyntaxKind::BlankNodeLabel
418                | SyntaxKind::ClClose
419                | SyntaxKind::ClOpen
420                | SyntaxKind::Colon
421                | SyntaxKind::Comma
422                | SyntaxKind::Datatype
423                | SyntaxKind::Decimal
424                | SyntaxKind::Double
425                | SyntaxKind::FalseLit
426                | SyntaxKind::Integer
427                | SyntaxKind::Iriref
428                | SyntaxKind::Langtag
429                | SyntaxKind::PnameLn
430                | SyntaxKind::PnameNs
431                | SyntaxKind::SqClose
432                | SyntaxKind::SqOpen
433                | SyntaxKind::StringLiteralLongQuote
434                | SyntaxKind::StringLiteralLongSingleQuote
435                | SyntaxKind::StringLiteralQuote
436                | SyntaxKind::StringLiteralSingleQuote
437                | SyntaxKind::TrueLit => 0,
438                _ => kind.max_error_value(),
439            },
440            SyntaxKind::BlankNodePropertyList2 => match tok {
441                SyntaxKind::Alit
442                | SyntaxKind::BlankNodeLabel
443                | SyntaxKind::ClClose
444                | SyntaxKind::ClOpen
445                | SyntaxKind::Colon
446                | SyntaxKind::Comma
447                | SyntaxKind::Datatype
448                | SyntaxKind::Decimal
449                | SyntaxKind::Double
450                | SyntaxKind::FalseLit
451                | SyntaxKind::Integer
452                | SyntaxKind::Iriref
453                | SyntaxKind::Langtag
454                | SyntaxKind::PnameLn
455                | SyntaxKind::PnameNs
456                | SyntaxKind::SqClose
457                | SyntaxKind::SqOpen
458                | SyntaxKind::StringLiteralLongQuote
459                | SyntaxKind::StringLiteralLongSingleQuote
460                | SyntaxKind::StringLiteralQuote
461                | SyntaxKind::StringLiteralSingleQuote
462                | SyntaxKind::TrueLit => 0,
463                _ => kind.max_error_value(),
464            },
465            SyntaxKind::Collection => match tok {
466                SyntaxKind::Alit
467                | SyntaxKind::BlankNodeLabel
468                | SyntaxKind::ClClose
469                | SyntaxKind::ClOpen
470                | SyntaxKind::Colon
471                | SyntaxKind::Comma
472                | SyntaxKind::Datatype
473                | SyntaxKind::Decimal
474                | SyntaxKind::Double
475                | SyntaxKind::FalseLit
476                | SyntaxKind::Integer
477                | SyntaxKind::Iriref
478                | SyntaxKind::Langtag
479                | SyntaxKind::PnameLn
480                | SyntaxKind::PnameNs
481                | SyntaxKind::SqClose
482                | SyntaxKind::SqOpen
483                | SyntaxKind::StringLiteralLongQuote
484                | SyntaxKind::StringLiteralLongSingleQuote
485                | SyntaxKind::StringLiteralQuote
486                | SyntaxKind::StringLiteralSingleQuote
487                | SyntaxKind::TrueLit => 0,
488                _ => kind.max_error_value(),
489            },
490            SyntaxKind::Directive => match tok {
491                SyntaxKind::BaseToken
492                | SyntaxKind::Iriref
493                | SyntaxKind::PnameNs
494                | SyntaxKind::PrefixToken
495                | SyntaxKind::SparqlBaseToken
496                | SyntaxKind::SparqlPrefixToken
497                | SyntaxKind::Stop => 0,
498                _ => kind.max_error_value(),
499            },
500            SyntaxKind::Iri => match tok {
501                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
502                _ => kind.max_error_value(),
503            },
504            SyntaxKind::Literal => match tok {
505                SyntaxKind::Datatype
506                | SyntaxKind::Decimal
507                | SyntaxKind::Double
508                | SyntaxKind::FalseLit
509                | SyntaxKind::Integer
510                | SyntaxKind::Iriref
511                | SyntaxKind::Langtag
512                | SyntaxKind::PnameLn
513                | SyntaxKind::PnameNs
514                | SyntaxKind::StringLiteralLongQuote
515                | SyntaxKind::StringLiteralLongSingleQuote
516                | SyntaxKind::StringLiteralQuote
517                | SyntaxKind::StringLiteralSingleQuote
518                | SyntaxKind::TrueLit => 0,
519                _ => kind.max_error_value(),
520            },
521            SyntaxKind::Object => match tok {
522                SyntaxKind::Alit
523                | SyntaxKind::BlankNodeLabel
524                | SyntaxKind::ClClose
525                | SyntaxKind::ClOpen
526                | SyntaxKind::Colon
527                | SyntaxKind::Comma
528                | SyntaxKind::Datatype
529                | SyntaxKind::Decimal
530                | SyntaxKind::Double
531                | SyntaxKind::FalseLit
532                | SyntaxKind::Integer
533                | SyntaxKind::Iriref
534                | SyntaxKind::Langtag
535                | SyntaxKind::PnameLn
536                | SyntaxKind::PnameNs
537                | SyntaxKind::SqClose
538                | SyntaxKind::SqOpen
539                | SyntaxKind::StringLiteralLongQuote
540                | SyntaxKind::StringLiteralLongSingleQuote
541                | SyntaxKind::StringLiteralQuote
542                | SyntaxKind::StringLiteralSingleQuote
543                | SyntaxKind::TrueLit => 0,
544                _ => kind.max_error_value(),
545            },
546            SyntaxKind::ObjectList => match tok {
547                SyntaxKind::Alit
548                | SyntaxKind::BlankNodeLabel
549                | SyntaxKind::ClClose
550                | SyntaxKind::ClOpen
551                | SyntaxKind::Colon
552                | SyntaxKind::Comma
553                | SyntaxKind::Datatype
554                | SyntaxKind::Decimal
555                | SyntaxKind::Double
556                | SyntaxKind::FalseLit
557                | SyntaxKind::Integer
558                | SyntaxKind::Iriref
559                | SyntaxKind::Langtag
560                | SyntaxKind::PnameLn
561                | SyntaxKind::PnameNs
562                | SyntaxKind::SqClose
563                | SyntaxKind::SqOpen
564                | SyntaxKind::StringLiteralLongQuote
565                | SyntaxKind::StringLiteralLongSingleQuote
566                | SyntaxKind::StringLiteralQuote
567                | SyntaxKind::StringLiteralSingleQuote
568                | SyntaxKind::TrueLit => 0,
569                _ => kind.max_error_value(),
570            },
571            SyntaxKind::Predicate => match tok {
572                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
573                _ => kind.max_error_value(),
574            },
575            SyntaxKind::PredicateObjectList => match tok {
576                SyntaxKind::Alit
577                | SyntaxKind::BlankNodeLabel
578                | SyntaxKind::ClClose
579                | SyntaxKind::ClOpen
580                | SyntaxKind::Colon
581                | SyntaxKind::Comma
582                | SyntaxKind::Datatype
583                | SyntaxKind::Decimal
584                | SyntaxKind::Double
585                | SyntaxKind::FalseLit
586                | SyntaxKind::Integer
587                | SyntaxKind::Iriref
588                | SyntaxKind::Langtag
589                | SyntaxKind::PnameLn
590                | SyntaxKind::PnameNs
591                | SyntaxKind::SqClose
592                | SyntaxKind::SqOpen
593                | SyntaxKind::StringLiteralLongQuote
594                | SyntaxKind::StringLiteralLongSingleQuote
595                | SyntaxKind::StringLiteralQuote
596                | SyntaxKind::StringLiteralSingleQuote
597                | SyntaxKind::TrueLit => 0,
598                _ => kind.max_error_value(),
599            },
600            SyntaxKind::PrefixId => match tok {
601                SyntaxKind::Iriref
602                | SyntaxKind::PnameNs
603                | SyntaxKind::PrefixToken
604                | SyntaxKind::Stop => 0,
605                _ => kind.max_error_value(),
606            },
607            SyntaxKind::SparqlBase => match tok {
608                SyntaxKind::Iriref | SyntaxKind::SparqlBaseToken => 0,
609                _ => kind.max_error_value(),
610            },
611            SyntaxKind::SparqlPrefix => match tok {
612                SyntaxKind::Iriref | SyntaxKind::PnameNs | SyntaxKind::SparqlPrefixToken => 0,
613                _ => kind.max_error_value(),
614            },
615            SyntaxKind::Statement => match tok {
616                SyntaxKind::Alit
617                | SyntaxKind::BaseToken
618                | SyntaxKind::BlankNodeLabel
619                | SyntaxKind::ClClose
620                | SyntaxKind::ClOpen
621                | SyntaxKind::Colon
622                | SyntaxKind::Comma
623                | SyntaxKind::Datatype
624                | SyntaxKind::Decimal
625                | SyntaxKind::Double
626                | SyntaxKind::FalseLit
627                | SyntaxKind::Integer
628                | SyntaxKind::Iriref
629                | SyntaxKind::Langtag
630                | SyntaxKind::PnameLn
631                | SyntaxKind::PnameNs
632                | SyntaxKind::PrefixToken
633                | SyntaxKind::SparqlBaseToken
634                | SyntaxKind::SparqlPrefixToken
635                | SyntaxKind::SqClose
636                | SyntaxKind::SqOpen
637                | SyntaxKind::Stop
638                | SyntaxKind::StringLiteralLongQuote
639                | SyntaxKind::StringLiteralLongSingleQuote
640                | SyntaxKind::StringLiteralQuote
641                | SyntaxKind::StringLiteralSingleQuote
642                | SyntaxKind::TrueLit => 0,
643                _ => kind.max_error_value(),
644            },
645            SyntaxKind::Subject => match tok {
646                SyntaxKind::Alit
647                | SyntaxKind::BlankNodeLabel
648                | SyntaxKind::ClClose
649                | SyntaxKind::ClOpen
650                | SyntaxKind::Colon
651                | SyntaxKind::Comma
652                | SyntaxKind::Datatype
653                | SyntaxKind::Decimal
654                | SyntaxKind::Double
655                | SyntaxKind::FalseLit
656                | SyntaxKind::Integer
657                | SyntaxKind::Iriref
658                | SyntaxKind::Langtag
659                | SyntaxKind::PnameLn
660                | SyntaxKind::PnameNs
661                | SyntaxKind::SqClose
662                | SyntaxKind::SqOpen
663                | SyntaxKind::StringLiteralLongQuote
664                | SyntaxKind::StringLiteralLongSingleQuote
665                | SyntaxKind::StringLiteralQuote
666                | SyntaxKind::StringLiteralSingleQuote
667                | SyntaxKind::TrueLit => 0,
668                _ => kind.max_error_value(),
669            },
670            SyntaxKind::Triples => match tok {
671                SyntaxKind::Alit
672                | SyntaxKind::BlankNodeLabel
673                | SyntaxKind::ClClose
674                | SyntaxKind::ClOpen
675                | SyntaxKind::Colon
676                | SyntaxKind::Comma
677                | SyntaxKind::Datatype
678                | SyntaxKind::Decimal
679                | SyntaxKind::Double
680                | SyntaxKind::FalseLit
681                | SyntaxKind::Integer
682                | SyntaxKind::Iriref
683                | SyntaxKind::Langtag
684                | SyntaxKind::PnameLn
685                | SyntaxKind::PnameNs
686                | SyntaxKind::SqClose
687                | SyntaxKind::SqOpen
688                | SyntaxKind::StringLiteralLongQuote
689                | SyntaxKind::StringLiteralLongSingleQuote
690                | SyntaxKind::StringLiteralQuote
691                | SyntaxKind::StringLiteralSingleQuote
692                | SyntaxKind::TrueLit => 0,
693                _ => kind.max_error_value(),
694            },
695            SyntaxKind::Verb => match tok {
696                SyntaxKind::Alit
697                | SyntaxKind::Iriref
698                | SyntaxKind::PnameLn
699                | SyntaxKind::PnameNs => 0,
700                _ => kind.max_error_value(),
701            },
702            SyntaxKind::ClOpen => match tok {
703                SyntaxKind::ClOpen => 0,
704                _ => kind.max_error_value(),
705            },
706            SyntaxKind::ClClose => match tok {
707                SyntaxKind::ClClose => 0,
708                _ => kind.max_error_value(),
709            },
710            SyntaxKind::Comma => match tok {
711                SyntaxKind::Comma => 0,
712                _ => kind.max_error_value(),
713            },
714            SyntaxKind::Stop => match tok {
715                SyntaxKind::Stop => 0,
716                _ => kind.max_error_value(),
717            },
718            SyntaxKind::Colon => match tok {
719                SyntaxKind::Colon => 0,
720                _ => kind.max_error_value(),
721            },
722            SyntaxKind::BaseToken => match tok {
723                SyntaxKind::BaseToken => 0,
724                _ => kind.max_error_value(),
725            },
726            SyntaxKind::PrefixToken => match tok {
727                SyntaxKind::PrefixToken => 0,
728                _ => kind.max_error_value(),
729            },
730            SyntaxKind::SparqlBaseToken => match tok {
731                SyntaxKind::SparqlBaseToken => 0,
732                _ => kind.max_error_value(),
733            },
734            SyntaxKind::SparqlPrefixToken => match tok {
735                SyntaxKind::SparqlPrefixToken => 0,
736                _ => kind.max_error_value(),
737            },
738            SyntaxKind::SqOpen => match tok {
739                SyntaxKind::SqOpen => 0,
740                _ => kind.max_error_value(),
741            },
742            SyntaxKind::SqClose => match tok {
743                SyntaxKind::SqClose => 0,
744                _ => kind.max_error_value(),
745            },
746            SyntaxKind::Datatype => match tok {
747                SyntaxKind::Datatype => 0,
748                _ => kind.max_error_value(),
749            },
750            SyntaxKind::Alit => match tok {
751                SyntaxKind::Alit => 0,
752                _ => kind.max_error_value(),
753            },
754            SyntaxKind::FalseLit => match tok {
755                SyntaxKind::FalseLit => 0,
756                _ => kind.max_error_value(),
757            },
758            SyntaxKind::TrueLit => match tok {
759                SyntaxKind::TrueLit => 0,
760                _ => kind.max_error_value(),
761            },
762            SyntaxKind::BlankNodeLabel => match tok {
763                SyntaxKind::BlankNodeLabel => 0,
764                _ => kind.max_error_value(),
765            },
766            SyntaxKind::Decimal => match tok {
767                SyntaxKind::Decimal => 0,
768                _ => kind.max_error_value(),
769            },
770            SyntaxKind::Double => match tok {
771                SyntaxKind::Double => 0,
772                _ => kind.max_error_value(),
773            },
774            SyntaxKind::Integer => match tok {
775                SyntaxKind::Integer => 0,
776                _ => kind.max_error_value(),
777            },
778            SyntaxKind::Iriref => match tok {
779                SyntaxKind::Iriref => 0,
780                _ => kind.max_error_value(),
781            },
782            SyntaxKind::Langtag => match tok {
783                SyntaxKind::Langtag => 0,
784                _ => kind.max_error_value(),
785            },
786            SyntaxKind::PnameLn => match tok {
787                SyntaxKind::PnameLn => 0,
788                _ => kind.max_error_value(),
789            },
790            SyntaxKind::PnameNs => match tok {
791                SyntaxKind::PnameNs => 0,
792                _ => kind.max_error_value(),
793            },
794            SyntaxKind::StringLiteralLongQuote => match tok {
795                SyntaxKind::StringLiteralLongQuote => 0,
796                _ => kind.max_error_value(),
797            },
798            SyntaxKind::StringLiteralLongSingleQuote => match tok {
799                SyntaxKind::StringLiteralLongSingleQuote => 0,
800                _ => kind.max_error_value(),
801            },
802            SyntaxKind::StringLiteralQuote => match tok {
803                SyntaxKind::StringLiteralQuote => 0,
804                _ => kind.max_error_value(),
805            },
806            SyntaxKind::StringLiteralSingleQuote => match tok {
807                SyntaxKind::StringLiteralSingleQuote => 0,
808                _ => kind.max_error_value(),
809            },
810            _ => 0,
811        }
812    }
813    #[doc = r" Precomputed dist(q, a): minimum insertion cost to reach a point"]
814    #[doc = r" where terminal `terminal` can be matched, starting from parser"]
815    #[doc = r" state `(kind, state)`.  Returns 0 as the conservative default"]
816    #[doc = r" (admissible — parent context might accept the terminal after a pop)."]
817    pub fn state_dist(kind: SyntaxKind, state: usize, terminal: SyntaxKind) -> isize {
818        match (kind, state, terminal) {
819            (SyntaxKind::BlankNode, 1usize, _) => match terminal {
820                SyntaxKind::BlankNodeLabel | SyntaxKind::SqOpen => 0,
821                _ => 1isize,
822            },
823            (SyntaxKind::BlankNode, 2usize, _) => match terminal {
824                SyntaxKind::BlankNodeLabel => 0,
825                _ => 1isize,
826            },
827            (SyntaxKind::BlankNode, 3usize, _) => match terminal {
828                SyntaxKind::SqClose => 0,
829                _ => 2isize,
830            },
831            (SyntaxKind::BlankNode, 4usize, _) => match terminal {
832                SyntaxKind::Alit => 4isize,
833                SyntaxKind::BlankNodeLabel => 4isize,
834                SyntaxKind::Decimal => 4isize,
835                SyntaxKind::Double => 4isize,
836                SyntaxKind::FalseLit => 4isize,
837                SyntaxKind::Integer => 4isize,
838                SyntaxKind::Iriref => 4isize,
839                SyntaxKind::Langtag => 4isize,
840                SyntaxKind::PnameLn => 4isize,
841                SyntaxKind::PnameNs => 4isize,
842                SyntaxKind::StringLiteralLongQuote => 4isize,
843                SyntaxKind::StringLiteralLongSingleQuote => 4isize,
844                SyntaxKind::StringLiteralQuote => 4isize,
845                SyntaxKind::StringLiteralSingleQuote => 4isize,
846                SyntaxKind::TrueLit => 4isize,
847                SyntaxKind::BaseToken => 4isize,
848                SyntaxKind::ClClose => 4isize,
849                SyntaxKind::ClOpen => 4isize,
850                SyntaxKind::Colon => 4isize,
851                SyntaxKind::Comma => 4isize,
852                SyntaxKind::Datatype => 4isize,
853                SyntaxKind::PrefixToken => 4isize,
854                SyntaxKind::SparqlBaseToken => 4isize,
855                SyntaxKind::SparqlPrefixToken => 4isize,
856                SyntaxKind::SqClose => 2isize,
857                SyntaxKind::Stop => 4isize,
858                _ => 0,
859            },
860            (SyntaxKind::BooleanLiteral, 1usize, _) => match terminal {
861                SyntaxKind::FalseLit | SyntaxKind::TrueLit => 0,
862                _ => 1isize,
863            },
864            (SyntaxKind::BooleanLiteral, 2usize, _) => match terminal {
865                SyntaxKind::TrueLit => 0,
866                _ => 1isize,
867            },
868            (SyntaxKind::BooleanLiteral, 3usize, _) => match terminal {
869                SyntaxKind::FalseLit => 0,
870                _ => 1isize,
871            },
872            (SyntaxKind::NumericLiteral, 1usize, _) => match terminal {
873                SyntaxKind::Decimal | SyntaxKind::Double | SyntaxKind::Integer => 0,
874                _ => 1isize,
875            },
876            (SyntaxKind::NumericLiteral, 2usize, _) => match terminal {
877                SyntaxKind::Integer => 0,
878                _ => 1isize,
879            },
880            (SyntaxKind::NumericLiteral, 3usize, _) => match terminal {
881                SyntaxKind::Decimal => 0,
882                _ => 1isize,
883            },
884            (SyntaxKind::NumericLiteral, 4usize, _) => match terminal {
885                SyntaxKind::Double => 0,
886                _ => 1isize,
887            },
888            (SyntaxKind::PrefixedName, 1usize, _) => match terminal {
889                SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
890                _ => 1isize,
891            },
892            (SyntaxKind::PrefixedName, 2usize, _) => match terminal {
893                SyntaxKind::PnameLn => 0,
894                _ => 1isize,
895            },
896            (SyntaxKind::PrefixedName, 3usize, _) => match terminal {
897                SyntaxKind::PnameNs => 0,
898                _ => 1isize,
899            },
900            (SyntaxKind::Rdfliteral, 2usize, _) => match terminal {
901                SyntaxKind::Langtag | SyntaxKind::Datatype => 0,
902                _ => 1isize,
903            },
904            (SyntaxKind::Rdfliteral, 3usize, _) => match terminal {
905                SyntaxKind::Langtag => 0,
906                _ => 1isize,
907            },
908            (SyntaxKind::Rdfliteral, 4usize, _) => match terminal {
909                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
910                _ => 1isize,
911            },
912            (SyntaxKind::Rdfliteral, 5usize, _) => match terminal {
913                SyntaxKind::Alit => 2isize,
914                SyntaxKind::BlankNodeLabel => 2isize,
915                SyntaxKind::Decimal => 2isize,
916                SyntaxKind::Double => 2isize,
917                SyntaxKind::FalseLit => 2isize,
918                SyntaxKind::Integer => 2isize,
919                SyntaxKind::Iriref => 1isize,
920                SyntaxKind::Langtag => 2isize,
921                SyntaxKind::PnameLn => 1isize,
922                SyntaxKind::PnameNs => 1isize,
923                SyntaxKind::StringLiteralLongQuote => 2isize,
924                SyntaxKind::StringLiteralLongSingleQuote => 2isize,
925                SyntaxKind::StringLiteralQuote => 2isize,
926                SyntaxKind::StringLiteralSingleQuote => 2isize,
927                SyntaxKind::TrueLit => 2isize,
928                SyntaxKind::BaseToken => 2isize,
929                SyntaxKind::ClClose => 2isize,
930                SyntaxKind::ClOpen => 2isize,
931                SyntaxKind::Colon => 2isize,
932                SyntaxKind::Comma => 2isize,
933                SyntaxKind::PrefixToken => 2isize,
934                SyntaxKind::SparqlBaseToken => 2isize,
935                SyntaxKind::SparqlPrefixToken => 2isize,
936                SyntaxKind::SqClose => 2isize,
937                SyntaxKind::SqOpen => 2isize,
938                SyntaxKind::Stop => 2isize,
939                _ => 0,
940            },
941            (SyntaxKind::Rdfliteral, 6usize, _) => match terminal {
942                SyntaxKind::StringLiteralLongQuote
943                | SyntaxKind::StringLiteralLongSingleQuote
944                | SyntaxKind::StringLiteralQuote
945                | SyntaxKind::StringLiteralSingleQuote => 0,
946                _ => 1isize,
947            },
948            (SyntaxKind::MyString, 1usize, _) => match terminal {
949                SyntaxKind::StringLiteralLongQuote
950                | SyntaxKind::StringLiteralLongSingleQuote
951                | SyntaxKind::StringLiteralQuote
952                | SyntaxKind::StringLiteralSingleQuote => 0,
953                _ => 1isize,
954            },
955            (SyntaxKind::MyString, 2usize, _) => match terminal {
956                SyntaxKind::StringLiteralQuote => 0,
957                _ => 1isize,
958            },
959            (SyntaxKind::MyString, 3usize, _) => match terminal {
960                SyntaxKind::StringLiteralSingleQuote => 0,
961                _ => 1isize,
962            },
963            (SyntaxKind::MyString, 4usize, _) => match terminal {
964                SyntaxKind::StringLiteralLongSingleQuote => 0,
965                _ => 1isize,
966            },
967            (SyntaxKind::MyString, 5usize, _) => match terminal {
968                SyntaxKind::StringLiteralLongQuote => 0,
969                _ => 1isize,
970            },
971            (SyntaxKind::Base, 1usize, _) => match terminal {
972                SyntaxKind::Stop => 0,
973                _ => 3isize,
974            },
975            (SyntaxKind::Base, 2usize, _) => match terminal {
976                SyntaxKind::Alit => 4isize,
977                SyntaxKind::BlankNodeLabel => 4isize,
978                SyntaxKind::Decimal => 4isize,
979                SyntaxKind::Double => 4isize,
980                SyntaxKind::FalseLit => 4isize,
981                SyntaxKind::Integer => 4isize,
982                SyntaxKind::Langtag => 4isize,
983                SyntaxKind::PnameLn => 4isize,
984                SyntaxKind::PnameNs => 4isize,
985                SyntaxKind::StringLiteralLongQuote => 4isize,
986                SyntaxKind::StringLiteralLongSingleQuote => 4isize,
987                SyntaxKind::StringLiteralQuote => 4isize,
988                SyntaxKind::StringLiteralSingleQuote => 4isize,
989                SyntaxKind::TrueLit => 4isize,
990                SyntaxKind::BaseToken => 4isize,
991                SyntaxKind::ClClose => 4isize,
992                SyntaxKind::ClOpen => 4isize,
993                SyntaxKind::Colon => 4isize,
994                SyntaxKind::Comma => 4isize,
995                SyntaxKind::Datatype => 4isize,
996                SyntaxKind::PrefixToken => 4isize,
997                SyntaxKind::SparqlBaseToken => 4isize,
998                SyntaxKind::SparqlPrefixToken => 4isize,
999                SyntaxKind::SqClose => 4isize,
1000                SyntaxKind::SqOpen => 4isize,
1001                SyntaxKind::Stop => 1isize,
1002                _ => 0,
1003            },
1004            (SyntaxKind::Base, 3usize, _) => match terminal {
1005                SyntaxKind::Alit => 104isize,
1006                SyntaxKind::BlankNodeLabel => 104isize,
1007                SyntaxKind::Decimal => 104isize,
1008                SyntaxKind::Double => 104isize,
1009                SyntaxKind::FalseLit => 104isize,
1010                SyntaxKind::Integer => 104isize,
1011                SyntaxKind::Iriref => 100isize,
1012                SyntaxKind::Langtag => 104isize,
1013                SyntaxKind::PnameLn => 104isize,
1014                SyntaxKind::PnameNs => 104isize,
1015                SyntaxKind::StringLiteralLongQuote => 104isize,
1016                SyntaxKind::StringLiteralLongSingleQuote => 104isize,
1017                SyntaxKind::StringLiteralQuote => 104isize,
1018                SyntaxKind::StringLiteralSingleQuote => 104isize,
1019                SyntaxKind::TrueLit => 104isize,
1020                SyntaxKind::ClClose => 104isize,
1021                SyntaxKind::ClOpen => 104isize,
1022                SyntaxKind::Colon => 104isize,
1023                SyntaxKind::Comma => 104isize,
1024                SyntaxKind::Datatype => 104isize,
1025                SyntaxKind::PrefixToken => 104isize,
1026                SyntaxKind::SparqlBaseToken => 104isize,
1027                SyntaxKind::SparqlPrefixToken => 104isize,
1028                SyntaxKind::SqClose => 104isize,
1029                SyntaxKind::SqOpen => 104isize,
1030                SyntaxKind::Stop => 101isize,
1031                _ => 0,
1032            },
1033            (SyntaxKind::BlankNodePropertyList, 1usize, _) => match terminal {
1034                SyntaxKind::SqClose => 0,
1035                _ => 2isize,
1036            },
1037            (SyntaxKind::BlankNodePropertyList, 2usize, _) => match terminal {
1038                SyntaxKind::Alit
1039                | SyntaxKind::Iriref
1040                | SyntaxKind::PnameLn
1041                | SyntaxKind::PnameNs => 0,
1042                _ => 1isize,
1043            },
1044            (SyntaxKind::BlankNodePropertyList, 3usize, _) => match terminal {
1045                SyntaxKind::Alit => 2isize,
1046                SyntaxKind::BlankNodeLabel => 3isize,
1047                SyntaxKind::Decimal => 3isize,
1048                SyntaxKind::Double => 3isize,
1049                SyntaxKind::FalseLit => 3isize,
1050                SyntaxKind::Integer => 3isize,
1051                SyntaxKind::Iriref => 2isize,
1052                SyntaxKind::Langtag => 3isize,
1053                SyntaxKind::PnameLn => 2isize,
1054                SyntaxKind::PnameNs => 2isize,
1055                SyntaxKind::StringLiteralLongQuote => 3isize,
1056                SyntaxKind::StringLiteralLongSingleQuote => 3isize,
1057                SyntaxKind::StringLiteralQuote => 3isize,
1058                SyntaxKind::StringLiteralSingleQuote => 3isize,
1059                SyntaxKind::TrueLit => 3isize,
1060                SyntaxKind::BaseToken => 3isize,
1061                SyntaxKind::ClClose => 3isize,
1062                SyntaxKind::ClOpen => 3isize,
1063                SyntaxKind::Colon => 3isize,
1064                SyntaxKind::Comma => 3isize,
1065                SyntaxKind::Datatype => 3isize,
1066                SyntaxKind::PrefixToken => 3isize,
1067                SyntaxKind::SparqlBaseToken => 3isize,
1068                SyntaxKind::SparqlPrefixToken => 3isize,
1069                SyntaxKind::SqClose => 3isize,
1070                SyntaxKind::Stop => 3isize,
1071                _ => 0,
1072            },
1073            (SyntaxKind::BlankNodePropertyList2, 1usize, _) => match terminal {
1074                SyntaxKind::SqClose => 0,
1075                _ => 2isize,
1076            },
1077            (SyntaxKind::BlankNodePropertyList2, 2usize, _) => match terminal {
1078                SyntaxKind::Alit
1079                | SyntaxKind::Iriref
1080                | SyntaxKind::PnameLn
1081                | SyntaxKind::PnameNs
1082                | SyntaxKind::SqClose => 0,
1083                _ => 1isize,
1084            },
1085            (SyntaxKind::BlankNodePropertyList2, 3usize, _) => match terminal {
1086                SyntaxKind::Alit
1087                | SyntaxKind::Iriref
1088                | SyntaxKind::PnameLn
1089                | SyntaxKind::PnameNs => 0,
1090                _ => 1isize,
1091            },
1092            (SyntaxKind::BlankNodePropertyList2, 4usize, _) => match terminal {
1093                SyntaxKind::SqOpen => 0,
1094                _ => 2isize,
1095            },
1096            (SyntaxKind::Collection, 1usize, _) => match terminal {
1097                SyntaxKind::ClClose => 0,
1098                _ => 2isize,
1099            },
1100            (SyntaxKind::Collection, 2usize, _) => match terminal {
1101                SyntaxKind::BlankNodeLabel
1102                | SyntaxKind::Decimal
1103                | SyntaxKind::Double
1104                | SyntaxKind::FalseLit
1105                | SyntaxKind::Integer
1106                | SyntaxKind::Iriref
1107                | SyntaxKind::PnameLn
1108                | SyntaxKind::PnameNs
1109                | SyntaxKind::StringLiteralLongQuote
1110                | SyntaxKind::StringLiteralLongSingleQuote
1111                | SyntaxKind::StringLiteralQuote
1112                | SyntaxKind::StringLiteralSingleQuote
1113                | SyntaxKind::TrueLit
1114                | SyntaxKind::ClClose
1115                | SyntaxKind::ClOpen
1116                | SyntaxKind::SqOpen => 0,
1117                _ => 1isize,
1118            },
1119            (SyntaxKind::Collection, 3usize, _) => match terminal {
1120                SyntaxKind::BlankNodeLabel
1121                | SyntaxKind::Decimal
1122                | SyntaxKind::Double
1123                | SyntaxKind::FalseLit
1124                | SyntaxKind::Integer
1125                | SyntaxKind::Iriref
1126                | SyntaxKind::PnameLn
1127                | SyntaxKind::PnameNs
1128                | SyntaxKind::StringLiteralLongQuote
1129                | SyntaxKind::StringLiteralLongSingleQuote
1130                | SyntaxKind::StringLiteralQuote
1131                | SyntaxKind::StringLiteralSingleQuote
1132                | SyntaxKind::TrueLit
1133                | SyntaxKind::ClOpen
1134                | SyntaxKind::SqOpen => 0,
1135                _ => 1isize,
1136            },
1137            (SyntaxKind::Collection, 4usize, _) => match terminal {
1138                SyntaxKind::ClOpen => 0,
1139                _ => 2isize,
1140            },
1141            (SyntaxKind::Directive, 1usize, _) => match terminal {
1142                SyntaxKind::Alit => 101isize,
1143                SyntaxKind::BlankNodeLabel => 101isize,
1144                SyntaxKind::Decimal => 101isize,
1145                SyntaxKind::Double => 101isize,
1146                SyntaxKind::FalseLit => 101isize,
1147                SyntaxKind::Integer => 101isize,
1148                SyntaxKind::Iriref => 100isize,
1149                SyntaxKind::Langtag => 101isize,
1150                SyntaxKind::PnameLn => 101isize,
1151                SyntaxKind::PnameNs => 100isize,
1152                SyntaxKind::StringLiteralLongQuote => 101isize,
1153                SyntaxKind::StringLiteralLongSingleQuote => 101isize,
1154                SyntaxKind::StringLiteralQuote => 101isize,
1155                SyntaxKind::StringLiteralSingleQuote => 101isize,
1156                SyntaxKind::TrueLit => 101isize,
1157                SyntaxKind::ClClose => 101isize,
1158                SyntaxKind::ClOpen => 101isize,
1159                SyntaxKind::Colon => 101isize,
1160                SyntaxKind::Comma => 101isize,
1161                SyntaxKind::Datatype => 101isize,
1162                SyntaxKind::SqClose => 101isize,
1163                SyntaxKind::SqOpen => 101isize,
1164                SyntaxKind::Stop => 101isize,
1165                _ => 0,
1166            },
1167            (SyntaxKind::Directive, 2usize, _) => match terminal {
1168                SyntaxKind::Alit => 105isize,
1169                SyntaxKind::BlankNodeLabel => 105isize,
1170                SyntaxKind::Decimal => 105isize,
1171                SyntaxKind::Double => 105isize,
1172                SyntaxKind::FalseLit => 105isize,
1173                SyntaxKind::Integer => 105isize,
1174                SyntaxKind::Iriref => 101isize,
1175                SyntaxKind::Langtag => 105isize,
1176                SyntaxKind::PnameLn => 105isize,
1177                SyntaxKind::PnameNs => 100isize,
1178                SyntaxKind::StringLiteralLongQuote => 105isize,
1179                SyntaxKind::StringLiteralLongSingleQuote => 105isize,
1180                SyntaxKind::StringLiteralQuote => 105isize,
1181                SyntaxKind::StringLiteralSingleQuote => 105isize,
1182                SyntaxKind::TrueLit => 105isize,
1183                SyntaxKind::BaseToken => 105isize,
1184                SyntaxKind::ClClose => 105isize,
1185                SyntaxKind::ClOpen => 105isize,
1186                SyntaxKind::Colon => 105isize,
1187                SyntaxKind::Comma => 105isize,
1188                SyntaxKind::Datatype => 105isize,
1189                SyntaxKind::SparqlBaseToken => 105isize,
1190                SyntaxKind::SparqlPrefixToken => 105isize,
1191                SyntaxKind::SqClose => 105isize,
1192                SyntaxKind::SqOpen => 105isize,
1193                SyntaxKind::Stop => 102isize,
1194                _ => 0,
1195            },
1196            (SyntaxKind::Directive, 3usize, _) => match terminal {
1197                SyntaxKind::Alit => 104isize,
1198                SyntaxKind::BlankNodeLabel => 104isize,
1199                SyntaxKind::Decimal => 104isize,
1200                SyntaxKind::Double => 104isize,
1201                SyntaxKind::FalseLit => 104isize,
1202                SyntaxKind::Integer => 104isize,
1203                SyntaxKind::Iriref => 100isize,
1204                SyntaxKind::Langtag => 104isize,
1205                SyntaxKind::PnameLn => 104isize,
1206                SyntaxKind::PnameNs => 104isize,
1207                SyntaxKind::StringLiteralLongQuote => 104isize,
1208                SyntaxKind::StringLiteralLongSingleQuote => 104isize,
1209                SyntaxKind::StringLiteralQuote => 104isize,
1210                SyntaxKind::StringLiteralSingleQuote => 104isize,
1211                SyntaxKind::TrueLit => 104isize,
1212                SyntaxKind::ClClose => 104isize,
1213                SyntaxKind::ClOpen => 104isize,
1214                SyntaxKind::Colon => 104isize,
1215                SyntaxKind::Comma => 104isize,
1216                SyntaxKind::Datatype => 104isize,
1217                SyntaxKind::PrefixToken => 104isize,
1218                SyntaxKind::SparqlBaseToken => 104isize,
1219                SyntaxKind::SparqlPrefixToken => 104isize,
1220                SyntaxKind::SqClose => 104isize,
1221                SyntaxKind::SqOpen => 104isize,
1222                SyntaxKind::Stop => 101isize,
1223                _ => 0,
1224            },
1225            (SyntaxKind::Directive, 4usize, _) => match terminal {
1226                SyntaxKind::Alit => 102isize,
1227                SyntaxKind::BlankNodeLabel => 102isize,
1228                SyntaxKind::Decimal => 102isize,
1229                SyntaxKind::Double => 102isize,
1230                SyntaxKind::FalseLit => 102isize,
1231                SyntaxKind::Integer => 102isize,
1232                SyntaxKind::Iriref => 101isize,
1233                SyntaxKind::Langtag => 102isize,
1234                SyntaxKind::PnameLn => 102isize,
1235                SyntaxKind::PnameNs => 100isize,
1236                SyntaxKind::StringLiteralLongQuote => 102isize,
1237                SyntaxKind::StringLiteralLongSingleQuote => 102isize,
1238                SyntaxKind::StringLiteralQuote => 102isize,
1239                SyntaxKind::StringLiteralSingleQuote => 102isize,
1240                SyntaxKind::TrueLit => 102isize,
1241                SyntaxKind::BaseToken => 102isize,
1242                SyntaxKind::ClClose => 102isize,
1243                SyntaxKind::ClOpen => 102isize,
1244                SyntaxKind::Colon => 102isize,
1245                SyntaxKind::Comma => 102isize,
1246                SyntaxKind::Datatype => 102isize,
1247                SyntaxKind::PrefixToken => 102isize,
1248                SyntaxKind::SparqlBaseToken => 102isize,
1249                SyntaxKind::SqClose => 102isize,
1250                SyntaxKind::SqOpen => 102isize,
1251                SyntaxKind::Stop => 102isize,
1252                _ => 0,
1253            },
1254            (SyntaxKind::Directive, 5usize, _) => match terminal {
1255                SyntaxKind::Alit => 101isize,
1256                SyntaxKind::BlankNodeLabel => 101isize,
1257                SyntaxKind::Decimal => 101isize,
1258                SyntaxKind::Double => 101isize,
1259                SyntaxKind::FalseLit => 101isize,
1260                SyntaxKind::Integer => 101isize,
1261                SyntaxKind::Iriref => 100isize,
1262                SyntaxKind::Langtag => 101isize,
1263                SyntaxKind::PnameLn => 101isize,
1264                SyntaxKind::PnameNs => 101isize,
1265                SyntaxKind::StringLiteralLongQuote => 101isize,
1266                SyntaxKind::StringLiteralLongSingleQuote => 101isize,
1267                SyntaxKind::StringLiteralQuote => 101isize,
1268                SyntaxKind::StringLiteralSingleQuote => 101isize,
1269                SyntaxKind::TrueLit => 101isize,
1270                SyntaxKind::BaseToken => 101isize,
1271                SyntaxKind::ClClose => 101isize,
1272                SyntaxKind::ClOpen => 101isize,
1273                SyntaxKind::Colon => 101isize,
1274                SyntaxKind::Comma => 101isize,
1275                SyntaxKind::Datatype => 101isize,
1276                SyntaxKind::PrefixToken => 101isize,
1277                SyntaxKind::SparqlPrefixToken => 101isize,
1278                SyntaxKind::SqClose => 101isize,
1279                SyntaxKind::SqOpen => 101isize,
1280                SyntaxKind::Stop => 101isize,
1281                _ => 0,
1282            },
1283            (SyntaxKind::Iri, 1usize, _) => match terminal {
1284                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
1285                _ => 1isize,
1286            },
1287            (SyntaxKind::Iri, 2usize, _) => match terminal {
1288                SyntaxKind::Iriref => 0,
1289                _ => 1isize,
1290            },
1291            (SyntaxKind::Iri, 3usize, _) => match terminal {
1292                SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
1293                _ => 1isize,
1294            },
1295            (SyntaxKind::Literal, 1usize, _) => match terminal {
1296                SyntaxKind::Decimal
1297                | SyntaxKind::Double
1298                | SyntaxKind::FalseLit
1299                | SyntaxKind::Integer
1300                | SyntaxKind::StringLiteralLongQuote
1301                | SyntaxKind::StringLiteralLongSingleQuote
1302                | SyntaxKind::StringLiteralQuote
1303                | SyntaxKind::StringLiteralSingleQuote
1304                | SyntaxKind::TrueLit => 0,
1305                _ => 1isize,
1306            },
1307            (SyntaxKind::Literal, 2usize, _) => match terminal {
1308                SyntaxKind::StringLiteralLongQuote
1309                | SyntaxKind::StringLiteralLongSingleQuote
1310                | SyntaxKind::StringLiteralQuote
1311                | SyntaxKind::StringLiteralSingleQuote => 0,
1312                _ => 1isize,
1313            },
1314            (SyntaxKind::Literal, 3usize, _) => match terminal {
1315                SyntaxKind::Decimal | SyntaxKind::Double | SyntaxKind::Integer => 0,
1316                _ => 1isize,
1317            },
1318            (SyntaxKind::Literal, 4usize, _) => match terminal {
1319                SyntaxKind::FalseLit | SyntaxKind::TrueLit => 0,
1320                _ => 1isize,
1321            },
1322            (SyntaxKind::Object, 1usize, _) => match terminal {
1323                SyntaxKind::BlankNodeLabel
1324                | SyntaxKind::Decimal
1325                | SyntaxKind::Double
1326                | SyntaxKind::FalseLit
1327                | SyntaxKind::Integer
1328                | SyntaxKind::Iriref
1329                | SyntaxKind::PnameLn
1330                | SyntaxKind::PnameNs
1331                | SyntaxKind::StringLiteralLongQuote
1332                | SyntaxKind::StringLiteralLongSingleQuote
1333                | SyntaxKind::StringLiteralQuote
1334                | SyntaxKind::StringLiteralSingleQuote
1335                | SyntaxKind::TrueLit
1336                | SyntaxKind::ClOpen
1337                | SyntaxKind::SqOpen => 0,
1338                _ => 1isize,
1339            },
1340            (SyntaxKind::Object, 2usize, _) => match terminal {
1341                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
1342                _ => 1isize,
1343            },
1344            (SyntaxKind::Object, 3usize, _) => match terminal {
1345                SyntaxKind::BlankNodeLabel => 0,
1346                _ => 1isize,
1347            },
1348            (SyntaxKind::Object, 4usize, _) => match terminal {
1349                SyntaxKind::SqOpen => 0,
1350                _ => 2isize,
1351            },
1352            (SyntaxKind::Object, 5usize, _) => match terminal {
1353                SyntaxKind::ClOpen => 0,
1354                _ => 2isize,
1355            },
1356            (SyntaxKind::Object, 6usize, _) => match terminal {
1357                SyntaxKind::Decimal
1358                | SyntaxKind::Double
1359                | SyntaxKind::FalseLit
1360                | SyntaxKind::Integer
1361                | SyntaxKind::StringLiteralLongQuote
1362                | SyntaxKind::StringLiteralLongSingleQuote
1363                | SyntaxKind::StringLiteralQuote
1364                | SyntaxKind::StringLiteralSingleQuote
1365                | SyntaxKind::TrueLit => 0,
1366                _ => 1isize,
1367            },
1368            (SyntaxKind::ObjectList, 2usize, _) => match terminal {
1369                SyntaxKind::BlankNodeLabel
1370                | SyntaxKind::Decimal
1371                | SyntaxKind::Double
1372                | SyntaxKind::FalseLit
1373                | SyntaxKind::Integer
1374                | SyntaxKind::Iriref
1375                | SyntaxKind::PnameLn
1376                | SyntaxKind::PnameNs
1377                | SyntaxKind::StringLiteralLongQuote
1378                | SyntaxKind::StringLiteralLongSingleQuote
1379                | SyntaxKind::StringLiteralQuote
1380                | SyntaxKind::StringLiteralSingleQuote
1381                | SyntaxKind::TrueLit
1382                | SyntaxKind::ClOpen
1383                | SyntaxKind::SqOpen => 0,
1384                _ => 1isize,
1385            },
1386            (SyntaxKind::ObjectList, 3usize, _) => match terminal {
1387                SyntaxKind::Alit => 3isize,
1388                SyntaxKind::BlankNodeLabel => 2isize,
1389                SyntaxKind::Decimal => 2isize,
1390                SyntaxKind::Double => 2isize,
1391                SyntaxKind::FalseLit => 2isize,
1392                SyntaxKind::Integer => 2isize,
1393                SyntaxKind::Iriref => 2isize,
1394                SyntaxKind::Langtag => 3isize,
1395                SyntaxKind::PnameLn => 2isize,
1396                SyntaxKind::PnameNs => 2isize,
1397                SyntaxKind::StringLiteralLongQuote => 2isize,
1398                SyntaxKind::StringLiteralLongSingleQuote => 2isize,
1399                SyntaxKind::StringLiteralQuote => 2isize,
1400                SyntaxKind::StringLiteralSingleQuote => 2isize,
1401                SyntaxKind::TrueLit => 2isize,
1402                SyntaxKind::BaseToken => 3isize,
1403                SyntaxKind::ClClose => 3isize,
1404                SyntaxKind::ClOpen => 2isize,
1405                SyntaxKind::Colon => 3isize,
1406                SyntaxKind::Datatype => 3isize,
1407                SyntaxKind::PrefixToken => 3isize,
1408                SyntaxKind::SparqlBaseToken => 3isize,
1409                SyntaxKind::SparqlPrefixToken => 3isize,
1410                SyntaxKind::SqClose => 3isize,
1411                SyntaxKind::SqOpen => 2isize,
1412                SyntaxKind::Stop => 3isize,
1413                _ => 0,
1414            },
1415            (SyntaxKind::ObjectList, 4usize, _) => match terminal {
1416                SyntaxKind::BlankNodeLabel
1417                | SyntaxKind::Decimal
1418                | SyntaxKind::Double
1419                | SyntaxKind::FalseLit
1420                | SyntaxKind::Integer
1421                | SyntaxKind::Iriref
1422                | SyntaxKind::PnameLn
1423                | SyntaxKind::PnameNs
1424                | SyntaxKind::StringLiteralLongQuote
1425                | SyntaxKind::StringLiteralLongSingleQuote
1426                | SyntaxKind::StringLiteralQuote
1427                | SyntaxKind::StringLiteralSingleQuote
1428                | SyntaxKind::TrueLit
1429                | SyntaxKind::ClOpen
1430                | SyntaxKind::SqOpen => 0,
1431                _ => 1isize,
1432            },
1433            (SyntaxKind::Predicate, 1usize, _) => match terminal {
1434                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
1435                _ => 1isize,
1436            },
1437            (SyntaxKind::PredicateObjectList, 3usize, _) => match terminal {
1438                SyntaxKind::BlankNodeLabel
1439                | SyntaxKind::Decimal
1440                | SyntaxKind::Double
1441                | SyntaxKind::FalseLit
1442                | SyntaxKind::Integer
1443                | SyntaxKind::Iriref
1444                | SyntaxKind::PnameLn
1445                | SyntaxKind::PnameNs
1446                | SyntaxKind::StringLiteralLongQuote
1447                | SyntaxKind::StringLiteralLongSingleQuote
1448                | SyntaxKind::StringLiteralQuote
1449                | SyntaxKind::StringLiteralSingleQuote
1450                | SyntaxKind::TrueLit
1451                | SyntaxKind::ClOpen
1452                | SyntaxKind::SqOpen => 0,
1453                _ => 1isize,
1454            },
1455            (SyntaxKind::PredicateObjectList, 4usize, _) => match terminal {
1456                SyntaxKind::Alit
1457                | SyntaxKind::Iriref
1458                | SyntaxKind::PnameLn
1459                | SyntaxKind::PnameNs => 0,
1460                _ => 1isize,
1461            },
1462            (SyntaxKind::PredicateObjectList, 5usize, _) => match terminal {
1463                SyntaxKind::Colon => 0,
1464                _ => 2isize,
1465            },
1466            (SyntaxKind::PredicateObjectList, 6usize, _) => match terminal {
1467                SyntaxKind::BlankNodeLabel
1468                | SyntaxKind::Decimal
1469                | SyntaxKind::Double
1470                | SyntaxKind::FalseLit
1471                | SyntaxKind::Integer
1472                | SyntaxKind::Iriref
1473                | SyntaxKind::PnameLn
1474                | SyntaxKind::PnameNs
1475                | SyntaxKind::StringLiteralLongQuote
1476                | SyntaxKind::StringLiteralLongSingleQuote
1477                | SyntaxKind::StringLiteralQuote
1478                | SyntaxKind::StringLiteralSingleQuote
1479                | SyntaxKind::TrueLit
1480                | SyntaxKind::ClOpen
1481                | SyntaxKind::SqOpen => 0,
1482                _ => 1isize,
1483            },
1484            (SyntaxKind::PredicateObjectList, 7usize, _) => match terminal {
1485                SyntaxKind::Alit
1486                | SyntaxKind::Iriref
1487                | SyntaxKind::PnameLn
1488                | SyntaxKind::PnameNs => 0,
1489                _ => 1isize,
1490            },
1491            (SyntaxKind::PrefixId, 1usize, _) => match terminal {
1492                SyntaxKind::Stop => 0,
1493                _ => 3isize,
1494            },
1495            (SyntaxKind::PrefixId, 2usize, _) => match terminal {
1496                SyntaxKind::Alit => 4isize,
1497                SyntaxKind::BlankNodeLabel => 4isize,
1498                SyntaxKind::Decimal => 4isize,
1499                SyntaxKind::Double => 4isize,
1500                SyntaxKind::FalseLit => 4isize,
1501                SyntaxKind::Integer => 4isize,
1502                SyntaxKind::Langtag => 4isize,
1503                SyntaxKind::PnameLn => 4isize,
1504                SyntaxKind::PnameNs => 4isize,
1505                SyntaxKind::StringLiteralLongQuote => 4isize,
1506                SyntaxKind::StringLiteralLongSingleQuote => 4isize,
1507                SyntaxKind::StringLiteralQuote => 4isize,
1508                SyntaxKind::StringLiteralSingleQuote => 4isize,
1509                SyntaxKind::TrueLit => 4isize,
1510                SyntaxKind::BaseToken => 4isize,
1511                SyntaxKind::ClClose => 4isize,
1512                SyntaxKind::ClOpen => 4isize,
1513                SyntaxKind::Colon => 4isize,
1514                SyntaxKind::Comma => 4isize,
1515                SyntaxKind::Datatype => 4isize,
1516                SyntaxKind::PrefixToken => 4isize,
1517                SyntaxKind::SparqlBaseToken => 4isize,
1518                SyntaxKind::SparqlPrefixToken => 4isize,
1519                SyntaxKind::SqClose => 4isize,
1520                SyntaxKind::SqOpen => 4isize,
1521                SyntaxKind::Stop => 1isize,
1522                _ => 0,
1523            },
1524            (SyntaxKind::PrefixId, 3usize, _) => match terminal {
1525                SyntaxKind::Alit => 5isize,
1526                SyntaxKind::BlankNodeLabel => 5isize,
1527                SyntaxKind::Decimal => 5isize,
1528                SyntaxKind::Double => 5isize,
1529                SyntaxKind::FalseLit => 5isize,
1530                SyntaxKind::Integer => 5isize,
1531                SyntaxKind::Iriref => 1isize,
1532                SyntaxKind::Langtag => 5isize,
1533                SyntaxKind::PnameLn => 5isize,
1534                SyntaxKind::StringLiteralLongQuote => 5isize,
1535                SyntaxKind::StringLiteralLongSingleQuote => 5isize,
1536                SyntaxKind::StringLiteralQuote => 5isize,
1537                SyntaxKind::StringLiteralSingleQuote => 5isize,
1538                SyntaxKind::TrueLit => 5isize,
1539                SyntaxKind::BaseToken => 5isize,
1540                SyntaxKind::ClClose => 5isize,
1541                SyntaxKind::ClOpen => 5isize,
1542                SyntaxKind::Colon => 5isize,
1543                SyntaxKind::Comma => 5isize,
1544                SyntaxKind::Datatype => 5isize,
1545                SyntaxKind::PrefixToken => 5isize,
1546                SyntaxKind::SparqlBaseToken => 5isize,
1547                SyntaxKind::SparqlPrefixToken => 5isize,
1548                SyntaxKind::SqClose => 5isize,
1549                SyntaxKind::SqOpen => 5isize,
1550                SyntaxKind::Stop => 2isize,
1551                _ => 0,
1552            },
1553            (SyntaxKind::PrefixId, 4usize, _) => match terminal {
1554                SyntaxKind::Alit => 105isize,
1555                SyntaxKind::BlankNodeLabel => 105isize,
1556                SyntaxKind::Decimal => 105isize,
1557                SyntaxKind::Double => 105isize,
1558                SyntaxKind::FalseLit => 105isize,
1559                SyntaxKind::Integer => 105isize,
1560                SyntaxKind::Iriref => 101isize,
1561                SyntaxKind::Langtag => 105isize,
1562                SyntaxKind::PnameLn => 105isize,
1563                SyntaxKind::PnameNs => 100isize,
1564                SyntaxKind::StringLiteralLongQuote => 105isize,
1565                SyntaxKind::StringLiteralLongSingleQuote => 105isize,
1566                SyntaxKind::StringLiteralQuote => 105isize,
1567                SyntaxKind::StringLiteralSingleQuote => 105isize,
1568                SyntaxKind::TrueLit => 105isize,
1569                SyntaxKind::BaseToken => 105isize,
1570                SyntaxKind::ClClose => 105isize,
1571                SyntaxKind::ClOpen => 105isize,
1572                SyntaxKind::Colon => 105isize,
1573                SyntaxKind::Comma => 105isize,
1574                SyntaxKind::Datatype => 105isize,
1575                SyntaxKind::SparqlBaseToken => 105isize,
1576                SyntaxKind::SparqlPrefixToken => 105isize,
1577                SyntaxKind::SqClose => 105isize,
1578                SyntaxKind::SqOpen => 105isize,
1579                SyntaxKind::Stop => 102isize,
1580                _ => 0,
1581            },
1582            (SyntaxKind::SparqlBase, 1usize, _) => match terminal {
1583                SyntaxKind::Iriref => 0,
1584                _ => 1isize,
1585            },
1586            (SyntaxKind::SparqlBase, 2usize, _) => match terminal {
1587                SyntaxKind::Alit => 101isize,
1588                SyntaxKind::BlankNodeLabel => 101isize,
1589                SyntaxKind::Decimal => 101isize,
1590                SyntaxKind::Double => 101isize,
1591                SyntaxKind::FalseLit => 101isize,
1592                SyntaxKind::Integer => 101isize,
1593                SyntaxKind::Iriref => 100isize,
1594                SyntaxKind::Langtag => 101isize,
1595                SyntaxKind::PnameLn => 101isize,
1596                SyntaxKind::PnameNs => 101isize,
1597                SyntaxKind::StringLiteralLongQuote => 101isize,
1598                SyntaxKind::StringLiteralLongSingleQuote => 101isize,
1599                SyntaxKind::StringLiteralQuote => 101isize,
1600                SyntaxKind::StringLiteralSingleQuote => 101isize,
1601                SyntaxKind::TrueLit => 101isize,
1602                SyntaxKind::BaseToken => 101isize,
1603                SyntaxKind::ClClose => 101isize,
1604                SyntaxKind::ClOpen => 101isize,
1605                SyntaxKind::Colon => 101isize,
1606                SyntaxKind::Comma => 101isize,
1607                SyntaxKind::Datatype => 101isize,
1608                SyntaxKind::PrefixToken => 101isize,
1609                SyntaxKind::SparqlPrefixToken => 101isize,
1610                SyntaxKind::SqClose => 101isize,
1611                SyntaxKind::SqOpen => 101isize,
1612                SyntaxKind::Stop => 101isize,
1613                _ => 0,
1614            },
1615            (SyntaxKind::SparqlPrefix, 1usize, _) => match terminal {
1616                SyntaxKind::Iriref => 0,
1617                _ => 1isize,
1618            },
1619            (SyntaxKind::SparqlPrefix, 2usize, _) => match terminal {
1620                SyntaxKind::Alit => 2isize,
1621                SyntaxKind::BlankNodeLabel => 2isize,
1622                SyntaxKind::Decimal => 2isize,
1623                SyntaxKind::Double => 2isize,
1624                SyntaxKind::FalseLit => 2isize,
1625                SyntaxKind::Integer => 2isize,
1626                SyntaxKind::Iriref => 1isize,
1627                SyntaxKind::Langtag => 2isize,
1628                SyntaxKind::PnameLn => 2isize,
1629                SyntaxKind::StringLiteralLongQuote => 2isize,
1630                SyntaxKind::StringLiteralLongSingleQuote => 2isize,
1631                SyntaxKind::StringLiteralQuote => 2isize,
1632                SyntaxKind::StringLiteralSingleQuote => 2isize,
1633                SyntaxKind::TrueLit => 2isize,
1634                SyntaxKind::BaseToken => 2isize,
1635                SyntaxKind::ClClose => 2isize,
1636                SyntaxKind::ClOpen => 2isize,
1637                SyntaxKind::Colon => 2isize,
1638                SyntaxKind::Comma => 2isize,
1639                SyntaxKind::Datatype => 2isize,
1640                SyntaxKind::PrefixToken => 2isize,
1641                SyntaxKind::SparqlBaseToken => 2isize,
1642                SyntaxKind::SparqlPrefixToken => 2isize,
1643                SyntaxKind::SqClose => 2isize,
1644                SyntaxKind::SqOpen => 2isize,
1645                SyntaxKind::Stop => 2isize,
1646                _ => 0,
1647            },
1648            (SyntaxKind::SparqlPrefix, 3usize, _) => match terminal {
1649                SyntaxKind::Alit => 102isize,
1650                SyntaxKind::BlankNodeLabel => 102isize,
1651                SyntaxKind::Decimal => 102isize,
1652                SyntaxKind::Double => 102isize,
1653                SyntaxKind::FalseLit => 102isize,
1654                SyntaxKind::Integer => 102isize,
1655                SyntaxKind::Iriref => 101isize,
1656                SyntaxKind::Langtag => 102isize,
1657                SyntaxKind::PnameLn => 102isize,
1658                SyntaxKind::PnameNs => 100isize,
1659                SyntaxKind::StringLiteralLongQuote => 102isize,
1660                SyntaxKind::StringLiteralLongSingleQuote => 102isize,
1661                SyntaxKind::StringLiteralQuote => 102isize,
1662                SyntaxKind::StringLiteralSingleQuote => 102isize,
1663                SyntaxKind::TrueLit => 102isize,
1664                SyntaxKind::BaseToken => 102isize,
1665                SyntaxKind::ClClose => 102isize,
1666                SyntaxKind::ClOpen => 102isize,
1667                SyntaxKind::Colon => 102isize,
1668                SyntaxKind::Comma => 102isize,
1669                SyntaxKind::Datatype => 102isize,
1670                SyntaxKind::PrefixToken => 102isize,
1671                SyntaxKind::SparqlBaseToken => 102isize,
1672                SyntaxKind::SqClose => 102isize,
1673                SyntaxKind::SqOpen => 102isize,
1674                SyntaxKind::Stop => 102isize,
1675                _ => 0,
1676            },
1677            (SyntaxKind::Statement, 1usize, _) => match terminal {
1678                SyntaxKind::BlankNodeLabel
1679                | SyntaxKind::Iriref
1680                | SyntaxKind::PnameLn
1681                | SyntaxKind::PnameNs
1682                | SyntaxKind::BaseToken
1683                | SyntaxKind::ClOpen
1684                | SyntaxKind::PrefixToken
1685                | SyntaxKind::SparqlBaseToken
1686                | SyntaxKind::SparqlPrefixToken
1687                | SyntaxKind::SqOpen => 0,
1688                _ => 1isize,
1689            },
1690            (SyntaxKind::Statement, 2usize, _) => match terminal {
1691                SyntaxKind::Alit => 101isize,
1692                SyntaxKind::BlankNodeLabel => 101isize,
1693                SyntaxKind::Decimal => 101isize,
1694                SyntaxKind::Double => 101isize,
1695                SyntaxKind::FalseLit => 101isize,
1696                SyntaxKind::Integer => 101isize,
1697                SyntaxKind::Iriref => 100isize,
1698                SyntaxKind::Langtag => 101isize,
1699                SyntaxKind::PnameLn => 101isize,
1700                SyntaxKind::PnameNs => 100isize,
1701                SyntaxKind::StringLiteralLongQuote => 101isize,
1702                SyntaxKind::StringLiteralLongSingleQuote => 101isize,
1703                SyntaxKind::StringLiteralQuote => 101isize,
1704                SyntaxKind::StringLiteralSingleQuote => 101isize,
1705                SyntaxKind::TrueLit => 101isize,
1706                SyntaxKind::ClClose => 101isize,
1707                SyntaxKind::ClOpen => 101isize,
1708                SyntaxKind::Colon => 101isize,
1709                SyntaxKind::Comma => 101isize,
1710                SyntaxKind::Datatype => 101isize,
1711                SyntaxKind::SqClose => 101isize,
1712                SyntaxKind::SqOpen => 101isize,
1713                SyntaxKind::Stop => 101isize,
1714                _ => 0,
1715            },
1716            (SyntaxKind::Statement, 3usize, _) => match terminal {
1717                SyntaxKind::Stop => 0,
1718                _ => 3isize,
1719            },
1720            (SyntaxKind::Statement, 4usize, _) => match terminal {
1721                SyntaxKind::BlankNodeLabel
1722                | SyntaxKind::Iriref
1723                | SyntaxKind::PnameLn
1724                | SyntaxKind::PnameNs
1725                | SyntaxKind::ClOpen
1726                | SyntaxKind::SqOpen => 0,
1727                _ => 1isize,
1728            },
1729            (SyntaxKind::Subject, 1usize, _) => match terminal {
1730                SyntaxKind::BlankNodeLabel
1731                | SyntaxKind::Iriref
1732                | SyntaxKind::PnameLn
1733                | SyntaxKind::PnameNs
1734                | SyntaxKind::ClOpen
1735                | SyntaxKind::SqOpen => 0,
1736                _ => 1isize,
1737            },
1738            (SyntaxKind::Subject, 2usize, _) => match terminal {
1739                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
1740                _ => 1isize,
1741            },
1742            (SyntaxKind::Subject, 3usize, _) => match terminal {
1743                SyntaxKind::BlankNodeLabel | SyntaxKind::SqOpen => 0,
1744                _ => 1isize,
1745            },
1746            (SyntaxKind::Subject, 4usize, _) => match terminal {
1747                SyntaxKind::ClOpen => 0,
1748                _ => 2isize,
1749            },
1750            (SyntaxKind::Triples, 1usize, _) => match terminal {
1751                SyntaxKind::BlankNodeLabel
1752                | SyntaxKind::Iriref
1753                | SyntaxKind::PnameLn
1754                | SyntaxKind::PnameNs
1755                | SyntaxKind::ClOpen
1756                | SyntaxKind::SqOpen => 0,
1757                _ => 1isize,
1758            },
1759            (SyntaxKind::Triples, 3usize, _) => match terminal {
1760                SyntaxKind::Alit
1761                | SyntaxKind::Iriref
1762                | SyntaxKind::PnameLn
1763                | SyntaxKind::PnameNs => 0,
1764                _ => 1isize,
1765            },
1766            (SyntaxKind::Triples, 4usize, _) => match terminal {
1767                SyntaxKind::Alit => 2isize,
1768                SyntaxKind::BlankNodeLabel => 3isize,
1769                SyntaxKind::Decimal => 3isize,
1770                SyntaxKind::Double => 3isize,
1771                SyntaxKind::FalseLit => 3isize,
1772                SyntaxKind::Integer => 3isize,
1773                SyntaxKind::Iriref => 2isize,
1774                SyntaxKind::Langtag => 3isize,
1775                SyntaxKind::PnameLn => 2isize,
1776                SyntaxKind::PnameNs => 2isize,
1777                SyntaxKind::StringLiteralLongQuote => 3isize,
1778                SyntaxKind::StringLiteralLongSingleQuote => 3isize,
1779                SyntaxKind::StringLiteralQuote => 3isize,
1780                SyntaxKind::StringLiteralSingleQuote => 3isize,
1781                SyntaxKind::TrueLit => 3isize,
1782                SyntaxKind::BaseToken => 3isize,
1783                SyntaxKind::ClClose => 3isize,
1784                SyntaxKind::ClOpen => 3isize,
1785                SyntaxKind::Colon => 3isize,
1786                SyntaxKind::Comma => 3isize,
1787                SyntaxKind::Datatype => 3isize,
1788                SyntaxKind::PrefixToken => 3isize,
1789                SyntaxKind::SparqlBaseToken => 3isize,
1790                SyntaxKind::SparqlPrefixToken => 3isize,
1791                SyntaxKind::SqClose => 3isize,
1792                SyntaxKind::Stop => 3isize,
1793                _ => 0,
1794            },
1795            (SyntaxKind::Triples, 5usize, _) => match terminal {
1796                SyntaxKind::Alit
1797                | SyntaxKind::Iriref
1798                | SyntaxKind::PnameLn
1799                | SyntaxKind::PnameNs => 0,
1800                _ => 1isize,
1801            },
1802            (SyntaxKind::Triples, 6usize, _) => match terminal {
1803                SyntaxKind::BlankNodeLabel
1804                | SyntaxKind::Iriref
1805                | SyntaxKind::PnameLn
1806                | SyntaxKind::PnameNs
1807                | SyntaxKind::ClOpen
1808                | SyntaxKind::SqOpen => 0,
1809                _ => 1isize,
1810            },
1811            (SyntaxKind::TurtleDoc, 2usize, _) => match terminal {
1812                SyntaxKind::BlankNodeLabel
1813                | SyntaxKind::Iriref
1814                | SyntaxKind::PnameLn
1815                | SyntaxKind::PnameNs
1816                | SyntaxKind::BaseToken
1817                | SyntaxKind::ClOpen
1818                | SyntaxKind::PrefixToken
1819                | SyntaxKind::SparqlBaseToken
1820                | SyntaxKind::SparqlPrefixToken
1821                | SyntaxKind::SqOpen => 0,
1822                _ => 1isize,
1823            },
1824            (SyntaxKind::Verb, 1usize, _) => match terminal {
1825                SyntaxKind::Alit
1826                | SyntaxKind::Iriref
1827                | SyntaxKind::PnameLn
1828                | SyntaxKind::PnameNs => 0,
1829                _ => 1isize,
1830            },
1831            (SyntaxKind::Verb, 2usize, _) => match terminal {
1832                SyntaxKind::Iriref | SyntaxKind::PnameLn | SyntaxKind::PnameNs => 0,
1833                _ => 1isize,
1834            },
1835            (SyntaxKind::Verb, 3usize, _) => match terminal {
1836                SyntaxKind::Alit => 0,
1837                _ => 1isize,
1838            },
1839            _ => 0,
1840        }
1841    }
1842    impl crate::a_star::ParserTrait for Rule {
1843        type Kind = SyntaxKind;
1844        fn step(
1845            &self,
1846            element: &crate::a_star::Element<Self>,
1847            state: &mut crate::a_star::AStar<Self>,
1848        ) {
1849            match (self.kind, self.state) {
1850                (SyntaxKind::TurtleDoc, 0usize) => {
1851                    if let Some(parent) = element.pop() {
1852                        state.add_element(parent);
1853                    }
1854                }
1855                (SyntaxKind::TurtleDoc, 1usize) => {
1856                    state.add_element(element.pop_push(Rule {
1857                        kind: self.kind,
1858                        state: 2usize,
1859                    }));
1860                    state.add_element(element.pop_push(Rule {
1861                        kind: self.kind,
1862                        state: 0usize,
1863                    }));
1864                }
1865                (SyntaxKind::TurtleDoc, 2usize) => {
1866                    state.add_element_checked(
1867                        element
1868                            .pop_push(Rule {
1869                                kind: self.kind,
1870                                state: 1usize,
1871                            })
1872                            .push(Rule {
1873                                kind: SyntaxKind::Statement,
1874                                state: 1usize,
1875                            }),
1876                        SyntaxKind::Statement,
1877                    );
1878                }
1879                (SyntaxKind::Statement, 0usize) => {
1880                    if let Some(parent) = element.pop() {
1881                        state.add_element(parent);
1882                    }
1883                }
1884                (SyntaxKind::Statement, 1usize) => {
1885                    state.add_element(element.pop_push(Rule {
1886                        kind: self.kind,
1887                        state: 2usize,
1888                    }));
1889                    state.add_element(element.pop_push(Rule {
1890                        kind: self.kind,
1891                        state: 4usize,
1892                    }));
1893                }
1894                (SyntaxKind::Statement, 2usize) => {
1895                    state.add_element_checked(
1896                        element
1897                            .pop_push(Rule {
1898                                kind: self.kind,
1899                                state: 0usize,
1900                            })
1901                            .push(Rule {
1902                                kind: SyntaxKind::Directive,
1903                                state: 1usize,
1904                            }),
1905                        SyntaxKind::Directive,
1906                    );
1907                }
1908                (SyntaxKind::Statement, 3usize) => {
1909                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Stop);
1910                    state.add_element(matched.pop_push(Rule {
1911                        kind: self.kind,
1912                        state: 0usize,
1913                    }));
1914                    if let Some(fb) = fb {
1915                        state.add_element(fb.pop_push(Rule {
1916                            kind: self.kind,
1917                            state: 0usize,
1918                        }));
1919                    }
1920                }
1921                (SyntaxKind::Statement, 4usize) => {
1922                    state.add_element_checked(
1923                        element
1924                            .pop_push(Rule {
1925                                kind: self.kind,
1926                                state: 3usize,
1927                            })
1928                            .push(Rule {
1929                                kind: SyntaxKind::Triples,
1930                                state: 1usize,
1931                            }),
1932                        SyntaxKind::Triples,
1933                    );
1934                }
1935                (SyntaxKind::Directive, 0usize) => {
1936                    if let Some(parent) = element.pop() {
1937                        state.add_element(parent);
1938                    }
1939                }
1940                (SyntaxKind::Directive, 1usize) => {
1941                    state.add_element(element.pop_push(Rule {
1942                        kind: self.kind,
1943                        state: 2usize,
1944                    }));
1945                    state.add_element(element.pop_push(Rule {
1946                        kind: self.kind,
1947                        state: 3usize,
1948                    }));
1949                    state.add_element(element.pop_push(Rule {
1950                        kind: self.kind,
1951                        state: 4usize,
1952                    }));
1953                    state.add_element(element.pop_push(Rule {
1954                        kind: self.kind,
1955                        state: 5usize,
1956                    }));
1957                }
1958                (SyntaxKind::Directive, 2usize) => {
1959                    state.add_element_checked(
1960                        element
1961                            .pop_push(Rule {
1962                                kind: self.kind,
1963                                state: 0usize,
1964                            })
1965                            .push(Rule {
1966                                kind: SyntaxKind::PrefixId,
1967                                state: 4usize,
1968                            }),
1969                        SyntaxKind::PrefixId,
1970                    );
1971                }
1972                (SyntaxKind::Directive, 3usize) => {
1973                    state.add_element_checked(
1974                        element
1975                            .pop_push(Rule {
1976                                kind: self.kind,
1977                                state: 0usize,
1978                            })
1979                            .push(Rule {
1980                                kind: SyntaxKind::Base,
1981                                state: 3usize,
1982                            }),
1983                        SyntaxKind::Base,
1984                    );
1985                }
1986                (SyntaxKind::Directive, 4usize) => {
1987                    state.add_element_checked(
1988                        element
1989                            .pop_push(Rule {
1990                                kind: self.kind,
1991                                state: 0usize,
1992                            })
1993                            .push(Rule {
1994                                kind: SyntaxKind::SparqlPrefix,
1995                                state: 3usize,
1996                            }),
1997                        SyntaxKind::SparqlPrefix,
1998                    );
1999                }
2000                (SyntaxKind::Directive, 5usize) => {
2001                    state.add_element_checked(
2002                        element
2003                            .pop_push(Rule {
2004                                kind: self.kind,
2005                                state: 0usize,
2006                            })
2007                            .push(Rule {
2008                                kind: SyntaxKind::SparqlBase,
2009                                state: 2usize,
2010                            }),
2011                        SyntaxKind::SparqlBase,
2012                    );
2013                }
2014                (SyntaxKind::PrefixId, 0usize) => {
2015                    if let Some(parent) = element.pop() {
2016                        state.add_element(parent);
2017                    }
2018                }
2019                (SyntaxKind::PrefixId, 1usize) => {
2020                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Stop);
2021                    state.add_element(matched.pop_push(Rule {
2022                        kind: self.kind,
2023                        state: 0usize,
2024                    }));
2025                    if let Some(fb) = fb {
2026                        state.add_element(fb.pop_push(Rule {
2027                            kind: self.kind,
2028                            state: 0usize,
2029                        }));
2030                    }
2031                }
2032                (SyntaxKind::PrefixId, 2usize) => {
2033                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Iriref);
2034                    state.add_element(matched.pop_push(Rule {
2035                        kind: self.kind,
2036                        state: 1usize,
2037                    }));
2038                    if let Some(fb) = fb {
2039                        state.add_element(fb.pop_push(Rule {
2040                            kind: self.kind,
2041                            state: 1usize,
2042                        }));
2043                    }
2044                }
2045                (SyntaxKind::PrefixId, 3usize) => {
2046                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::PnameNs);
2047                    state.add_element(matched.pop_push(Rule {
2048                        kind: self.kind,
2049                        state: 2usize,
2050                    }));
2051                    if let Some(fb) = fb {
2052                        state.add_element(fb.pop_push(Rule {
2053                            kind: self.kind,
2054                            state: 2usize,
2055                        }));
2056                    }
2057                }
2058                (SyntaxKind::PrefixId, 4usize) => {
2059                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::PrefixToken);
2060                    state.add_element(matched.pop_push(Rule {
2061                        kind: self.kind,
2062                        state: 3usize,
2063                    }));
2064                    if let Some(fb) = fb {
2065                        state.add_element(fb.pop_push(Rule {
2066                            kind: self.kind,
2067                            state: 3usize,
2068                        }));
2069                    }
2070                }
2071                (SyntaxKind::Base, 0usize) => {
2072                    if let Some(parent) = element.pop() {
2073                        state.add_element(parent);
2074                    }
2075                }
2076                (SyntaxKind::Base, 1usize) => {
2077                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Stop);
2078                    state.add_element(matched.pop_push(Rule {
2079                        kind: self.kind,
2080                        state: 0usize,
2081                    }));
2082                    if let Some(fb) = fb {
2083                        state.add_element(fb.pop_push(Rule {
2084                            kind: self.kind,
2085                            state: 0usize,
2086                        }));
2087                    }
2088                }
2089                (SyntaxKind::Base, 2usize) => {
2090                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Iriref);
2091                    state.add_element(matched.pop_push(Rule {
2092                        kind: self.kind,
2093                        state: 1usize,
2094                    }));
2095                    if let Some(fb) = fb {
2096                        state.add_element(fb.pop_push(Rule {
2097                            kind: self.kind,
2098                            state: 1usize,
2099                        }));
2100                    }
2101                }
2102                (SyntaxKind::Base, 3usize) => {
2103                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::BaseToken);
2104                    state.add_element(matched.pop_push(Rule {
2105                        kind: self.kind,
2106                        state: 2usize,
2107                    }));
2108                    if let Some(fb) = fb {
2109                        state.add_element(fb.pop_push(Rule {
2110                            kind: self.kind,
2111                            state: 2usize,
2112                        }));
2113                    }
2114                }
2115                (SyntaxKind::SparqlBase, 0usize) => {
2116                    if let Some(parent) = element.pop() {
2117                        state.add_element(parent);
2118                    }
2119                }
2120                (SyntaxKind::SparqlBase, 1usize) => {
2121                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Iriref);
2122                    state.add_element(matched.pop_push(Rule {
2123                        kind: self.kind,
2124                        state: 0usize,
2125                    }));
2126                    if let Some(fb) = fb {
2127                        state.add_element(fb.pop_push(Rule {
2128                            kind: self.kind,
2129                            state: 0usize,
2130                        }));
2131                    }
2132                }
2133                (SyntaxKind::SparqlBase, 2usize) => {
2134                    let (matched, fb) =
2135                        state.expect_as_inline(element, SyntaxKind::SparqlBaseToken);
2136                    state.add_element(matched.pop_push(Rule {
2137                        kind: self.kind,
2138                        state: 1usize,
2139                    }));
2140                    if let Some(fb) = fb {
2141                        state.add_element(fb.pop_push(Rule {
2142                            kind: self.kind,
2143                            state: 1usize,
2144                        }));
2145                    }
2146                }
2147                (SyntaxKind::SparqlPrefix, 0usize) => {
2148                    if let Some(parent) = element.pop() {
2149                        state.add_element(parent);
2150                    }
2151                }
2152                (SyntaxKind::SparqlPrefix, 1usize) => {
2153                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Iriref);
2154                    state.add_element(matched.pop_push(Rule {
2155                        kind: self.kind,
2156                        state: 0usize,
2157                    }));
2158                    if let Some(fb) = fb {
2159                        state.add_element(fb.pop_push(Rule {
2160                            kind: self.kind,
2161                            state: 0usize,
2162                        }));
2163                    }
2164                }
2165                (SyntaxKind::SparqlPrefix, 2usize) => {
2166                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::PnameNs);
2167                    state.add_element(matched.pop_push(Rule {
2168                        kind: self.kind,
2169                        state: 1usize,
2170                    }));
2171                    if let Some(fb) = fb {
2172                        state.add_element(fb.pop_push(Rule {
2173                            kind: self.kind,
2174                            state: 1usize,
2175                        }));
2176                    }
2177                }
2178                (SyntaxKind::SparqlPrefix, 3usize) => {
2179                    let (matched, fb) =
2180                        state.expect_as_inline(element, SyntaxKind::SparqlPrefixToken);
2181                    state.add_element(matched.pop_push(Rule {
2182                        kind: self.kind,
2183                        state: 2usize,
2184                    }));
2185                    if let Some(fb) = fb {
2186                        state.add_element(fb.pop_push(Rule {
2187                            kind: self.kind,
2188                            state: 2usize,
2189                        }));
2190                    }
2191                }
2192                (SyntaxKind::Triples, 0usize) => {
2193                    if let Some(parent) = element.pop() {
2194                        state.add_element(parent);
2195                    }
2196                }
2197                (SyntaxKind::Triples, 1usize) => {
2198                    state.add_element(element.pop_push(Rule {
2199                        kind: self.kind,
2200                        state: 4usize,
2201                    }));
2202                    state.add_element(element.pop_push(Rule {
2203                        kind: self.kind,
2204                        state: 6usize,
2205                    }));
2206                }
2207                (SyntaxKind::Triples, 2usize) => {
2208                    state.add_element(element.pop_push(Rule {
2209                        kind: self.kind,
2210                        state: 0usize,
2211                    }));
2212                    state.add_element(element.pop_push(Rule {
2213                        kind: self.kind,
2214                        state: 3usize,
2215                    }));
2216                }
2217                (SyntaxKind::Triples, 3usize) => {
2218                    state.add_element_checked(
2219                        element
2220                            .pop_push(Rule {
2221                                kind: self.kind,
2222                                state: 0usize,
2223                            })
2224                            .push(Rule {
2225                                kind: SyntaxKind::PredicateObjectList,
2226                                state: 7usize,
2227                            }),
2228                        SyntaxKind::PredicateObjectList,
2229                    );
2230                }
2231                (SyntaxKind::Triples, 4usize) => {
2232                    state.add_element_checked(
2233                        element
2234                            .pop_push(Rule {
2235                                kind: self.kind,
2236                                state: 2usize,
2237                            })
2238                            .push(Rule {
2239                                kind: SyntaxKind::BlankNodePropertyList,
2240                                state: 3usize,
2241                            }),
2242                        SyntaxKind::BlankNodePropertyList,
2243                    );
2244                }
2245                (SyntaxKind::Triples, 5usize) => {
2246                    state.add_element(element.pop_push(Rule {
2247                        kind: self.kind,
2248                        state: 3usize,
2249                    }));
2250                }
2251                (SyntaxKind::Triples, 6usize) => {
2252                    state.add_element_checked(
2253                        element
2254                            .pop_push(Rule {
2255                                kind: self.kind,
2256                                state: 5usize,
2257                            })
2258                            .push(Rule {
2259                                kind: SyntaxKind::Subject,
2260                                state: 1usize,
2261                            }),
2262                        SyntaxKind::Subject,
2263                    );
2264                }
2265                (SyntaxKind::PredicateObjectList, 0usize) => {
2266                    if let Some(parent) = element.pop() {
2267                        state.add_element(parent);
2268                    }
2269                }
2270                (SyntaxKind::PredicateObjectList, 1usize) => {
2271                    state.add_element(element.pop_push(Rule {
2272                        kind: self.kind,
2273                        state: 5usize,
2274                    }));
2275                    state.add_element(element.pop_push(Rule {
2276                        kind: self.kind,
2277                        state: 0usize,
2278                    }));
2279                }
2280                (SyntaxKind::PredicateObjectList, 2usize) => {
2281                    state.add_element(element.pop_push(Rule {
2282                        kind: self.kind,
2283                        state: 1usize,
2284                    }));
2285                    state.add_element(element.pop_push(Rule {
2286                        kind: self.kind,
2287                        state: 4usize,
2288                    }));
2289                }
2290                (SyntaxKind::PredicateObjectList, 3usize) => {
2291                    state.add_element_checked(
2292                        element
2293                            .pop_push(Rule {
2294                                kind: self.kind,
2295                                state: 1usize,
2296                            })
2297                            .push(Rule {
2298                                kind: SyntaxKind::ObjectList,
2299                                state: 4usize,
2300                            }),
2301                        SyntaxKind::ObjectList,
2302                    );
2303                }
2304                (SyntaxKind::PredicateObjectList, 4usize) => {
2305                    state.add_element_checked(
2306                        element
2307                            .pop_push(Rule {
2308                                kind: self.kind,
2309                                state: 3usize,
2310                            })
2311                            .push(Rule {
2312                                kind: SyntaxKind::Verb,
2313                                state: 1usize,
2314                            }),
2315                        SyntaxKind::Verb,
2316                    );
2317                }
2318                (SyntaxKind::PredicateObjectList, 5usize) => {
2319                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Colon);
2320                    state.add_element(matched.pop_push(Rule {
2321                        kind: self.kind,
2322                        state: 2usize,
2323                    }));
2324                    if let Some(fb) = fb {
2325                        state.add_element(fb.pop_push(Rule {
2326                            kind: self.kind,
2327                            state: 2usize,
2328                        }));
2329                    }
2330                }
2331                (SyntaxKind::PredicateObjectList, 6usize) => {
2332                    state.add_element(element.pop_push(Rule {
2333                        kind: self.kind,
2334                        state: 3usize,
2335                    }));
2336                }
2337                (SyntaxKind::PredicateObjectList, 7usize) => {
2338                    state.add_element_checked(
2339                        element
2340                            .pop_push(Rule {
2341                                kind: self.kind,
2342                                state: 6usize,
2343                            })
2344                            .push(Rule {
2345                                kind: SyntaxKind::Verb,
2346                                state: 1usize,
2347                            }),
2348                        SyntaxKind::Verb,
2349                    );
2350                }
2351                (SyntaxKind::ObjectList, 0usize) => {
2352                    if let Some(parent) = element.pop() {
2353                        state.add_element(parent);
2354                    }
2355                }
2356                (SyntaxKind::ObjectList, 1usize) => {
2357                    state.add_element(element.pop_push(Rule {
2358                        kind: self.kind,
2359                        state: 3usize,
2360                    }));
2361                    state.add_element(element.pop_push(Rule {
2362                        kind: self.kind,
2363                        state: 0usize,
2364                    }));
2365                }
2366                (SyntaxKind::ObjectList, 2usize) => {
2367                    state.add_element_checked(
2368                        element
2369                            .pop_push(Rule {
2370                                kind: self.kind,
2371                                state: 1usize,
2372                            })
2373                            .push(Rule {
2374                                kind: SyntaxKind::Object,
2375                                state: 1usize,
2376                            }),
2377                        SyntaxKind::Object,
2378                    );
2379                }
2380                (SyntaxKind::ObjectList, 3usize) => {
2381                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Comma);
2382                    state.add_element(matched.pop_push(Rule {
2383                        kind: self.kind,
2384                        state: 2usize,
2385                    }));
2386                    if let Some(fb) = fb {
2387                        state.add_element(fb.pop_push(Rule {
2388                            kind: self.kind,
2389                            state: 2usize,
2390                        }));
2391                    }
2392                }
2393                (SyntaxKind::ObjectList, 4usize) => {
2394                    state.add_element(element.pop_push(Rule {
2395                        kind: self.kind,
2396                        state: 2usize,
2397                    }));
2398                }
2399                (SyntaxKind::Verb, 0usize) => {
2400                    if let Some(parent) = element.pop() {
2401                        state.add_element(parent);
2402                    }
2403                }
2404                (SyntaxKind::Verb, 1usize) => {
2405                    state.add_element(element.pop_push(Rule {
2406                        kind: self.kind,
2407                        state: 2usize,
2408                    }));
2409                    state.add_element_checked(
2410                        element.pop_push(Rule {
2411                            kind: self.kind,
2412                            state: 3usize,
2413                        }),
2414                        SyntaxKind::Alit,
2415                    );
2416                }
2417                (SyntaxKind::Verb, 2usize) => {
2418                    state.add_element_checked(
2419                        element
2420                            .pop_push(Rule {
2421                                kind: self.kind,
2422                                state: 0usize,
2423                            })
2424                            .push(Rule {
2425                                kind: SyntaxKind::Predicate,
2426                                state: 1usize,
2427                            }),
2428                        SyntaxKind::Predicate,
2429                    );
2430                }
2431                (SyntaxKind::Verb, 3usize) => {
2432                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Alit);
2433                    state.add_element(matched.pop_push(Rule {
2434                        kind: self.kind,
2435                        state: 0usize,
2436                    }));
2437                    if let Some(fb) = fb {
2438                        state.add_element(fb.pop_push(Rule {
2439                            kind: self.kind,
2440                            state: 0usize,
2441                        }));
2442                    }
2443                }
2444                (SyntaxKind::Subject, 0usize) => {
2445                    if let Some(parent) = element.pop() {
2446                        state.add_element(parent);
2447                    }
2448                }
2449                (SyntaxKind::Subject, 1usize) => {
2450                    state.add_element(element.pop_push(Rule {
2451                        kind: self.kind,
2452                        state: 2usize,
2453                    }));
2454                    state.add_element(element.pop_push(Rule {
2455                        kind: self.kind,
2456                        state: 3usize,
2457                    }));
2458                    state.add_element(element.pop_push(Rule {
2459                        kind: self.kind,
2460                        state: 4usize,
2461                    }));
2462                }
2463                (SyntaxKind::Subject, 2usize) => {
2464                    state.add_element_checked(
2465                        element
2466                            .pop_push(Rule {
2467                                kind: self.kind,
2468                                state: 0usize,
2469                            })
2470                            .push(Rule {
2471                                kind: SyntaxKind::Iri,
2472                                state: 1usize,
2473                            }),
2474                        SyntaxKind::Iri,
2475                    );
2476                }
2477                (SyntaxKind::Subject, 3usize) => {
2478                    state.add_element_checked(
2479                        element
2480                            .pop_push(Rule {
2481                                kind: self.kind,
2482                                state: 0usize,
2483                            })
2484                            .push(Rule {
2485                                kind: SyntaxKind::BlankNode,
2486                                state: 1usize,
2487                            }),
2488                        SyntaxKind::BlankNode,
2489                    );
2490                }
2491                (SyntaxKind::Subject, 4usize) => {
2492                    state.add_element_checked(
2493                        element
2494                            .pop_push(Rule {
2495                                kind: self.kind,
2496                                state: 0usize,
2497                            })
2498                            .push(Rule {
2499                                kind: SyntaxKind::Collection,
2500                                state: 4usize,
2501                            }),
2502                        SyntaxKind::Collection,
2503                    );
2504                }
2505                (SyntaxKind::Predicate, 0usize) => {
2506                    if let Some(parent) = element.pop() {
2507                        state.add_element(parent);
2508                    }
2509                }
2510                (SyntaxKind::Predicate, 1usize) => {
2511                    state.add_element_checked(
2512                        element
2513                            .pop_push(Rule {
2514                                kind: self.kind,
2515                                state: 0usize,
2516                            })
2517                            .push(Rule {
2518                                kind: SyntaxKind::Iri,
2519                                state: 1usize,
2520                            }),
2521                        SyntaxKind::Iri,
2522                    );
2523                }
2524                (SyntaxKind::Object, 0usize) => {
2525                    if let Some(parent) = element.pop() {
2526                        state.add_element(parent);
2527                    }
2528                }
2529                (SyntaxKind::Object, 1usize) => {
2530                    state.add_element(element.pop_push(Rule {
2531                        kind: self.kind,
2532                        state: 2usize,
2533                    }));
2534                    state.add_element_checked(
2535                        element.pop_push(Rule {
2536                            kind: self.kind,
2537                            state: 3usize,
2538                        }),
2539                        SyntaxKind::BlankNodeLabel,
2540                    );
2541                    state.add_element(element.pop_push(Rule {
2542                        kind: self.kind,
2543                        state: 4usize,
2544                    }));
2545                    state.add_element(element.pop_push(Rule {
2546                        kind: self.kind,
2547                        state: 5usize,
2548                    }));
2549                    state.add_element(element.pop_push(Rule {
2550                        kind: self.kind,
2551                        state: 6usize,
2552                    }));
2553                }
2554                (SyntaxKind::Object, 2usize) => {
2555                    state.add_element_checked(
2556                        element
2557                            .pop_push(Rule {
2558                                kind: self.kind,
2559                                state: 0usize,
2560                            })
2561                            .push(Rule {
2562                                kind: SyntaxKind::Iri,
2563                                state: 1usize,
2564                            }),
2565                        SyntaxKind::Iri,
2566                    );
2567                }
2568                (SyntaxKind::Object, 3usize) => {
2569                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::BlankNodeLabel);
2570                    state.add_element(matched.pop_push(Rule {
2571                        kind: self.kind,
2572                        state: 0usize,
2573                    }));
2574                    if let Some(fb) = fb {
2575                        state.add_element(fb.pop_push(Rule {
2576                            kind: self.kind,
2577                            state: 0usize,
2578                        }));
2579                    }
2580                }
2581                (SyntaxKind::Object, 4usize) => {
2582                    state.add_element_checked(
2583                        element
2584                            .pop_push(Rule {
2585                                kind: self.kind,
2586                                state: 0usize,
2587                            })
2588                            .push(Rule {
2589                                kind: SyntaxKind::BlankNodePropertyList2,
2590                                state: 4usize,
2591                            }),
2592                        SyntaxKind::BlankNodePropertyList2,
2593                    );
2594                }
2595                (SyntaxKind::Object, 5usize) => {
2596                    state.add_element_checked(
2597                        element
2598                            .pop_push(Rule {
2599                                kind: self.kind,
2600                                state: 0usize,
2601                            })
2602                            .push(Rule {
2603                                kind: SyntaxKind::Collection,
2604                                state: 4usize,
2605                            }),
2606                        SyntaxKind::Collection,
2607                    );
2608                }
2609                (SyntaxKind::Object, 6usize) => {
2610                    state.add_element_checked(
2611                        element
2612                            .pop_push(Rule {
2613                                kind: self.kind,
2614                                state: 0usize,
2615                            })
2616                            .push(Rule {
2617                                kind: SyntaxKind::Literal,
2618                                state: 1usize,
2619                            }),
2620                        SyntaxKind::Literal,
2621                    );
2622                }
2623                (SyntaxKind::Literal, 0usize) => {
2624                    if let Some(parent) = element.pop() {
2625                        state.add_element(parent);
2626                    }
2627                }
2628                (SyntaxKind::Literal, 1usize) => {
2629                    state.add_element(element.pop_push(Rule {
2630                        kind: self.kind,
2631                        state: 2usize,
2632                    }));
2633                    state.add_element(element.pop_push(Rule {
2634                        kind: self.kind,
2635                        state: 3usize,
2636                    }));
2637                    state.add_element(element.pop_push(Rule {
2638                        kind: self.kind,
2639                        state: 4usize,
2640                    }));
2641                }
2642                (SyntaxKind::Literal, 2usize) => {
2643                    state.add_element_checked(
2644                        element
2645                            .pop_push(Rule {
2646                                kind: self.kind,
2647                                state: 0usize,
2648                            })
2649                            .push(Rule {
2650                                kind: SyntaxKind::Rdfliteral,
2651                                state: 6usize,
2652                            }),
2653                        SyntaxKind::Rdfliteral,
2654                    );
2655                }
2656                (SyntaxKind::Literal, 3usize) => {
2657                    state.add_element_checked(
2658                        element
2659                            .pop_push(Rule {
2660                                kind: self.kind,
2661                                state: 0usize,
2662                            })
2663                            .push(Rule {
2664                                kind: SyntaxKind::NumericLiteral,
2665                                state: 1usize,
2666                            }),
2667                        SyntaxKind::NumericLiteral,
2668                    );
2669                }
2670                (SyntaxKind::Literal, 4usize) => {
2671                    state.add_element_checked(
2672                        element
2673                            .pop_push(Rule {
2674                                kind: self.kind,
2675                                state: 0usize,
2676                            })
2677                            .push(Rule {
2678                                kind: SyntaxKind::BooleanLiteral,
2679                                state: 1usize,
2680                            }),
2681                        SyntaxKind::BooleanLiteral,
2682                    );
2683                }
2684                (SyntaxKind::BlankNodePropertyList2, 0usize) => {
2685                    if let Some(parent) = element.pop() {
2686                        state.add_element(parent);
2687                    }
2688                }
2689                (SyntaxKind::BlankNodePropertyList2, 1usize) => {
2690                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::SqClose);
2691                    state.add_element(matched.pop_push(Rule {
2692                        kind: self.kind,
2693                        state: 0usize,
2694                    }));
2695                    if let Some(fb) = fb {
2696                        state.add_element(fb.pop_push(Rule {
2697                            kind: self.kind,
2698                            state: 0usize,
2699                        }));
2700                    }
2701                }
2702                (SyntaxKind::BlankNodePropertyList2, 2usize) => {
2703                    state.add_element(element.pop_push(Rule {
2704                        kind: self.kind,
2705                        state: 1usize,
2706                    }));
2707                    state.add_element(element.pop_push(Rule {
2708                        kind: self.kind,
2709                        state: 3usize,
2710                    }));
2711                }
2712                (SyntaxKind::BlankNodePropertyList2, 3usize) => {
2713                    state.add_element_checked(
2714                        element
2715                            .pop_push(Rule {
2716                                kind: self.kind,
2717                                state: 1usize,
2718                            })
2719                            .push(Rule {
2720                                kind: SyntaxKind::PredicateObjectList,
2721                                state: 7usize,
2722                            }),
2723                        SyntaxKind::PredicateObjectList,
2724                    );
2725                }
2726                (SyntaxKind::BlankNodePropertyList2, 4usize) => {
2727                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::SqOpen);
2728                    state.add_element(matched.pop_push(Rule {
2729                        kind: self.kind,
2730                        state: 2usize,
2731                    }));
2732                    if let Some(fb) = fb {
2733                        state.add_element(fb.pop_push(Rule {
2734                            kind: self.kind,
2735                            state: 2usize,
2736                        }));
2737                    }
2738                }
2739                (SyntaxKind::BlankNodePropertyList, 0usize) => {
2740                    if let Some(parent) = element.pop() {
2741                        state.add_element(parent);
2742                    }
2743                }
2744                (SyntaxKind::BlankNodePropertyList, 1usize) => {
2745                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::SqClose);
2746                    state.add_element(matched.pop_push(Rule {
2747                        kind: self.kind,
2748                        state: 0usize,
2749                    }));
2750                    if let Some(fb) = fb {
2751                        state.add_element(fb.pop_push(Rule {
2752                            kind: self.kind,
2753                            state: 0usize,
2754                        }));
2755                    }
2756                }
2757                (SyntaxKind::BlankNodePropertyList, 2usize) => {
2758                    state.add_element_checked(
2759                        element
2760                            .pop_push(Rule {
2761                                kind: self.kind,
2762                                state: 1usize,
2763                            })
2764                            .push(Rule {
2765                                kind: SyntaxKind::PredicateObjectList,
2766                                state: 7usize,
2767                            }),
2768                        SyntaxKind::PredicateObjectList,
2769                    );
2770                }
2771                (SyntaxKind::BlankNodePropertyList, 3usize) => {
2772                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::SqOpen);
2773                    state.add_element(matched.pop_push(Rule {
2774                        kind: self.kind,
2775                        state: 2usize,
2776                    }));
2777                    if let Some(fb) = fb {
2778                        state.add_element(fb.pop_push(Rule {
2779                            kind: self.kind,
2780                            state: 2usize,
2781                        }));
2782                    }
2783                }
2784                (SyntaxKind::Collection, 0usize) => {
2785                    if let Some(parent) = element.pop() {
2786                        state.add_element(parent);
2787                    }
2788                }
2789                (SyntaxKind::Collection, 1usize) => {
2790                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::ClClose);
2791                    state.add_element(matched.pop_push(Rule {
2792                        kind: self.kind,
2793                        state: 0usize,
2794                    }));
2795                    if let Some(fb) = fb {
2796                        state.add_element(fb.pop_push(Rule {
2797                            kind: self.kind,
2798                            state: 0usize,
2799                        }));
2800                    }
2801                }
2802                (SyntaxKind::Collection, 2usize) => {
2803                    state.add_element(element.pop_push(Rule {
2804                        kind: self.kind,
2805                        state: 3usize,
2806                    }));
2807                    state.add_element(element.pop_push(Rule {
2808                        kind: self.kind,
2809                        state: 1usize,
2810                    }));
2811                }
2812                (SyntaxKind::Collection, 3usize) => {
2813                    state.add_element_checked(
2814                        element
2815                            .pop_push(Rule {
2816                                kind: self.kind,
2817                                state: 2usize,
2818                            })
2819                            .push(Rule {
2820                                kind: SyntaxKind::Object,
2821                                state: 1usize,
2822                            }),
2823                        SyntaxKind::Object,
2824                    );
2825                }
2826                (SyntaxKind::Collection, 4usize) => {
2827                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::ClOpen);
2828                    state.add_element(matched.pop_push(Rule {
2829                        kind: self.kind,
2830                        state: 2usize,
2831                    }));
2832                    if let Some(fb) = fb {
2833                        state.add_element(fb.pop_push(Rule {
2834                            kind: self.kind,
2835                            state: 2usize,
2836                        }));
2837                    }
2838                }
2839                (SyntaxKind::NumericLiteral, 0usize) => {
2840                    if let Some(parent) = element.pop() {
2841                        state.add_element(parent);
2842                    }
2843                }
2844                (SyntaxKind::NumericLiteral, 1usize) => {
2845                    state.add_element_checked(
2846                        element.pop_push(Rule {
2847                            kind: self.kind,
2848                            state: 2usize,
2849                        }),
2850                        SyntaxKind::Integer,
2851                    );
2852                    state.add_element_checked(
2853                        element.pop_push(Rule {
2854                            kind: self.kind,
2855                            state: 3usize,
2856                        }),
2857                        SyntaxKind::Decimal,
2858                    );
2859                    state.add_element_checked(
2860                        element.pop_push(Rule {
2861                            kind: self.kind,
2862                            state: 4usize,
2863                        }),
2864                        SyntaxKind::Double,
2865                    );
2866                }
2867                (SyntaxKind::NumericLiteral, 2usize) => {
2868                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Integer);
2869                    state.add_element(matched.pop_push(Rule {
2870                        kind: self.kind,
2871                        state: 0usize,
2872                    }));
2873                    if let Some(fb) = fb {
2874                        state.add_element(fb.pop_push(Rule {
2875                            kind: self.kind,
2876                            state: 0usize,
2877                        }));
2878                    }
2879                }
2880                (SyntaxKind::NumericLiteral, 3usize) => {
2881                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Decimal);
2882                    state.add_element(matched.pop_push(Rule {
2883                        kind: self.kind,
2884                        state: 0usize,
2885                    }));
2886                    if let Some(fb) = fb {
2887                        state.add_element(fb.pop_push(Rule {
2888                            kind: self.kind,
2889                            state: 0usize,
2890                        }));
2891                    }
2892                }
2893                (SyntaxKind::NumericLiteral, 4usize) => {
2894                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Double);
2895                    state.add_element(matched.pop_push(Rule {
2896                        kind: self.kind,
2897                        state: 0usize,
2898                    }));
2899                    if let Some(fb) = fb {
2900                        state.add_element(fb.pop_push(Rule {
2901                            kind: self.kind,
2902                            state: 0usize,
2903                        }));
2904                    }
2905                }
2906                (SyntaxKind::Rdfliteral, 0usize) => {
2907                    if let Some(parent) = element.pop() {
2908                        state.add_element(parent);
2909                    }
2910                }
2911                (SyntaxKind::Rdfliteral, 1usize) => {
2912                    state.add_element(element.pop_push(Rule {
2913                        kind: self.kind,
2914                        state: 0usize,
2915                    }));
2916                    state.add_element(element.pop_push(Rule {
2917                        kind: self.kind,
2918                        state: 2usize,
2919                    }));
2920                }
2921                (SyntaxKind::Rdfliteral, 2usize) => {
2922                    state.add_element_checked(
2923                        element.pop_push(Rule {
2924                            kind: self.kind,
2925                            state: 3usize,
2926                        }),
2927                        SyntaxKind::Langtag,
2928                    );
2929                    state.add_element(element.pop_push(Rule {
2930                        kind: self.kind,
2931                        state: 5usize,
2932                    }));
2933                }
2934                (SyntaxKind::Rdfliteral, 3usize) => {
2935                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Langtag);
2936                    state.add_element(matched.pop_push(Rule {
2937                        kind: self.kind,
2938                        state: 0usize,
2939                    }));
2940                    if let Some(fb) = fb {
2941                        state.add_element(fb.pop_push(Rule {
2942                            kind: self.kind,
2943                            state: 0usize,
2944                        }));
2945                    }
2946                }
2947                (SyntaxKind::Rdfliteral, 4usize) => {
2948                    state.add_element_checked(
2949                        element
2950                            .pop_push(Rule {
2951                                kind: self.kind,
2952                                state: 0usize,
2953                            })
2954                            .push(Rule {
2955                                kind: SyntaxKind::Iri,
2956                                state: 1usize,
2957                            }),
2958                        SyntaxKind::Iri,
2959                    );
2960                }
2961                (SyntaxKind::Rdfliteral, 5usize) => {
2962                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Datatype);
2963                    state.add_element(matched.pop_push(Rule {
2964                        kind: self.kind,
2965                        state: 4usize,
2966                    }));
2967                    if let Some(fb) = fb {
2968                        state.add_element(fb.pop_push(Rule {
2969                            kind: self.kind,
2970                            state: 4usize,
2971                        }));
2972                    }
2973                }
2974                (SyntaxKind::Rdfliteral, 6usize) => {
2975                    state.add_element_checked(
2976                        element
2977                            .pop_push(Rule {
2978                                kind: self.kind,
2979                                state: 1usize,
2980                            })
2981                            .push(Rule {
2982                                kind: SyntaxKind::MyString,
2983                                state: 1usize,
2984                            }),
2985                        SyntaxKind::MyString,
2986                    );
2987                }
2988                (SyntaxKind::BooleanLiteral, 0usize) => {
2989                    if let Some(parent) = element.pop() {
2990                        state.add_element(parent);
2991                    }
2992                }
2993                (SyntaxKind::BooleanLiteral, 1usize) => {
2994                    state.add_element_checked(
2995                        element.pop_push(Rule {
2996                            kind: self.kind,
2997                            state: 2usize,
2998                        }),
2999                        SyntaxKind::TrueLit,
3000                    );
3001                    state.add_element_checked(
3002                        element.pop_push(Rule {
3003                            kind: self.kind,
3004                            state: 3usize,
3005                        }),
3006                        SyntaxKind::FalseLit,
3007                    );
3008                }
3009                (SyntaxKind::BooleanLiteral, 2usize) => {
3010                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::TrueLit);
3011                    state.add_element(matched.pop_push(Rule {
3012                        kind: self.kind,
3013                        state: 0usize,
3014                    }));
3015                    if let Some(fb) = fb {
3016                        state.add_element(fb.pop_push(Rule {
3017                            kind: self.kind,
3018                            state: 0usize,
3019                        }));
3020                    }
3021                }
3022                (SyntaxKind::BooleanLiteral, 3usize) => {
3023                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::FalseLit);
3024                    state.add_element(matched.pop_push(Rule {
3025                        kind: self.kind,
3026                        state: 0usize,
3027                    }));
3028                    if let Some(fb) = fb {
3029                        state.add_element(fb.pop_push(Rule {
3030                            kind: self.kind,
3031                            state: 0usize,
3032                        }));
3033                    }
3034                }
3035                (SyntaxKind::MyString, 0usize) => {
3036                    if let Some(parent) = element.pop() {
3037                        state.add_element(parent);
3038                    }
3039                }
3040                (SyntaxKind::MyString, 1usize) => {
3041                    state.add_element_checked(
3042                        element.pop_push(Rule {
3043                            kind: self.kind,
3044                            state: 2usize,
3045                        }),
3046                        SyntaxKind::StringLiteralQuote,
3047                    );
3048                    state.add_element_checked(
3049                        element.pop_push(Rule {
3050                            kind: self.kind,
3051                            state: 3usize,
3052                        }),
3053                        SyntaxKind::StringLiteralSingleQuote,
3054                    );
3055                    state.add_element_checked(
3056                        element.pop_push(Rule {
3057                            kind: self.kind,
3058                            state: 4usize,
3059                        }),
3060                        SyntaxKind::StringLiteralLongSingleQuote,
3061                    );
3062                    state.add_element_checked(
3063                        element.pop_push(Rule {
3064                            kind: self.kind,
3065                            state: 5usize,
3066                        }),
3067                        SyntaxKind::StringLiteralLongQuote,
3068                    );
3069                }
3070                (SyntaxKind::MyString, 2usize) => {
3071                    let (matched, fb) =
3072                        state.expect_as_inline(element, SyntaxKind::StringLiteralQuote);
3073                    state.add_element(matched.pop_push(Rule {
3074                        kind: self.kind,
3075                        state: 0usize,
3076                    }));
3077                    if let Some(fb) = fb {
3078                        state.add_element(fb.pop_push(Rule {
3079                            kind: self.kind,
3080                            state: 0usize,
3081                        }));
3082                    }
3083                }
3084                (SyntaxKind::MyString, 3usize) => {
3085                    let (matched, fb) =
3086                        state.expect_as_inline(element, SyntaxKind::StringLiteralSingleQuote);
3087                    state.add_element(matched.pop_push(Rule {
3088                        kind: self.kind,
3089                        state: 0usize,
3090                    }));
3091                    if let Some(fb) = fb {
3092                        state.add_element(fb.pop_push(Rule {
3093                            kind: self.kind,
3094                            state: 0usize,
3095                        }));
3096                    }
3097                }
3098                (SyntaxKind::MyString, 4usize) => {
3099                    let (matched, fb) =
3100                        state.expect_as_inline(element, SyntaxKind::StringLiteralLongSingleQuote);
3101                    state.add_element(matched.pop_push(Rule {
3102                        kind: self.kind,
3103                        state: 0usize,
3104                    }));
3105                    if let Some(fb) = fb {
3106                        state.add_element(fb.pop_push(Rule {
3107                            kind: self.kind,
3108                            state: 0usize,
3109                        }));
3110                    }
3111                }
3112                (SyntaxKind::MyString, 5usize) => {
3113                    let (matched, fb) =
3114                        state.expect_as_inline(element, SyntaxKind::StringLiteralLongQuote);
3115                    state.add_element(matched.pop_push(Rule {
3116                        kind: self.kind,
3117                        state: 0usize,
3118                    }));
3119                    if let Some(fb) = fb {
3120                        state.add_element(fb.pop_push(Rule {
3121                            kind: self.kind,
3122                            state: 0usize,
3123                        }));
3124                    }
3125                }
3126                (SyntaxKind::Iri, 0usize) => {
3127                    if let Some(parent) = element.pop() {
3128                        state.add_element(parent);
3129                    }
3130                }
3131                (SyntaxKind::Iri, 1usize) => {
3132                    state.add_element_checked(
3133                        element.pop_push(Rule {
3134                            kind: self.kind,
3135                            state: 2usize,
3136                        }),
3137                        SyntaxKind::Iriref,
3138                    );
3139                    state.add_element(element.pop_push(Rule {
3140                        kind: self.kind,
3141                        state: 3usize,
3142                    }));
3143                }
3144                (SyntaxKind::Iri, 2usize) => {
3145                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::Iriref);
3146                    state.add_element(matched.pop_push(Rule {
3147                        kind: self.kind,
3148                        state: 0usize,
3149                    }));
3150                    if let Some(fb) = fb {
3151                        state.add_element(fb.pop_push(Rule {
3152                            kind: self.kind,
3153                            state: 0usize,
3154                        }));
3155                    }
3156                }
3157                (SyntaxKind::Iri, 3usize) => {
3158                    state.add_element_checked(
3159                        element
3160                            .pop_push(Rule {
3161                                kind: self.kind,
3162                                state: 0usize,
3163                            })
3164                            .push(Rule {
3165                                kind: SyntaxKind::PrefixedName,
3166                                state: 1usize,
3167                            }),
3168                        SyntaxKind::PrefixedName,
3169                    );
3170                }
3171                (SyntaxKind::PrefixedName, 0usize) => {
3172                    if let Some(parent) = element.pop() {
3173                        state.add_element(parent);
3174                    }
3175                }
3176                (SyntaxKind::PrefixedName, 1usize) => {
3177                    state.add_element_checked(
3178                        element.pop_push(Rule {
3179                            kind: self.kind,
3180                            state: 2usize,
3181                        }),
3182                        SyntaxKind::PnameLn,
3183                    );
3184                    state.add_element_checked(
3185                        element.pop_push(Rule {
3186                            kind: self.kind,
3187                            state: 3usize,
3188                        }),
3189                        SyntaxKind::PnameNs,
3190                    );
3191                }
3192                (SyntaxKind::PrefixedName, 2usize) => {
3193                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::PnameLn);
3194                    state.add_element(matched.pop_push(Rule {
3195                        kind: self.kind,
3196                        state: 0usize,
3197                    }));
3198                    if let Some(fb) = fb {
3199                        state.add_element(fb.pop_push(Rule {
3200                            kind: self.kind,
3201                            state: 0usize,
3202                        }));
3203                    }
3204                }
3205                (SyntaxKind::PrefixedName, 3usize) => {
3206                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::PnameNs);
3207                    state.add_element(matched.pop_push(Rule {
3208                        kind: self.kind,
3209                        state: 0usize,
3210                    }));
3211                    if let Some(fb) = fb {
3212                        state.add_element(fb.pop_push(Rule {
3213                            kind: self.kind,
3214                            state: 0usize,
3215                        }));
3216                    }
3217                }
3218                (SyntaxKind::BlankNode, 0usize) => {
3219                    if let Some(parent) = element.pop() {
3220                        state.add_element(parent);
3221                    }
3222                }
3223                (SyntaxKind::BlankNode, 1usize) => {
3224                    state.add_element_checked(
3225                        element.pop_push(Rule {
3226                            kind: self.kind,
3227                            state: 2usize,
3228                        }),
3229                        SyntaxKind::BlankNodeLabel,
3230                    );
3231                    state.add_element(element.pop_push(Rule {
3232                        kind: self.kind,
3233                        state: 4usize,
3234                    }));
3235                }
3236                (SyntaxKind::BlankNode, 2usize) => {
3237                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::BlankNodeLabel);
3238                    state.add_element(matched.pop_push(Rule {
3239                        kind: self.kind,
3240                        state: 0usize,
3241                    }));
3242                    if let Some(fb) = fb {
3243                        state.add_element(fb.pop_push(Rule {
3244                            kind: self.kind,
3245                            state: 0usize,
3246                        }));
3247                    }
3248                }
3249                (SyntaxKind::BlankNode, 3usize) => {
3250                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::SqClose);
3251                    state.add_element(matched.pop_push(Rule {
3252                        kind: self.kind,
3253                        state: 0usize,
3254                    }));
3255                    if let Some(fb) = fb {
3256                        state.add_element(fb.pop_push(Rule {
3257                            kind: self.kind,
3258                            state: 0usize,
3259                        }));
3260                    }
3261                }
3262                (SyntaxKind::BlankNode, 4usize) => {
3263                    let (matched, fb) = state.expect_as_inline(element, SyntaxKind::SqOpen);
3264                    state.add_element(matched.pop_push(Rule {
3265                        kind: self.kind,
3266                        state: 3usize,
3267                    }));
3268                    if let Some(fb) = fb {
3269                        state.add_element(fb.pop_push(Rule {
3270                            kind: self.kind,
3271                            state: 3usize,
3272                        }));
3273                    }
3274                }
3275                (SyntaxKind::ClOpen, _) => {
3276                    let added = state.expect_as(element, SyntaxKind::ClOpen);
3277                    if let Some(parent) = added.pop() {
3278                        state.add_element(parent);
3279                    }
3280                }
3281                (SyntaxKind::ClClose, _) => {
3282                    let added = state.expect_as(element, SyntaxKind::ClClose);
3283                    if let Some(parent) = added.pop() {
3284                        state.add_element(parent);
3285                    }
3286                }
3287                (SyntaxKind::Comma, _) => {
3288                    let added = state.expect_as(element, SyntaxKind::Comma);
3289                    if let Some(parent) = added.pop() {
3290                        state.add_element(parent);
3291                    }
3292                }
3293                (SyntaxKind::Stop, _) => {
3294                    let added = state.expect_as(element, SyntaxKind::Stop);
3295                    if let Some(parent) = added.pop() {
3296                        state.add_element(parent);
3297                    }
3298                }
3299                (SyntaxKind::Colon, _) => {
3300                    let added = state.expect_as(element, SyntaxKind::Colon);
3301                    if let Some(parent) = added.pop() {
3302                        state.add_element(parent);
3303                    }
3304                }
3305                (SyntaxKind::BaseToken, _) => {
3306                    let added = state.expect_as(element, SyntaxKind::BaseToken);
3307                    if let Some(parent) = added.pop() {
3308                        state.add_element(parent);
3309                    }
3310                }
3311                (SyntaxKind::PrefixToken, _) => {
3312                    let added = state.expect_as(element, SyntaxKind::PrefixToken);
3313                    if let Some(parent) = added.pop() {
3314                        state.add_element(parent);
3315                    }
3316                }
3317                (SyntaxKind::SparqlBaseToken, _) => {
3318                    let added = state.expect_as(element, SyntaxKind::SparqlBaseToken);
3319                    if let Some(parent) = added.pop() {
3320                        state.add_element(parent);
3321                    }
3322                }
3323                (SyntaxKind::SparqlPrefixToken, _) => {
3324                    let added = state.expect_as(element, SyntaxKind::SparqlPrefixToken);
3325                    if let Some(parent) = added.pop() {
3326                        state.add_element(parent);
3327                    }
3328                }
3329                (SyntaxKind::SqOpen, _) => {
3330                    let added = state.expect_as(element, SyntaxKind::SqOpen);
3331                    if let Some(parent) = added.pop() {
3332                        state.add_element(parent);
3333                    }
3334                }
3335                (SyntaxKind::SqClose, _) => {
3336                    let added = state.expect_as(element, SyntaxKind::SqClose);
3337                    if let Some(parent) = added.pop() {
3338                        state.add_element(parent);
3339                    }
3340                }
3341                (SyntaxKind::Datatype, _) => {
3342                    let added = state.expect_as(element, SyntaxKind::Datatype);
3343                    if let Some(parent) = added.pop() {
3344                        state.add_element(parent);
3345                    }
3346                }
3347                (SyntaxKind::Alit, _) => {
3348                    let added = state.expect_as(element, SyntaxKind::Alit);
3349                    if let Some(parent) = added.pop() {
3350                        state.add_element(parent);
3351                    }
3352                }
3353                (SyntaxKind::FalseLit, _) => {
3354                    let added = state.expect_as(element, SyntaxKind::FalseLit);
3355                    if let Some(parent) = added.pop() {
3356                        state.add_element(parent);
3357                    }
3358                }
3359                (SyntaxKind::TrueLit, _) => {
3360                    let added = state.expect_as(element, SyntaxKind::TrueLit);
3361                    if let Some(parent) = added.pop() {
3362                        state.add_element(parent);
3363                    }
3364                }
3365                (SyntaxKind::BlankNodeLabel, _) => {
3366                    let added = state.expect_as(element, SyntaxKind::BlankNodeLabel);
3367                    if let Some(parent) = added.pop() {
3368                        state.add_element(parent);
3369                    }
3370                }
3371                (SyntaxKind::Decimal, _) => {
3372                    let added = state.expect_as(element, SyntaxKind::Decimal);
3373                    if let Some(parent) = added.pop() {
3374                        state.add_element(parent);
3375                    }
3376                }
3377                (SyntaxKind::Double, _) => {
3378                    let added = state.expect_as(element, SyntaxKind::Double);
3379                    if let Some(parent) = added.pop() {
3380                        state.add_element(parent);
3381                    }
3382                }
3383                (SyntaxKind::Integer, _) => {
3384                    let added = state.expect_as(element, SyntaxKind::Integer);
3385                    if let Some(parent) = added.pop() {
3386                        state.add_element(parent);
3387                    }
3388                }
3389                (SyntaxKind::Iriref, _) => {
3390                    let added = state.expect_as(element, SyntaxKind::Iriref);
3391                    if let Some(parent) = added.pop() {
3392                        state.add_element(parent);
3393                    }
3394                }
3395                (SyntaxKind::Langtag, _) => {
3396                    let added = state.expect_as(element, SyntaxKind::Langtag);
3397                    if let Some(parent) = added.pop() {
3398                        state.add_element(parent);
3399                    }
3400                }
3401                (SyntaxKind::PnameLn, _) => {
3402                    let added = state.expect_as(element, SyntaxKind::PnameLn);
3403                    if let Some(parent) = added.pop() {
3404                        state.add_element(parent);
3405                    }
3406                }
3407                (SyntaxKind::PnameNs, _) => {
3408                    let added = state.expect_as(element, SyntaxKind::PnameNs);
3409                    if let Some(parent) = added.pop() {
3410                        state.add_element(parent);
3411                    }
3412                }
3413                (SyntaxKind::StringLiteralLongQuote, _) => {
3414                    let added = state.expect_as(element, SyntaxKind::StringLiteralLongQuote);
3415                    if let Some(parent) = added.pop() {
3416                        state.add_element(parent);
3417                    }
3418                }
3419                (SyntaxKind::StringLiteralLongSingleQuote, _) => {
3420                    let added = state.expect_as(element, SyntaxKind::StringLiteralLongSingleQuote);
3421                    if let Some(parent) = added.pop() {
3422                        state.add_element(parent);
3423                    }
3424                }
3425                (SyntaxKind::StringLiteralQuote, _) => {
3426                    let added = state.expect_as(element, SyntaxKind::StringLiteralQuote);
3427                    if let Some(parent) = added.pop() {
3428                        state.add_element(parent);
3429                    }
3430                }
3431                (SyntaxKind::StringLiteralSingleQuote, _) => {
3432                    let added = state.expect_as(element, SyntaxKind::StringLiteralSingleQuote);
3433                    if let Some(parent) = added.pop() {
3434                        state.add_element(parent);
3435                    }
3436                }
3437                _ => panic!("Aaaah unexpected state {:?}", self),
3438            }
3439        }
3440        fn at(&self) -> usize {
3441            self.state
3442        }
3443        fn element_kind(&self) -> SyntaxKind {
3444            self.kind
3445        }
3446        fn state_dist(&self, terminal: &SyntaxKind) -> isize {
3447            state_dist(self.kind, self.state, *terminal)
3448        }
3449    }
3450}
3451pub use definitions::*;
3452impl TokenTrait for SyntaxKind {
3453    const ERROR: Self = SyntaxKind::Error;
3454    const ROOT: Self = SyntaxKind::ROOT;
3455    fn branch(&self) -> u32 {
3456        *self as u32
3457    }
3458    fn skips(&self) -> bool {
3459        match self {
3460            SyntaxKind::WhiteSpace => true,
3461            SyntaxKind::Error => true,
3462            SyntaxKind::Comment => true,
3463            _ => false,
3464        }
3465    }
3466    fn starting_tokens(&self) -> &'static [SyntaxKind] {
3467        &[]
3468    }
3469    fn min_error_for_token(&self, tok: &SyntaxKind) -> isize {
3470        min_error_for_token(*self, *tok)
3471    }
3472    fn ending_tokens(&self) -> &'static [SyntaxKind] {
3473        &[]
3474    }
3475    fn max_error_value(&self) -> isize {
3476        match self {
3477            SyntaxKind::ClOpen => 2isize,
3478            SyntaxKind::ClClose => 2isize,
3479            SyntaxKind::Comma => 2isize,
3480            SyntaxKind::Stop => 3isize,
3481            SyntaxKind::Colon => 2isize,
3482            SyntaxKind::BaseToken => 100isize,
3483            SyntaxKind::PrefixToken => 100isize,
3484            SyntaxKind::SparqlBaseToken => 100isize,
3485            SyntaxKind::SparqlPrefixToken => 100isize,
3486            SyntaxKind::SqOpen => 2isize,
3487            SyntaxKind::SqClose => 2isize,
3488            _ => 1isize,
3489        }
3490    }
3491    fn bracket_delta(&self) -> i8 {
3492        match self {
3493            SyntaxKind::SqOpen => 1,
3494            SyntaxKind::ClOpen => 1,
3495            SyntaxKind::SqClose => -1,
3496            SyntaxKind::ClClose => -1,
3497            _ => 0,
3498        }
3499    }
3500    fn min_completion_cost(&self) -> isize {
3501        match self {
3502            SyntaxKind::Base => 104isize,
3503            SyntaxKind::BlankNodePropertyList => 6isize,
3504            SyntaxKind::BlankNodePropertyList2 => 4isize,
3505            SyntaxKind::Collection => 4isize,
3506            SyntaxKind::Directive => 101isize,
3507            SyntaxKind::PredicateObjectList => 2isize,
3508            SyntaxKind::PrefixId => 105isize,
3509            SyntaxKind::SparqlBase => 101isize,
3510            SyntaxKind::SparqlPrefix => 102isize,
3511            SyntaxKind::Statement => 6isize,
3512            SyntaxKind::Triples => 3isize,
3513            _ => Self::max_error_value(self),
3514        }
3515    }
3516    fn deletion_cost(&self) -> isize {
3517        match self {
3518            _ => Self::max_error_value(self) * 5,
3519        }
3520    }
3521}
3522pub mod format {
3523    use super::{SyntaxKind, SyntaxNode};
3524    use crate::format::Doc;
3525    use crate::TokenTrait;
3526    use rowan::NodeOrToken;
3527    #[derive(Default)]
3528    struct Hints {
3529        space: bool,
3530        line: bool,
3531        hardline: bool,
3532        blankline: bool,
3533        indent: bool,
3534        dedent: bool,
3535    }
3536    impl Hints {
3537        fn to_docs(&self) -> Vec<Doc> {
3538            let mut v = Vec::new();
3539            if self.indent {
3540                v.push(Doc::nil());
3541            }
3542            if self.dedent {
3543                v.push(Doc::nil());
3544            }
3545            if self.blankline {
3546                v.push(Doc::HardLine);
3547                v.push(Doc::HardLine);
3548            } else if self.hardline {
3549                v.push(Doc::HardLine);
3550            } else if self.line {
3551                v.push(Doc::Line);
3552            } else if self.space {
3553                v.push(Doc::text(" "));
3554            }
3555            v
3556        }
3557    }
3558    fn format_hints(parent: SyntaxKind, token: SyntaxKind) -> (Hints, Hints) {
3559        match (parent, token) {
3560            (SyntaxKind::Triples, SyntaxKind::PredicateObjectList) => (
3561                Hints {
3562                    space: true,
3563                    line: false,
3564                    hardline: false,
3565                    blankline: false,
3566                    indent: false,
3567                    dedent: false,
3568                },
3569                Hints {
3570                    space: false,
3571                    line: false,
3572                    hardline: false,
3573                    blankline: false,
3574                    indent: false,
3575                    dedent: false,
3576                },
3577            ),
3578            (SyntaxKind::Statement, SyntaxKind::Triples) => (
3579                Hints {
3580                    space: false,
3581                    line: false,
3582                    hardline: true,
3583                    blankline: false,
3584                    indent: false,
3585                    dedent: false,
3586                },
3587                Hints {
3588                    space: false,
3589                    line: false,
3590                    hardline: false,
3591                    blankline: false,
3592                    indent: false,
3593                    dedent: false,
3594                },
3595            ),
3596            (SyntaxKind::ObjectList, SyntaxKind::Comma) => (
3597                Hints {
3598                    space: false,
3599                    line: false,
3600                    hardline: false,
3601                    blankline: false,
3602                    indent: false,
3603                    dedent: false,
3604                },
3605                Hints {
3606                    space: false,
3607                    line: true,
3608                    hardline: false,
3609                    blankline: false,
3610                    indent: false,
3611                    dedent: false,
3612                },
3613            ),
3614            (SyntaxKind::BlankNodePropertyList, SyntaxKind::SqOpen) => (
3615                Hints {
3616                    space: false,
3617                    line: false,
3618                    hardline: false,
3619                    blankline: false,
3620                    indent: false,
3621                    dedent: false,
3622                },
3623                Hints {
3624                    space: false,
3625                    line: true,
3626                    hardline: false,
3627                    blankline: false,
3628                    indent: true,
3629                    dedent: false,
3630                },
3631            ),
3632            (SyntaxKind::BlankNodePropertyList, SyntaxKind::SqClose) => (
3633                Hints {
3634                    space: false,
3635                    line: true,
3636                    hardline: false,
3637                    blankline: false,
3638                    indent: false,
3639                    dedent: true,
3640                },
3641                Hints {
3642                    space: false,
3643                    line: false,
3644                    hardline: false,
3645                    blankline: false,
3646                    indent: false,
3647                    dedent: false,
3648                },
3649            ),
3650            (SyntaxKind::BlankNodePropertyList2, SyntaxKind::SqOpen) => (
3651                Hints {
3652                    space: false,
3653                    line: false,
3654                    hardline: false,
3655                    blankline: false,
3656                    indent: false,
3657                    dedent: false,
3658                },
3659                Hints {
3660                    space: false,
3661                    line: true,
3662                    hardline: false,
3663                    blankline: false,
3664                    indent: true,
3665                    dedent: false,
3666                },
3667            ),
3668            (SyntaxKind::BlankNodePropertyList2, SyntaxKind::SqClose) => (
3669                Hints {
3670                    space: false,
3671                    line: true,
3672                    hardline: false,
3673                    blankline: false,
3674                    indent: false,
3675                    dedent: true,
3676                },
3677                Hints {
3678                    space: false,
3679                    line: false,
3680                    hardline: false,
3681                    blankline: false,
3682                    indent: false,
3683                    dedent: false,
3684                },
3685            ),
3686            (SyntaxKind::BlankNode, SyntaxKind::SqOpen) => (
3687                Hints {
3688                    space: false,
3689                    line: false,
3690                    hardline: false,
3691                    blankline: false,
3692                    indent: false,
3693                    dedent: false,
3694                },
3695                Hints {
3696                    space: true,
3697                    line: false,
3698                    hardline: false,
3699                    blankline: false,
3700                    indent: false,
3701                    dedent: false,
3702                },
3703            ),
3704            (SyntaxKind::PrefixId, SyntaxKind::PrefixToken) => (
3705                Hints {
3706                    space: false,
3707                    line: false,
3708                    hardline: false,
3709                    blankline: false,
3710                    indent: false,
3711                    dedent: false,
3712                },
3713                Hints {
3714                    space: true,
3715                    line: false,
3716                    hardline: false,
3717                    blankline: false,
3718                    indent: false,
3719                    dedent: false,
3720                },
3721            ),
3722            (SyntaxKind::PrefixId, SyntaxKind::PnameNs) => (
3723                Hints {
3724                    space: false,
3725                    line: false,
3726                    hardline: false,
3727                    blankline: false,
3728                    indent: false,
3729                    dedent: false,
3730                },
3731                Hints {
3732                    space: true,
3733                    line: false,
3734                    hardline: false,
3735                    blankline: false,
3736                    indent: false,
3737                    dedent: false,
3738                },
3739            ),
3740            (SyntaxKind::Base, SyntaxKind::BaseToken) => (
3741                Hints {
3742                    space: false,
3743                    line: false,
3744                    hardline: false,
3745                    blankline: false,
3746                    indent: false,
3747                    dedent: false,
3748                },
3749                Hints {
3750                    space: true,
3751                    line: false,
3752                    hardline: false,
3753                    blankline: false,
3754                    indent: false,
3755                    dedent: false,
3756                },
3757            ),
3758            (SyntaxKind::SparqlBase, SyntaxKind::SparqlBaseToken) => (
3759                Hints {
3760                    space: false,
3761                    line: false,
3762                    hardline: false,
3763                    blankline: false,
3764                    indent: false,
3765                    dedent: false,
3766                },
3767                Hints {
3768                    space: true,
3769                    line: false,
3770                    hardline: false,
3771                    blankline: false,
3772                    indent: false,
3773                    dedent: false,
3774                },
3775            ),
3776            (SyntaxKind::SparqlPrefix, SyntaxKind::SparqlPrefixToken) => (
3777                Hints {
3778                    space: false,
3779                    line: false,
3780                    hardline: false,
3781                    blankline: false,
3782                    indent: false,
3783                    dedent: false,
3784                },
3785                Hints {
3786                    space: true,
3787                    line: false,
3788                    hardline: false,
3789                    blankline: false,
3790                    indent: false,
3791                    dedent: false,
3792                },
3793            ),
3794            (SyntaxKind::SparqlPrefix, SyntaxKind::PnameNs) => (
3795                Hints {
3796                    space: false,
3797                    line: false,
3798                    hardline: false,
3799                    blankline: false,
3800                    indent: false,
3801                    dedent: false,
3802                },
3803                Hints {
3804                    space: true,
3805                    line: false,
3806                    hardline: false,
3807                    blankline: false,
3808                    indent: false,
3809                    dedent: false,
3810                },
3811            ),
3812            (_, SyntaxKind::Subject) => (
3813                Hints {
3814                    space: false,
3815                    line: false,
3816                    hardline: false,
3817                    blankline: false,
3818                    indent: false,
3819                    dedent: false,
3820                },
3821                Hints {
3822                    space: false,
3823                    line: false,
3824                    hardline: false,
3825                    blankline: false,
3826                    indent: true,
3827                    dedent: false,
3828                },
3829            ),
3830            (_, SyntaxKind::Colon) => (
3831                Hints {
3832                    space: false,
3833                    line: false,
3834                    hardline: false,
3835                    blankline: false,
3836                    indent: false,
3837                    dedent: false,
3838                },
3839                Hints {
3840                    space: false,
3841                    line: true,
3842                    hardline: false,
3843                    blankline: false,
3844                    indent: false,
3845                    dedent: false,
3846                },
3847            ),
3848            (_, SyntaxKind::Stop) => (
3849                Hints {
3850                    space: false,
3851                    line: false,
3852                    hardline: false,
3853                    blankline: false,
3854                    indent: false,
3855                    dedent: false,
3856                },
3857                Hints {
3858                    space: false,
3859                    line: false,
3860                    hardline: true,
3861                    blankline: false,
3862                    indent: false,
3863                    dedent: false,
3864                },
3865            ),
3866            (_, SyntaxKind::ObjectList) => (
3867                Hints {
3868                    space: true,
3869                    line: false,
3870                    hardline: false,
3871                    blankline: false,
3872                    indent: false,
3873                    dedent: false,
3874                },
3875                Hints {
3876                    space: false,
3877                    line: false,
3878                    hardline: false,
3879                    blankline: false,
3880                    indent: false,
3881                    dedent: false,
3882                },
3883            ),
3884            (_, SyntaxKind::ClOpen) => (
3885                Hints {
3886                    space: false,
3887                    line: false,
3888                    hardline: false,
3889                    blankline: false,
3890                    indent: false,
3891                    dedent: false,
3892                },
3893                Hints {
3894                    space: false,
3895                    line: true,
3896                    hardline: false,
3897                    blankline: false,
3898                    indent: true,
3899                    dedent: false,
3900                },
3901            ),
3902            (_, SyntaxKind::ClClose) => (
3903                Hints {
3904                    space: false,
3905                    line: true,
3906                    hardline: false,
3907                    blankline: false,
3908                    indent: false,
3909                    dedent: true,
3910                },
3911                Hints {
3912                    space: false,
3913                    line: false,
3914                    hardline: false,
3915                    blankline: false,
3916                    indent: false,
3917                    dedent: false,
3918                },
3919            ),
3920            _ => (Hints::default(), Hints::default()),
3921        }
3922    }
3923    fn is_group(kind: SyntaxKind) -> bool {
3924        matches!(
3925            kind,
3926            SyntaxKind::PredicateObjectList
3927                | SyntaxKind::ObjectList
3928                | SyntaxKind::BlankNodePropertyList
3929                | SyntaxKind::BlankNodePropertyList2
3930                | SyntaxKind::Collection
3931        )
3932    }
3933    pub fn to_doc(node: &SyntaxNode) -> Doc {
3934        let mut parts: Vec<Vec<Doc>> = vec![vec![]];
3935        for child in node.children_with_tokens() {
3936            match child {
3937                NodeOrToken::Token(t) => {
3938                    if t.kind() == SyntaxKind::WhiteSpace {
3939                        continue;
3940                    }
3941                    if t.kind() == SyntaxKind::Comment {
3942                        parts
3943                            .last_mut()
3944                            .unwrap()
3945                            .push(Doc::text(t.text().to_string()));
3946                        continue;
3947                    }
3948                    let (before, after) = format_hints(node.kind(), t.kind());
3949                    if before.dedent && parts.len() > 1 {
3950                        let nested = parts.pop().unwrap_or_default();
3951                        let indent_doc = Doc::nest(2, Doc::concat(nested));
3952                        parts.last_mut().unwrap().push(indent_doc);
3953                    }
3954                    parts.last_mut().unwrap().extend(
3955                        before
3956                            .to_docs()
3957                            .into_iter()
3958                            .filter(|d| !matches!(d, Doc::Nil)),
3959                    );
3960                    parts
3961                        .last_mut()
3962                        .unwrap()
3963                        .push(Doc::text(t.text().to_string()));
3964                    let after_line: Vec<Doc> = after
3965                        .to_docs()
3966                        .into_iter()
3967                        .filter(|d| !matches!(d, Doc::Nil))
3968                        .collect();
3969                    if after.indent {
3970                        parts.push(after_line);
3971                    } else {
3972                        parts.last_mut().unwrap().extend(after_line);
3973                    }
3974                }
3975                NodeOrToken::Node(n) => {
3976                    if n.kind() == SyntaxKind::ERROR {
3977                        parts
3978                            .last_mut()
3979                            .unwrap()
3980                            .push(Doc::text(n.text().to_string()));
3981                        continue;
3982                    }
3983                    let is_terminal_wrapper = {
3984                        let mut it = n.children_with_tokens().filter(|c| match c {
3985                            NodeOrToken::Token(t) => t.kind() != SyntaxKind::WhiteSpace,
3986                            NodeOrToken::Node(_) => true,
3987                        });
3988                        matches!(it.next(), Some(NodeOrToken::Token(_))) && it.next().is_none()
3989                    };
3990                    if is_terminal_wrapper {
3991                        let token_text = n.text().to_string();
3992                        let (before, after) = format_hints(node.kind(), n.kind());
3993                        if before.dedent && parts.len() > 1 {
3994                            let nested = parts.pop().unwrap_or_default();
3995                            let indent_doc = Doc::nest(2, Doc::concat(nested));
3996                            parts.last_mut().unwrap().push(indent_doc);
3997                        }
3998                        parts.last_mut().unwrap().extend(
3999                            before
4000                                .to_docs()
4001                                .into_iter()
4002                                .filter(|d| !matches!(d, Doc::Nil)),
4003                        );
4004                        parts.last_mut().unwrap().push(Doc::text(token_text));
4005                        let after_line: Vec<Doc> = after
4006                            .to_docs()
4007                            .into_iter()
4008                            .filter(|d| !matches!(d, Doc::Nil))
4009                            .collect();
4010                        if after.indent {
4011                            parts.push(after_line);
4012                        } else {
4013                            parts.last_mut().unwrap().extend(after_line);
4014                        }
4015                    } else {
4016                        let (before, after) = format_hints(node.kind(), n.kind());
4017                        if before.dedent && parts.len() > 1 {
4018                            let nested = parts.pop().unwrap_or_default();
4019                            let indent_doc = Doc::nest(2, Doc::concat(nested));
4020                            parts.last_mut().unwrap().push(indent_doc);
4021                        }
4022                        parts.last_mut().unwrap().extend(
4023                            before
4024                                .to_docs()
4025                                .into_iter()
4026                                .filter(|d| !matches!(d, Doc::Nil)),
4027                        );
4028                        let child_doc = to_doc(&n);
4029                        let child_doc = if is_group(n.kind()) {
4030                            Doc::group(child_doc)
4031                        } else {
4032                            child_doc
4033                        };
4034                        parts.last_mut().unwrap().push(child_doc);
4035                        let after_line: Vec<Doc> = after
4036                            .to_docs()
4037                            .into_iter()
4038                            .filter(|d| !matches!(d, Doc::Nil))
4039                            .collect();
4040                        if after.indent {
4041                            parts.push(after_line);
4042                        } else {
4043                            parts.last_mut().unwrap().extend(after_line);
4044                        }
4045                    }
4046                }
4047            }
4048        }
4049        while parts.len() > 1 {
4050            let nested = parts.pop().unwrap();
4051            parts
4052                .last_mut()
4053                .unwrap()
4054                .push(Doc::nest(2, Doc::concat(nested)));
4055        }
4056        Doc::concat(parts.pop().unwrap_or_default())
4057    }
4058    pub fn format(node: &SyntaxNode, width: usize) -> String {
4059        let doc = to_doc(node);
4060        let s = crate::format::render(&doc, width);
4061        let s = s.trim_start_matches('\n').trim_end_matches('\n');
4062        format!("{s}\n")
4063    }
4064}