From b99dd70ce0ca4e9ba35dde0093cdfb57aaf0edb6 Mon Sep 17 00:00:00 2001
From: Taehwan Kim <ehwank98@gmail.com>
Date: Thu, 2 Oct 2025 16:23:00 +0900
Subject: [PATCH 1/6] add data_used field to TerminalClassDef

---
 rusty_lr_parser/src/grammar.rs | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/rusty_lr_parser/src/grammar.rs b/rusty_lr_parser/src/grammar.rs
index abdec254..5f5175aa 100644
--- a/rusty_lr_parser/src/grammar.rs
+++ b/rusty_lr_parser/src/grammar.rs
@@ -39,6 +39,9 @@ pub struct TerminalClassDefinition {
 
     /// compressed ranges, only if %tokentype is char or u8
     pub ranges: Vec<(u32, u32)>,
+
+    /// Wheather this class's data was used in any reduce action
+    pub data_used: bool,
 }
 
 pub enum OptimizeRemove {
@@ -1021,6 +1024,7 @@ impl Grammar {
                 terminals: vec![i],
                 multiterm_counter,
                 ranges,
+                data_used: true,
             });
         }
         grammar.other_terminal_class_id = grammar.terminal_class_id[grammar.other_terminal_index];
@@ -1191,6 +1195,7 @@ impl Grammar {
                     terminals: terms,
                     multiterm_counter,
                     ranges: Vec::new(),
+                    data_used: self.terminal_classes[old_classes[0]].data_used,
                 };
                 new_class_defs.push(class_def);
             }

From 901ac01b7d1efef27678253e9549a0234a7235c4 Mon Sep 17 00:00:00 2001
From: Taehwan Kim <ehwank98@gmail.com>
Date: Thu, 2 Oct 2025 16:26:35 +0900
Subject: [PATCH 2/6] check if term data is used in reduce_action

---
 rusty_lr_parser/src/grammar.rs | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/rusty_lr_parser/src/grammar.rs b/rusty_lr_parser/src/grammar.rs
index 5f5175aa..850a2f91 100644
--- a/rusty_lr_parser/src/grammar.rs
+++ b/rusty_lr_parser/src/grammar.rs
@@ -1547,6 +1547,23 @@ impl Grammar {
             diag.removed.push(OptimizeRemove::NonTermDataNotUsed(i));
         }
 
+        for class_def in &mut self.terminal_classes {
+            class_def.data_used = false;
+        }
+        for nonterm in &self.nonterminals {
+            for rule in &nonterm.rules {
+                for token in &rule.tokens {
+                    if let Token::Term(TerminalSymbol::Term(term)) = token.token {
+                        if let Some(mapto) = &token.mapto {
+                            if rule.reduce_action_contains_ident(mapto) {
+                                self.terminal_classes[term].data_used = true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
         for _ in 0..max_iter {
             let ret = self.optimize_iterate();
             match ret {

From ec65717db6a7cb92cf268234cd7b334bf6a26203 Mon Sep 17 00:00:00 2001
From: Taehwan Kim <ehwank98@gmail.com>
Date: Thu, 2 Oct 2025 18:09:44 +0900
Subject: [PATCH 3/6] fixed emit for terminal symbol no data used

---
 rusty_lr_parser/src/emit.rs | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/rusty_lr_parser/src/emit.rs b/rusty_lr_parser/src/emit.rs
index 3b4ebbfa..f89715b9 100644
--- a/rusty_lr_parser/src/emit.rs
+++ b/rusty_lr_parser/src/emit.rs
@@ -955,7 +955,13 @@ impl Grammar {
         // Token -> Option<stack_name> map, `None` for empty
         let token_to_stack_name = |token: Token<TerminalSymbol<usize>, usize>| match token {
             Token::Term(term) => match term {
-                TerminalSymbol::Term(_) => Some(&terminal_stack_name),
+                TerminalSymbol::Term(term) => {
+                    if self.terminal_classes[term].data_used {
+                        Some(&terminal_stack_name)
+                    } else {
+                        None
+                    }
+                }
                 TerminalSymbol::Error | TerminalSymbol::Eof => None,
             },
             Token::NonTerm(nonterm_idx) => stack_names_for_nonterm[nonterm_idx].as_ref(),

From fa4c50bbaa35dbc915a0407eec5c2af325606944 Mon Sep 17 00:00:00 2001
From: Taehwan Kim <ehwank98@gmail.com>
Date: Thu, 2 Oct 2025 18:14:23 +0900
Subject: [PATCH 4/6] fixed ShiftTarget::shift for terminal symbol data not
 used

---
 rusty_lr_core/src/parser/state.rs             |   2 +-
 rusty_lr_parser/src/grammar.rs                |   8 +
 rusty_lr_parser/src/parser/parser_expanded.rs | 204 +++++-----
 scripts/diff/calculator.rs                    |  20 +-
 scripts/diff/calculator_u8.rs                 |  34 +-
 scripts/diff/json.rs                          | 368 ++++++++----------
 6 files changed, 296 insertions(+), 340 deletions(-)

diff --git a/rusty_lr_core/src/parser/state.rs b/rusty_lr_core/src/parser/state.rs
index e743c998..b86ed769 100644
--- a/rusty_lr_core/src/parser/state.rs
+++ b/rusty_lr_core/src/parser/state.rs
@@ -7,7 +7,7 @@ use crate::parser::terminalclass::TerminalClass;
 #[derive(Debug, Clone, Copy)]
 pub struct ShiftTarget<StateIndex> {
     pub state: StateIndex,
-    /// true if the data should be pushed, false if data should not be pushed
+    /// true if the data should be pushed, false if data should not be pushed (so `Empty` tag will be pushed)
     pub push: bool,
 }
 impl<StateIndex> ShiftTarget<StateIndex> {
diff --git a/rusty_lr_parser/src/grammar.rs b/rusty_lr_parser/src/grammar.rs
index 850a2f91..d1b7eee3 100644
--- a/rusty_lr_parser/src/grammar.rs
+++ b/rusty_lr_parser/src/grammar.rs
@@ -1963,6 +1963,14 @@ impl Grammar {
             }
         }
 
+        for state in &mut new_states {
+            for (term, shift_target) in &mut state.shift_goto_map_term {
+                if let TerminalSymbol::Term(term) = *term {
+                    shift_target.push = self.terminal_classes[term].data_used;
+                }
+            }
+        }
+
         self.states = new_states;
 
         collector
diff --git a/rusty_lr_parser/src/parser/parser_expanded.rs b/rusty_lr_parser/src/parser/parser_expanded.rs
index 3590a83b..cef8ba8e 100644
--- a/rusty_lr_parser/src/parser/parser_expanded.rs
+++ b/rusty_lr_parser/src/parser/parser_expanded.rs
@@ -722,7 +722,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -745,7 +745,7 @@ impl GrammarDataStack {
         __data_stack.__tags.push(GrammarTags::__stack2);
         let mut RuleType = __data_stack.__stack3.pop().unwrap();
         let mut RuleLines = __data_stack.__stack4.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut ident = __data_stack.__terminals.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_colon = __location_stack.pop().unwrap();
@@ -2386,7 +2386,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2408,7 +2408,6 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 5usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_3 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut ident = __data_stack.__terminals.pop().unwrap();
         __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 5usize);
@@ -2440,7 +2439,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2457,7 +2456,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 4usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_ident = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -2486,7 +2485,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2503,7 +2502,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -2532,7 +2531,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2549,7 +2548,6 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut ident = __data_stack.__terminals.pop().unwrap();
         __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 4usize);
@@ -2575,7 +2573,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2592,7 +2590,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -2621,7 +2619,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2639,7 +2637,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_2 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_tokentype = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -2668,7 +2666,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2681,7 +2679,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_tokentype = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -2710,7 +2708,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2728,7 +2726,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_2 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_userdata = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -2757,7 +2755,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2770,7 +2768,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_userdata = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -2799,7 +2797,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2817,7 +2815,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut IdentOrLiteral = __data_stack.__stack19.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_left = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -2845,7 +2843,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2862,7 +2860,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -2891,7 +2889,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2909,7 +2907,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut IdentOrLiteral = __data_stack.__stack19.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_right = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -2937,7 +2935,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -2954,7 +2952,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -2983,7 +2981,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3001,7 +2999,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut IdentOrLiteral = __data_stack.__stack19.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_precedence = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3025,7 +3023,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3042,7 +3040,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -3071,7 +3069,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3089,7 +3087,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_2 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_errortype = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3118,7 +3116,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3131,7 +3129,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_errortype = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3160,7 +3158,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3178,7 +3176,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_2 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         let mut __rustylr_location_moduleprefix = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3207,7 +3205,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3220,7 +3218,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_moduleprefix = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3249,7 +3247,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3262,7 +3260,6 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut glr = __data_stack.__terminals.pop().unwrap();
         __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
@@ -3285,7 +3282,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3302,7 +3299,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -3331,7 +3328,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3344,7 +3341,6 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut lalr = __data_stack.__terminals.pop().unwrap();
         __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
@@ -3367,7 +3363,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3384,7 +3380,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -3413,7 +3409,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3426,7 +3422,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         {
             data.no_optim = true;
@@ -3447,7 +3443,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3464,7 +3460,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -3493,7 +3489,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3506,7 +3502,6 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut dense = __data_stack.__terminals.pop().unwrap();
         __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
@@ -3529,7 +3524,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3546,7 +3541,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -3575,7 +3570,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3593,7 +3588,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut ident = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 4usize);
         {
             let idents = ident
@@ -3622,7 +3617,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3639,7 +3634,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 2usize);
@@ -3668,7 +3663,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3686,7 +3681,6 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_2 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         let mut filter = __data_stack.__terminals.pop().unwrap();
         __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 4usize);
@@ -3715,7 +3709,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3728,7 +3722,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_filter = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3757,7 +3751,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3775,7 +3769,7 @@ impl GrammarDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __data_stack.__tags.push(GrammarTags::Empty);
         let mut __rustylr_data_2 = __data_stack.__stack18.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 4usize);
         let __rustylr_data_2 = Self::custom_reduce_action_0(
             __rustylr_data_2,
@@ -3802,7 +3796,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3815,7 +3809,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 3usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_location = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -3844,7 +3838,7 @@ impl GrammarDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                GrammarTags::__terminals)
+                GrammarTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -3857,7 +3851,7 @@ impl GrammarDataStack {
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(GrammarTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -7687,7 +7681,7 @@ impl GrammarParser {
             shifted : shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(65, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(65, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(66, true)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
@@ -8062,7 +8056,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(93, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(93, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [51,]; let shifted : & 'static
@@ -8091,7 +8085,7 @@ impl GrammarParser {
             vec![(GrammarTerminalClasses::ident,
             ::rusty_lr_core::parser::state::ShiftTarget::new(75, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(96, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(96, false)),
             (GrammarTerminalClasses::literal,
             ::rusty_lr_core::parser::state::ShiftTarget::new(76, true)),],
             shift_goto_map_nonterm : vec![(GrammarNonTerminals::IdentOrLiteral,
@@ -8139,7 +8133,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(100, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(100, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [53,]; let shifted : & 'static
@@ -8159,7 +8153,7 @@ impl GrammarParser {
             vec![(GrammarTerminalClasses::ident,
             ::rusty_lr_core::parser::state::ShiftTarget::new(75, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(102, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(102, false)),
             (GrammarTerminalClasses::literal,
             ::rusty_lr_core::parser::state::ShiftTarget::new(76, true)),],
             shift_goto_map_nonterm : vec![(GrammarNonTerminals::IdentOrLiteral,
@@ -8196,7 +8190,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(105, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(105, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -8313,7 +8307,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(108, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(108, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -8424,7 +8418,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(111, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(111, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [43,]; let shifted : & 'static
@@ -8453,7 +8447,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(114, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(114, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [44,]; let shifted : & 'static
@@ -8471,7 +8465,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(116, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(116, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [45,]; let shifted : & 'static
@@ -8493,7 +8487,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(118, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(118, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -8601,7 +8595,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(120, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(120, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -8707,7 +8701,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(122, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(122, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -8815,7 +8809,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(124, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(124, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -8921,7 +8915,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(126, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(126, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -9029,7 +9023,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(128, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(128, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -9135,7 +9129,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(130, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(130, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -9243,7 +9237,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(132, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(132, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -9345,7 +9339,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(134, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(134, false)),
             (GrammarTerminalClasses::error,
             ::rusty_lr_core::parser::state::ShiftTarget::new(135, true)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
@@ -9365,7 +9359,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(136, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(136, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [63,]; let shifted : & 'static
@@ -9383,7 +9377,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(138, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(138, false)),
             (GrammarTerminalClasses::error,
             ::rusty_lr_core::parser::state::ShiftTarget::new(139, true)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
@@ -9403,7 +9397,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(140, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(140, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [61,]; let shifted : & 'static
@@ -9438,7 +9432,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(143, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(143, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [55,]; let shifted : & 'static
@@ -9458,7 +9452,7 @@ impl GrammarParser {
             vec![(GrammarTerminalClasses::ident,
             ::rusty_lr_core::parser::state::ShiftTarget::new(75, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(145, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(145, false)),
             (GrammarTerminalClasses::literal,
             ::rusty_lr_core::parser::state::ShiftTarget::new(76, true)),],
             shift_goto_map_nonterm : vec![(GrammarNonTerminals::IdentOrLiteral,
@@ -9480,7 +9474,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(147, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(147, false)),
             (GrammarTerminalClasses::error,
             ::rusty_lr_core::parser::state::ShiftTarget::new(148, true)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
@@ -9500,7 +9494,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(149, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(149, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [65,]; let shifted : & 'static
@@ -9518,7 +9512,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(151, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(151, false)),
             (GrammarTerminalClasses::error,
             ::rusty_lr_core::parser::state::ShiftTarget::new(152, true)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
@@ -9538,7 +9532,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(153, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(153, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [67,]; let shifted : & 'static
@@ -9581,7 +9575,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(157, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(157, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [69,]; let shifted : & 'static
@@ -9619,7 +9613,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(161, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(161, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [68,]; let shifted : & 'static
@@ -9641,7 +9635,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(163, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(163, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -9749,7 +9743,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(165, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(165, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -9855,7 +9849,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(167, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(167, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(106, true)),
             (GrammarTerminalClasses::percent,
@@ -9963,7 +9957,7 @@ impl GrammarParser {
             (GrammarTerminalClasses::colon,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(169, true)),
+            ::rusty_lr_core::parser::state::ShiftTarget::new(169, false)),
             (GrammarTerminalClasses::pipe,
             ::rusty_lr_core::parser::state::ShiftTarget::new(109, true)),
             (GrammarTerminalClasses::percent,
@@ -10065,7 +10059,7 @@ impl GrammarParser {
             shifted as usize, } }).collect() } },
             ::rusty_lr_core::parser::state::IntermediateState { shift_goto_map_term :
             vec![(GrammarTerminalClasses::semicolon,
-            ::rusty_lr_core::parser::state::ShiftTarget::new(171, true)),],
+            ::rusty_lr_core::parser::state::ShiftTarget::new(171, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [74,]; let shifted : & 'static
diff --git a/scripts/diff/calculator.rs b/scripts/diff/calculator.rs
index 96ffd90a..d22f8231 100644
--- a/scripts/diff/calculator.rs
+++ b/scripts/diff/calculator.rs
@@ -312,7 +312,7 @@ impl EDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
@@ -322,7 +322,6 @@ impl EDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         let mut __rustylr_data_2 = __data_stack.__stack2.pop().unwrap();
         let mut __rustylr_data_0 = __data_stack.__stack2.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         let __rustylr_data_0 = Self::custom_reduce_action_0(
             __rustylr_data_0,
@@ -385,7 +384,7 @@ impl EDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -393,13 +392,12 @@ impl EDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(ETags::__stack2);
         let mut E = __data_stack.__stack2.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         let __res = E;
         __data_stack.__stack2.push(__res);
@@ -657,7 +655,7 @@ impl EParser {
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(ETerminalClasses::num, ::rusty_lr::parser::state::ShiftTarget::new(1,
             true)), (ETerminalClasses::lparen,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(ENonTerminals::A,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)), (ENonTerminals::M,
             ::rusty_lr::parser::state::ShiftTarget::new(6, true)), (ENonTerminals::P,
@@ -680,7 +678,7 @@ impl EParser {
             shift_goto_map_term : vec![(ETerminalClasses::num,
             ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
             (ETerminalClasses::lparen, ::rusty_lr::parser::state::ShiftTarget::new(2,
-            true)),], shift_goto_map_nonterm : vec![(ENonTerminals::A,
+            false)),], shift_goto_map_nonterm : vec![(ENonTerminals::A,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)), (ENonTerminals::M,
             ::rusty_lr::parser::state::ShiftTarget::new(6, true)), (ENonTerminals::P,
             ::rusty_lr::parser::state::ShiftTarget::new(6, true)), (ENonTerminals::E,
@@ -704,7 +702,7 @@ impl EParser {
             shift_goto_map_term : vec![(ETerminalClasses::num,
             ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
             (ETerminalClasses::lparen, ::rusty_lr::parser::state::ShiftTarget::new(2,
-            true)),], shift_goto_map_nonterm : vec![(ENonTerminals::A,
+            false)),], shift_goto_map_nonterm : vec![(ENonTerminals::A,
             ::rusty_lr::parser::state::ShiftTarget::new(5, true)), (ENonTerminals::M,
             ::rusty_lr::parser::state::ShiftTarget::new(6, true)), (ENonTerminals::P,
             ::rusty_lr::parser::state::ShiftTarget::new(6, true)),], reduce_map : { let
@@ -723,7 +721,7 @@ impl EParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(ETerminalClasses::star,
-            ::rusty_lr::parser::state::ShiftTarget::new(7, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(7, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); let reduce_rules = vec![1]; __reduce_map
             .extend(__rustylr_tset2.iter().map(| term | (* term, reduce_rules.clone())));
@@ -735,7 +733,7 @@ impl EParser {
             shift_goto_map_term : vec![(ETerminalClasses::num,
             ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
             (ETerminalClasses::lparen, ::rusty_lr::parser::state::ShiftTarget::new(2,
-            true)),], shift_goto_map_nonterm : vec![(ENonTerminals::M,
+            false)),], shift_goto_map_nonterm : vec![(ENonTerminals::M,
             ::rusty_lr::parser::state::ShiftTarget::new(8, true)), (ENonTerminals::P,
             ::rusty_lr::parser::state::ShiftTarget::new(8, true)),], reduce_map : { let
             mut __reduce_map = std::collections::BTreeMap::new(); __reduce_map
@@ -753,7 +751,7 @@ impl EParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(ETerminalClasses::rparen,
-            ::rusty_lr::parser::state::ShiftTarget::new(10, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(10, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [5,]; let shifted : & 'static [u8]
diff --git a/scripts/diff/calculator_u8.rs b/scripts/diff/calculator_u8.rs
index 4529e2d8..815fa698 100644
--- a/scripts/diff/calculator_u8.rs
+++ b/scripts/diff/calculator_u8.rs
@@ -275,10 +275,11 @@ impl EDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
         }
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
+        __data_stack.__tags.push(ETags::__terminals);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let __res = { '0' };
         __data_stack.__terminals.push(__res);
@@ -360,7 +361,7 @@ impl EDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
@@ -368,7 +369,7 @@ impl EDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 3usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 4usize) == Some(&
@@ -378,7 +379,6 @@ impl EDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 5usize);
         __data_stack.__tags.push(ETags::__stack3);
         let mut E = __data_stack.__stack3.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 5usize);
         let __res = E;
         __data_stack.__stack3.push(__res);
@@ -444,7 +444,7 @@ impl EDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
@@ -454,7 +454,6 @@ impl EDataStack {
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __data_stack.__tags.push(ETags::__stack3);
         let mut E = __data_stack.__stack3.pop().unwrap();
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         let __res = { -E };
         __data_stack.__stack3.push(__res);
@@ -474,7 +473,7 @@ impl EDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                ETags::__terminals)
+                ETags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -482,7 +481,6 @@ impl EDataStack {
             );
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -1002,7 +1000,7 @@ impl EParser {
             { ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted
             as usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(ETerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(7, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(7, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); let reduce_rules = vec![12]; __reduce_map
             .extend(__rustylr_tset3.iter().map(| term | (* term, reduce_rules.clone())));
@@ -1020,11 +1018,11 @@ impl EParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(ETerminalClasses::TermClass2,
-            ::rusty_lr::parser::state::ShiftTarget::new(9, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(9, false)),
             (ETerminalClasses::TermClass4,
-            ::rusty_lr::parser::state::ShiftTarget::new(23, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(23, false)),
             (ETerminalClasses::TermClass5,
-            ::rusty_lr::parser::state::ShiftTarget::new(18, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(18, false)),
             (ETerminalClasses::TermClass6,
             ::rusty_lr::parser::state::ShiftTarget::new(19, true)),],
             shift_goto_map_nonterm : vec![(ENonTerminals::Digit,
@@ -1056,7 +1054,7 @@ impl EParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(ETerminalClasses::TermClass3,
-            ::rusty_lr::parser::state::ShiftTarget::new(11, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(11, false)),
             (ETerminalClasses::TermClass7,
             ::rusty_lr::parser::state::ShiftTarget::new(13, true)),
             (ETerminalClasses::TermClass8,
@@ -1123,11 +1121,11 @@ impl EParser {
             { ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted
             as usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(ETerminalClasses::TermClass2,
-            ::rusty_lr::parser::state::ShiftTarget::new(9, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(9, false)),
             (ETerminalClasses::TermClass4,
-            ::rusty_lr::parser::state::ShiftTarget::new(16, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(16, false)),
             (ETerminalClasses::TermClass5,
-            ::rusty_lr::parser::state::ShiftTarget::new(18, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(18, false)),
             (ETerminalClasses::TermClass6,
             ::rusty_lr::parser::state::ShiftTarget::new(19, true)),],
             shift_goto_map_nonterm : vec![(ENonTerminals::Digit,
@@ -1187,7 +1185,7 @@ impl EParser {
             shift_goto_map_term : vec![(ETerminalClasses::TermClass0,
             ::rusty_lr::parser::state::ShiftTarget::new(6, false)),
             (ETerminalClasses::TermClass5,
-            ::rusty_lr::parser::state::ShiftTarget::new(18, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(18, false)),
             (ETerminalClasses::TermClass6,
             ::rusty_lr::parser::state::ShiftTarget::new(21, true)),],
             shift_goto_map_nonterm : vec![(ENonTerminals::Digit,
diff --git a/scripts/diff/json.rs b/scripts/diff/json.rs
index 1152f55c..771fe50b 100644
--- a/scripts/diff/json.rs
+++ b/scripts/diff/json.rs
@@ -541,7 +541,7 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -549,12 +549,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -572,7 +570,7 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -580,12 +578,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -603,7 +599,7 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -611,12 +607,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         let mut __rustylr_location_error = __location_stack.pop().unwrap();
         __location_stack.truncate(__location_stack.len() - 1usize);
@@ -665,7 +659,7 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
@@ -673,7 +667,6 @@ impl JsonDataStack {
             );
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -695,7 +688,7 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
@@ -711,7 +704,6 @@ impl JsonDataStack {
             );
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 5usize);
         Ok(false)
     }
@@ -729,7 +721,7 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -737,12 +729,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -789,7 +779,7 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
@@ -797,12 +787,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -824,12 +812,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -863,12 +849,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 4usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 5usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __location_stack.truncate(__location_stack.len() - 5usize);
         Ok(false)
     }
@@ -919,12 +903,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -946,12 +928,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -973,16 +953,14 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 2usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -1008,12 +986,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -1039,12 +1015,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -1066,12 +1040,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -1093,12 +1065,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -1116,24 +1086,22 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 3usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 4usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __location_stack.truncate(__location_stack.len() - 4usize);
         Ok(false)
     }
@@ -1151,28 +1119,26 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 3usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 4usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 5usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 5usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
         __location_stack.truncate(__location_stack.len() - 5usize);
         Ok(false)
     }
@@ -1190,24 +1156,22 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 3usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 4usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 4usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 3usize);
         __location_stack.truncate(__location_stack.len() - 4usize);
         Ok(false)
     }
@@ -1249,7 +1213,7 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 2usize) == Some(&
@@ -1257,7 +1221,6 @@ impl JsonDataStack {
             );
         }
         __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 3usize);
         Ok(false)
     }
@@ -1393,12 +1356,9 @@ impl JsonDataStack {
         {
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 0usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 1usize);
         Ok(false)
     }
@@ -1420,12 +1380,10 @@ impl JsonDataStack {
             );
             debug_assert!(
                 __data_stack.__tags.get(__data_stack.__tags.len() - 1 - 1usize) == Some(&
-                JsonTags::__terminals)
+                JsonTags::Empty)
             );
         }
-        __data_stack.__tags.truncate(__data_stack.__tags.len() - 2usize);
-        __data_stack.__tags.push(JsonTags::Empty);
-        __data_stack.__terminals.truncate(__data_stack.__terminals.len() - 1usize);
+        __data_stack.__tags.truncate(__data_stack.__tags.len() - 1usize);
         __location_stack.truncate(__location_stack.len() - 2usize);
         Ok(false)
     }
@@ -2365,9 +2323,9 @@ impl JsonParser {
         > = vec![
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(1, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Json,
             ::rusty_lr::parser::state::ShiftTarget::new(5, true)),
             (JsonNonTerminals::Element, ::rusty_lr::parser::state::ShiftTarget::new(5,
@@ -2384,9 +2342,9 @@ impl JsonParser {
             as usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(1, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -2400,9 +2358,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(1, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -2447,23 +2405,23 @@ impl JsonParser {
             usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass6,
-            ::rusty_lr::parser::state::ShiftTarget::new(8, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(8, false)),
             (JsonTerminalClasses::TermClass7,
-            ::rusty_lr::parser::state::ShiftTarget::new(13, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(13, false)),
             (JsonTerminalClasses::TermClass9,
-            ::rusty_lr::parser::state::ShiftTarget::new(17, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(17, false)),
             (JsonTerminalClasses::TermClass11,
-            ::rusty_lr::parser::state::ShiftTarget::new(21, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(21, false)),
             (JsonTerminalClasses::TermClass14,
             ::rusty_lr::parser::state::ShiftTarget::new(110, false)),
             (JsonTerminalClasses::TermClass15,
-            ::rusty_lr::parser::state::ShiftTarget::new(27, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(27, false)),
             (JsonTerminalClasses::TermClass20,
-            ::rusty_lr::parser::state::ShiftTarget::new(29, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(29, false)),
             (JsonTerminalClasses::TermClass27,
-            ::rusty_lr::parser::state::ShiftTarget::new(39, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(39, false)),
             (JsonTerminalClasses::TermClass29,
-            ::rusty_lr::parser::state::ShiftTarget::new(52, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(52, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Value,
             ::rusty_lr::parser::state::ShiftTarget::new(107, true)),
             (JsonNonTerminals::Object, ::rusty_lr::parser::state::ShiftTarget::new(107,
@@ -2490,7 +2448,7 @@ impl JsonParser {
             shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass22,
-            ::rusty_lr::parser::state::ShiftTarget::new(9, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(9, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [46,]; let shifted : & 'static
@@ -2498,7 +2456,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass24,
-            ::rusty_lr::parser::state::ShiftTarget::new(10, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(10, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [46,]; let shifted : & 'static
@@ -2506,7 +2464,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass25,
-            ::rusty_lr::parser::state::ShiftTarget::new(11, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(11, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [46,]; let shifted : & 'static
@@ -2514,7 +2472,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass19,
-            ::rusty_lr::parser::state::ShiftTarget::new(12, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(12, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [46,]; let shifted : & 'static
@@ -2530,7 +2488,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass26,
-            ::rusty_lr::parser::state::ShiftTarget::new(14, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(14, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [47,]; let shifted : & 'static
@@ -2538,7 +2496,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass24,
-            ::rusty_lr::parser::state::ShiftTarget::new(15, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(15, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [47,]; let shifted : & 'static
@@ -2546,7 +2504,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass24,
-            ::rusty_lr::parser::state::ShiftTarget::new(16, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(16, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [47,]; let shifted : & 'static
@@ -2562,7 +2520,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass8,
-            ::rusty_lr::parser::state::ShiftTarget::new(18, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(18, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [45,]; let shifted : & 'static
@@ -2570,7 +2528,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass26,
-            ::rusty_lr::parser::state::ShiftTarget::new(19, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(19, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [45,]; let shifted : & 'static
@@ -2578,7 +2536,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass19,
-            ::rusty_lr::parser::state::ShiftTarget::new(20, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(20, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [45,]; let shifted : & 'static
@@ -2596,7 +2554,7 @@ impl JsonParser {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass14,
             ::rusty_lr::parser::state::ShiftTarget::new(26, false)),
             (JsonTerminalClasses::TermClass15,
-            ::rusty_lr::parser::state::ShiftTarget::new(22, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(22, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::_TermSet33,
             ::rusty_lr::parser::state::ShiftTarget::new(26, true)),], reduce_map : { let
             mut __reduce_map = std::collections::BTreeMap::new(); __reduce_map
@@ -2686,9 +2644,9 @@ impl JsonParser {
             rule : rule as usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(1, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Element,
             ::rusty_lr::parser::state::ShiftTarget::new(30, true)),
             (JsonNonTerminals::WS, ::rusty_lr::parser::state::ShiftTarget::new(32,
@@ -2709,7 +2667,7 @@ impl JsonParser {
             shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass12,
-            ::rusty_lr::parser::state::ShiftTarget::new(31, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(31, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); let reduce_rules = vec![48]; __reduce_map
             .extend(__rustylr_tset5.iter().map(| term | (* term, reduce_rules.clone())));
@@ -2719,9 +2677,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(1, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Element,
             ::rusty_lr::parser::state::ShiftTarget::new(30, true)),
             (JsonNonTerminals::WS, ::rusty_lr::parser::state::ShiftTarget::new(32,
@@ -2738,23 +2696,23 @@ impl JsonParser {
             rule : rule as usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass6,
-            ::rusty_lr::parser::state::ShiftTarget::new(8, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(8, false)),
             (JsonTerminalClasses::TermClass7,
-            ::rusty_lr::parser::state::ShiftTarget::new(13, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(13, false)),
             (JsonTerminalClasses::TermClass9,
-            ::rusty_lr::parser::state::ShiftTarget::new(17, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(17, false)),
             (JsonTerminalClasses::TermClass11,
-            ::rusty_lr::parser::state::ShiftTarget::new(33, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(33, false)),
             (JsonTerminalClasses::TermClass14,
             ::rusty_lr::parser::state::ShiftTarget::new(97, false)),
             (JsonTerminalClasses::TermClass15,
-            ::rusty_lr::parser::state::ShiftTarget::new(36, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(36, false)),
             (JsonTerminalClasses::TermClass20,
-            ::rusty_lr::parser::state::ShiftTarget::new(29, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(29, false)),
             (JsonTerminalClasses::TermClass27,
-            ::rusty_lr::parser::state::ShiftTarget::new(39, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(39, false)),
             (JsonTerminalClasses::TermClass29,
-            ::rusty_lr::parser::state::ShiftTarget::new(52, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(52, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Value,
             ::rusty_lr::parser::state::ShiftTarget::new(94, true)),
             (JsonNonTerminals::Object, ::rusty_lr::parser::state::ShiftTarget::new(94,
@@ -2783,7 +2741,7 @@ impl JsonParser {
             vec![(JsonTerminalClasses::TermClass14,
             ::rusty_lr::parser::state::ShiftTarget::new(26, false)),
             (JsonTerminalClasses::TermClass15,
-            ::rusty_lr::parser::state::ShiftTarget::new(34, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(34, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::_TermSet33,
             ::rusty_lr::parser::state::ShiftTarget::new(26, true)),], reduce_map : { let
             mut __reduce_map = std::collections::BTreeMap::new(); __reduce_map
@@ -2841,7 +2799,7 @@ impl JsonParser {
             usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass21,
-            ::rusty_lr::parser::state::ShiftTarget::new(38, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(38, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [14,]; let shifted : & 'static
@@ -2857,9 +2815,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(40, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(40, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(41, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(41, false)),
             (JsonTerminalClasses::error, ::rusty_lr::parser::state::ShiftTarget::new(42,
             true)),], shift_goto_map_nonterm : vec![(JsonNonTerminals::Members,
             ::rusty_lr::parser::state::ShiftTarget::new(44, true)),
@@ -2877,9 +2835,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(40, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(40, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(41, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(41, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -2893,9 +2851,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(40, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(40, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(41, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(41, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -2909,7 +2867,7 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass28,
-            ::rusty_lr::parser::state::ShiftTarget::new(43, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(43, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [10,]; let shifted : & 'static
@@ -2925,7 +2883,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass28,
-            ::rusty_lr::parser::state::ShiftTarget::new(45, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(45, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [9,]; let shifted : & 'static [u8]
@@ -2941,7 +2899,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass12,
-            ::rusty_lr::parser::state::ShiftTarget::new(47, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(47, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); let reduce_rules = vec![11]; __reduce_map
             .extend(__rustylr_tset8.iter().map(| term | (* term, reduce_rules.clone())));
@@ -2951,9 +2909,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(48, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(48, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(49, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(49, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Members,
             ::rusty_lr::parser::state::ShiftTarget::new(50, true)),
             (JsonNonTerminals::Member, ::rusty_lr::parser::state::ShiftTarget::new(46,
@@ -2970,9 +2928,9 @@ impl JsonParser {
             rule : rule as usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(48, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(48, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(49, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(49, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -2986,9 +2944,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(48, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(48, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(49, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(49, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3010,7 +2968,7 @@ impl JsonParser {
             rule : rule as usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass29,
-            ::rusty_lr::parser::state::ShiftTarget::new(52, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(52, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::String,
             ::rusty_lr::parser::state::ShiftTarget::new(64, true)),], reduce_map : { let
             mut __reduce_map = std::collections::BTreeMap::new(); __reduce_map
@@ -3074,7 +3032,7 @@ impl JsonParser {
             (JsonTerminalClasses::TermClass28,
             ::rusty_lr::parser::state::ShiftTarget::new(60, false)),
             (JsonTerminalClasses::TermClass30,
-            ::rusty_lr::parser::state::ShiftTarget::new(53, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(53, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Character,
             ::rusty_lr::parser::state::ShiftTarget::new(60, true)),
             (JsonNonTerminals::_CharacterPlus27,
@@ -3106,7 +3064,7 @@ impl JsonParser {
             (JsonTerminalClasses::TermClass9,
             ::rusty_lr::parser::state::ShiftTarget::new(59, false)),
             (JsonTerminalClasses::TermClass26,
-            ::rusty_lr::parser::state::ShiftTarget::new(54, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(54, false)),
             (JsonTerminalClasses::TermClass29,
             ::rusty_lr::parser::state::ShiftTarget::new(59, false)),
             (JsonTerminalClasses::TermClass30,
@@ -3323,7 +3281,7 @@ impl JsonParser {
             (JsonTerminalClasses::TermClass28,
             ::rusty_lr::parser::state::ShiftTarget::new(60, false)),
             (JsonTerminalClasses::TermClass30,
-            ::rusty_lr::parser::state::ShiftTarget::new(53, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(53, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Character,
             ::rusty_lr::parser::state::ShiftTarget::new(60, true)),
             (JsonNonTerminals::_CharacterPlus27,
@@ -3349,7 +3307,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass29,
-            ::rusty_lr::parser::state::ShiftTarget::new(63, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(63, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [16,]; let shifted : & 'static
@@ -3365,9 +3323,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(65, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(65, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(66, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(66, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(67, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3381,9 +3339,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(65, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(65, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(66, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(66, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3397,9 +3355,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(65, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(65, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(66, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(66, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3413,7 +3371,7 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass16,
-            ::rusty_lr::parser::state::ShiftTarget::new(68, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(68, false)),],
             shift_goto_map_nonterm : vec![], reduce_map : { let mut __reduce_map =
             std::collections::BTreeMap::new(); __reduce_map.into_iter().collect() },
             ruleset : { let rules : & 'static [u8] = & [13,]; let shifted : & 'static
@@ -3421,9 +3379,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(1, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(1, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(2, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(2, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Element,
             ::rusty_lr::parser::state::ShiftTarget::new(69, true)),
             (JsonNonTerminals::WS, ::rusty_lr::parser::state::ShiftTarget::new(70,
@@ -3446,23 +3404,23 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass6,
-            ::rusty_lr::parser::state::ShiftTarget::new(8, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(8, false)),
             (JsonTerminalClasses::TermClass7,
-            ::rusty_lr::parser::state::ShiftTarget::new(13, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(13, false)),
             (JsonTerminalClasses::TermClass9,
-            ::rusty_lr::parser::state::ShiftTarget::new(17, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(17, false)),
             (JsonTerminalClasses::TermClass11,
-            ::rusty_lr::parser::state::ShiftTarget::new(71, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(71, false)),
             (JsonTerminalClasses::TermClass14,
             ::rusty_lr::parser::state::ShiftTarget::new(81, false)),
             (JsonTerminalClasses::TermClass15,
-            ::rusty_lr::parser::state::ShiftTarget::new(74, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(74, false)),
             (JsonTerminalClasses::TermClass20,
-            ::rusty_lr::parser::state::ShiftTarget::new(29, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(29, false)),
             (JsonTerminalClasses::TermClass27,
-            ::rusty_lr::parser::state::ShiftTarget::new(39, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(39, false)),
             (JsonTerminalClasses::TermClass29,
-            ::rusty_lr::parser::state::ShiftTarget::new(52, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(52, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Value,
             ::rusty_lr::parser::state::ShiftTarget::new(77, true)),
             (JsonNonTerminals::Object, ::rusty_lr::parser::state::ShiftTarget::new(77,
@@ -3491,7 +3449,7 @@ impl JsonParser {
             vec![(JsonTerminalClasses::TermClass14,
             ::rusty_lr::parser::state::ShiftTarget::new(26, false)),
             (JsonTerminalClasses::TermClass15,
-            ::rusty_lr::parser::state::ShiftTarget::new(72, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(72, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::_TermSet33,
             ::rusty_lr::parser::state::ShiftTarget::new(26, true)),], reduce_map : { let
             mut __reduce_map = std::collections::BTreeMap::new(); __reduce_map
@@ -3549,9 +3507,9 @@ impl JsonParser {
             usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass28,
-            ::rusty_lr::parser::state::ShiftTarget::new(76, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(76, false)),
             (JsonTerminalClasses::TermClass29,
-            ::rusty_lr::parser::state::ShiftTarget::new(52, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(52, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::String,
             ::rusty_lr::parser::state::ShiftTarget::new(64, true)),], reduce_map : { let
             mut __reduce_map = std::collections::BTreeMap::new(); __reduce_map
@@ -3569,9 +3527,9 @@ impl JsonParser {
             rule : rule as usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(78, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(78, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(79, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(79, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(80, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3585,9 +3543,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(78, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(78, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(79, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(79, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3601,9 +3559,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(78, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(78, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(79, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(79, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3625,7 +3583,7 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass13,
-            ::rusty_lr::parser::state::ShiftTarget::new(82, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(82, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::_Group34,
             ::rusty_lr::parser::state::ShiftTarget::new(85, false)),
             (JsonNonTerminals::__Group34Question35,
@@ -3677,9 +3635,9 @@ impl JsonParser {
             usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass18,
-            ::rusty_lr::parser::state::ShiftTarget::new(86, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(86, false)),
             (JsonTerminalClasses::TermClass19,
-            ::rusty_lr::parser::state::ShiftTarget::new(90, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(90, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Exponent,
             ::rusty_lr::parser::state::ShiftTarget::new(93, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3793,9 +3751,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(95, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(95, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(96, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(96, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(80, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3809,9 +3767,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(95, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(95, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(96, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(96, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3825,9 +3783,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(95, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(95, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(96, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(96, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3841,7 +3799,7 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass13,
-            ::rusty_lr::parser::state::ShiftTarget::new(98, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(98, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::_Group34,
             ::rusty_lr::parser::state::ShiftTarget::new(100, false)),
             (JsonNonTerminals::__Group34Question35,
@@ -3885,9 +3843,9 @@ impl JsonParser {
             usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass18,
-            ::rusty_lr::parser::state::ShiftTarget::new(101, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(101, false)),
             (JsonTerminalClasses::TermClass19,
-            ::rusty_lr::parser::state::ShiftTarget::new(104, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(104, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Exponent,
             ::rusty_lr::parser::state::ShiftTarget::new(93, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -3985,9 +3943,9 @@ impl JsonParser {
             ::rusty_lr::rule::ShiftedRuleRef { rule : rule as usize, shifted : shifted as
             usize, } }).collect() } }, ::rusty_lr::parser::state::IntermediateState {
             shift_goto_map_term : vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(108, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(108, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(109, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(109, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(80, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -4001,9 +3959,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(108, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(108, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(109, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(109, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(4, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -4017,9 +3975,9 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass0,
-            ::rusty_lr::parser::state::ShiftTarget::new(108, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(108, false)),
             (JsonTerminalClasses::TermClass1,
-            ::rusty_lr::parser::state::ShiftTarget::new(109, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(109, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::WS,
             ::rusty_lr::parser::state::ShiftTarget::new(3, true)),
             (JsonNonTerminals::_LiteralString36,
@@ -4033,7 +3991,7 @@ impl JsonParser {
             : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass13,
-            ::rusty_lr::parser::state::ShiftTarget::new(111, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(111, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::_Group34,
             ::rusty_lr::parser::state::ShiftTarget::new(113, false)),
             (JsonNonTerminals::__Group34Question35,
@@ -4077,9 +4035,9 @@ impl JsonParser {
             usize, shifted : shifted as usize, } }).collect() } },
             ::rusty_lr::parser::state::IntermediateState { shift_goto_map_term :
             vec![(JsonTerminalClasses::TermClass18,
-            ::rusty_lr::parser::state::ShiftTarget::new(114, true)),
+            ::rusty_lr::parser::state::ShiftTarget::new(114, false)),
             (JsonTerminalClasses::TermClass19,
-            ::rusty_lr::parser::state::ShiftTarget::new(117, true)),],
+            ::rusty_lr::parser::state::ShiftTarget::new(117, false)),],
             shift_goto_map_nonterm : vec![(JsonNonTerminals::Exponent,
             ::rusty_lr::parser::state::ShiftTarget::new(93, true)),
             (JsonNonTerminals::_LiteralString36,

From 3d5115a5fceaafb6c474448dccf7a0f4ac45af19 Mon Sep 17 00:00:00 2001
From: Taehwan Kim <ehwank98@gmail.com>
Date: Thu, 2 Oct 2025 18:17:18 +0900
Subject: [PATCH 5/6] add some comments

---
 rusty_lr_parser/src/grammar.rs | 1 +
 1 file changed, 1 insertion(+)

diff --git a/rusty_lr_parser/src/grammar.rs b/rusty_lr_parser/src/grammar.rs
index d1b7eee3..33c20c7c 100644
--- a/rusty_lr_parser/src/grammar.rs
+++ b/rusty_lr_parser/src/grammar.rs
@@ -1547,6 +1547,7 @@ impl Grammar {
             diag.removed.push(OptimizeRemove::NonTermDataNotUsed(i));
         }
 
+        // check for any data of terminal symbol was used in any reduce action
         for class_def in &mut self.terminal_classes {
             class_def.data_used = false;
         }

From c54647fff28ff7874bfc602db4214966a7724570 Mon Sep 17 00:00:00 2001
From: Taehwan Kim <ehwank98@gmail.com>
Date: Thu, 2 Oct 2025 18:24:22 +0900
Subject: [PATCH 6/6] Update rusty_lr_parser/src/grammar.rs

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---
 rusty_lr_parser/src/grammar.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/rusty_lr_parser/src/grammar.rs b/rusty_lr_parser/src/grammar.rs
index 33c20c7c..8b602ced 100644
--- a/rusty_lr_parser/src/grammar.rs
+++ b/rusty_lr_parser/src/grammar.rs
@@ -40,7 +40,7 @@ pub struct TerminalClassDefinition {
     /// compressed ranges, only if %tokentype is char or u8
     pub ranges: Vec<(u32, u32)>,
 
-    /// Wheather this class's data was used in any reduce action
+    /// Whether this class's data was used in any reduce action
     pub data_used: bool,
 }
 
