From ae37f374ccaff7f499f0fe421d768b5bbf622cf9 Mon Sep 17 00:00:00 2001
From: Niko Matsakis <niko@alum.mit.edu>
Date: Mon, 20 Jul 2015 05:21:12 -0400
Subject: [PATCH] move the action code back into the parent module so that
 `super::` resolves correctly (as I originally intended, but forgot) and add a
 test

---
 lalrpop-test/src/expr.rs       | 2971 ++++++++--------
 lalrpop-test/src/expr_arena.rs | 5798 ++++++++++++++++----------------
 lalrpop-test/src/loc.rs        |  173 +-
 lalrpop-test/src/main.rs       |    4 +
 lalrpop-test/src/sub.lalrpop   |    6 +-
 lalrpop-test/src/sub.rs        |  497 ++-
 lalrpop/src/build/mod.rs       |   83 +-
 lalrpop/src/lr1/ascent.rs      |    3 +-
 8 files changed, 4766 insertions(+), 4769 deletions(-)

diff --git a/lalrpop-test/src/expr.rs b/lalrpop-test/src/expr.rs
index 4df5a7c..31961b4 100644
--- a/lalrpop-test/src/expr.rs
+++ b/lalrpop-test/src/expr.rs
@@ -1,4 +1,5 @@
 #![allow(unused_imports)]
+#![allow(unused_variables)]
 use util::tok::Tok;
 
 #[allow(non_snake_case)]
@@ -23,10 +24,10 @@ mod __parse__Expr {
     use util::tok::Tok;
 
     pub enum __Nonterminal<> {
-        ____Expr(i32),
-        Factor(i32),
-        Term(i32),
         Expr(i32),
+        Factor(i32),
+        ____Expr(i32),
+        Term(i32),
     }
 
     // State 0
@@ -66,12 +67,12 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["/"]
     //   __Expr = (*) Expr [EOF]
     //
-    //   "Num" -> Shift(S3)
-    //   "(" -> Shift(S5)
+    //   "(" -> Shift(S1)
+    //   "Num" -> Shift(S5)
     //
-    //   Factor -> S4
-    //   Expr -> S1
     //   Term -> S2
+    //   Expr -> S4
+    //   Factor -> S3
     pub fn __state0<
         __TOKENS: Iterator<Item=Tok>,
     >(
@@ -83,16 +84,16 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym0 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state3(scale, __lookbehind, __lookahead, __tokens, __sym0));
-            }
             Some(__tok @ Tok::LParen(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym0 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
+                __result = try!(__state1(scale, __lookbehind, __lookahead, __tokens, __sym0));
+            }
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym0 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
                 __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym0));
             }
             _ => {
@@ -102,18 +103,18 @@ mod __parse__Expr {
         loop {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Factor(__nt) => {
-                    let __sym0 = &mut Some(__nt);
-                    __result = try!(__state4(scale, __lookbehind, __lookahead, __tokens, __sym0));
-                }
-                __Nonterminal::Expr(__nt) => {
-                    let __sym0 = &mut Some(__nt);
-                    __result = try!(__state1(scale, __lookbehind, __lookahead, __tokens, __sym0));
-                }
                 __Nonterminal::Term(__nt) => {
                     let __sym0 = &mut Some(__nt);
                     __result = try!(__state2(scale, __lookbehind, __lookahead, __tokens, __sym0));
                 }
+                __Nonterminal::Expr(__nt) => {
+                    let __sym0 = &mut Some(__nt);
+                    __result = try!(__state4(scale, __lookbehind, __lookahead, __tokens, __sym0));
+                }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym0 = &mut Some(__nt);
+                    __result = try!(__state3(scale, __lookbehind, __lookahead, __tokens, __sym0));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -122,234 +123,6 @@ mod __parse__Expr {
     }
 
     // State 1
-    //   Expr = Expr (*) "+" Factor [EOF]
-    //   Expr = Expr (*) "+" Factor ["+"]
-    //   Expr = Expr (*) "+" Factor ["-"]
-    //   Expr = Expr (*) "-" Factor [EOF]
-    //   Expr = Expr (*) "-" Factor ["+"]
-    //   Expr = Expr (*) "-" Factor ["-"]
-    //   __Expr = Expr (*) [EOF]
-    //
-    //   EOF -> Reduce(__Expr = Expr => Call(ActionFn(0));)
-    //   "+" -> Shift(S7)
-    //   "-" -> Shift(S6)
-    //
-    pub fn __state1<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::Plus(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state7(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some(__tok @ Tok::Minus(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action0(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::____Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 2
-    //   Factor = Term (*) [EOF]
-    //   Factor = Term (*) ["*"]
-    //   Factor = Term (*) ["+"]
-    //   Factor = Term (*) ["-"]
-    //   Factor = Term (*) ["/"]
-    //
-    //   "-" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   EOF -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   "+" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   "*" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   "/" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //
-    pub fn __state2<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Div(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 3
-    //   Term = "Num" (*) [EOF]
-    //   Term = "Num" (*) ["*"]
-    //   Term = "Num" (*) ["+"]
-    //   Term = "Num" (*) ["-"]
-    //   Term = "Num" (*) ["/"]
-    //
-    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   EOF -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //
-    pub fn __state3<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Div(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 4
-    //   Expr = Factor (*) [EOF]
-    //   Expr = Factor (*) ["+"]
-    //   Expr = Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [EOF]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [EOF]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   EOF -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "*" -> Shift(S8)
-    //   "/" -> Shift(S9)
-    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //
-    pub fn __state4<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::Times(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some(__tok @ Tok::Div(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 5
     //   Expr = (*) Expr "+" Factor [")"]
     //   Expr = (*) Expr "+" Factor ["+"]
     //   Expr = (*) Expr "+" Factor ["-"]
@@ -390,13 +163,13 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "(" -> Shift(S13)
-    //   "Num" -> Shift(S10)
+    //   "(" -> Shift(S6)
+    //   "Num" -> Shift(S9)
     //
-    //   Term -> S12
-    //   Factor -> S11
-    //   Expr -> S14
-    pub fn __state5<
+    //   Expr -> S7
+    //   Term -> S10
+    //   Factor -> S8
+    pub fn __state1<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -412,13 +185,13 @@ mod __parse__Expr {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some(Tok::Num(__tok0)) => {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym1));
             }
             _ => {
                 return Err(__lookahead);
@@ -427,183 +200,17 @@ mod __parse__Expr {
         while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym1));
-                }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state11(scale, __lookbehind, __lookahead, __tokens, __sym1));
-                }
                 __Nonterminal::Expr(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state14(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 6
-    //   Expr = Expr "-" (*) Factor [EOF]
-    //   Expr = Expr "-" (*) Factor ["+"]
-    //   Expr = Expr "-" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [EOF]
-    //   Factor = (*) Factor "*" Term ["*"]
-    //   Factor = (*) Factor "*" Term ["+"]
-    //   Factor = (*) Factor "*" Term ["-"]
-    //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [EOF]
-    //   Factor = (*) Factor "/" Term ["*"]
-    //   Factor = (*) Factor "/" Term ["+"]
-    //   Factor = (*) Factor "/" Term ["-"]
-    //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [EOF]
-    //   Factor = (*) Term ["*"]
-    //   Factor = (*) Term ["+"]
-    //   Factor = (*) Term ["-"]
-    //   Factor = (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [EOF]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [EOF]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "Num" -> Shift(S3)
-    //   "(" -> Shift(S5)
-    //
-    //   Factor -> S15
-    //   Term -> S2
-    pub fn __state6<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state3(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state15(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                    __result = try!(__state7(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
                 __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state2(scale, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 7
-    //   Expr = Expr "+" (*) Factor [EOF]
-    //   Expr = Expr "+" (*) Factor ["+"]
-    //   Expr = Expr "+" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [EOF]
-    //   Factor = (*) Factor "*" Term ["*"]
-    //   Factor = (*) Factor "*" Term ["+"]
-    //   Factor = (*) Factor "*" Term ["-"]
-    //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [EOF]
-    //   Factor = (*) Factor "/" Term ["*"]
-    //   Factor = (*) Factor "/" Term ["+"]
-    //   Factor = (*) Factor "/" Term ["-"]
-    //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [EOF]
-    //   Factor = (*) Term ["*"]
-    //   Factor = (*) Term ["+"]
-    //   Factor = (*) Term ["-"]
-    //   Factor = (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [EOF]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [EOF]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S5)
-    //   "Num" -> Shift(S3)
-    //
-    //   Term -> S2
-    //   Factor -> S16
-    pub fn __state7<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state3(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state2(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym1));
                 }
                 __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state16(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state8(scale, __lookbehind, __lookahead, __tokens, __sym1));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -613,150 +220,20 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 8
-    //   Factor = Factor "*" (*) Term [EOF]
-    //   Factor = Factor "*" (*) Term ["*"]
-    //   Factor = Factor "*" (*) Term ["+"]
-    //   Factor = Factor "*" (*) Term ["-"]
-    //   Factor = Factor "*" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [EOF]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [EOF]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
+    // State 2
+    //   Factor = Term (*) [EOF]
+    //   Factor = Term (*) ["*"]
+    //   Factor = Term (*) ["+"]
+    //   Factor = Term (*) ["-"]
+    //   Factor = Term (*) ["/"]
     //
-    //   "(" -> Shift(S5)
-    //   "Num" -> Shift(S3)
+    //   EOF -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "/" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "-" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "*" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "+" -> Reduce(Factor = Term => Call(ActionFn(6));)
     //
-    //   Term -> S17
-    pub fn __state8<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state3(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state17(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 9
-    //   Factor = Factor "/" (*) Term [EOF]
-    //   Factor = Factor "/" (*) Term ["*"]
-    //   Factor = Factor "/" (*) Term ["+"]
-    //   Factor = Factor "/" (*) Term ["-"]
-    //   Factor = Factor "/" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [EOF]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [EOF]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S5)
-    //   "Num" -> Shift(S3)
-    //
-    //   Term -> S18
-    pub fn __state9<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state3(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state18(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 10
-    //   Term = "Num" (*) [")"]
-    //   Term = "Num" (*) ["*"]
-    //   Term = "Num" (*) ["+"]
-    //   Term = "Num" (*) ["-"]
-    //   Term = "Num" (*) ["/"]
-    //
-    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   ")" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(7));)
-    //
-    pub fn __state10<
+    pub fn __state2<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -768,30 +245,30 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
             Some(Tok::Div(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::RParen(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some(Tok::Minus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
                 return Err(__lookahead);
@@ -799,28 +276,28 @@ mod __parse__Expr {
         }
     }
 
-    // State 11
-    //   Expr = Factor (*) [")"]
+    // State 3
+    //   Expr = Factor (*) [EOF]
     //   Expr = Factor (*) ["+"]
     //   Expr = Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term [EOF]
     //   Factor = Factor (*) "*" Term ["*"]
     //   Factor = Factor (*) "*" Term ["+"]
     //   Factor = Factor (*) "*" Term ["-"]
     //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term [EOF]
     //   Factor = Factor (*) "/" Term ["*"]
     //   Factor = Factor (*) "/" Term ["+"]
     //   Factor = Factor (*) "/" Term ["-"]
     //   Factor = Factor (*) "/" Term ["/"]
     //
-    //   ")" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "/" -> Shift(S19)
     //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   EOF -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "/" -> Shift(S11)
+    //   "*" -> Shift(S12)
     //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "*" -> Shift(S20)
     //
-    pub fn __state11<
+    pub fn __state3<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -836,27 +313,27 @@ mod __parse__Expr {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state19(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                __result = try!(__state11(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             Some(__tok @ Tok::Times(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state20(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some(Tok::RParen(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             Some(Tok::Minus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(scale, __sym0);
+                let __nt = super::__action3(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(scale, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             Some(Tok::Plus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(scale, __sym0);
+                let __nt = super::__action3(scale, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             _ => {
@@ -866,20 +343,20 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 12
-    //   Factor = Term (*) [")"]
-    //   Factor = Term (*) ["*"]
-    //   Factor = Term (*) ["+"]
-    //   Factor = Term (*) ["-"]
-    //   Factor = Term (*) ["/"]
+    // State 4
+    //   Expr = Expr (*) "+" Factor [EOF]
+    //   Expr = Expr (*) "+" Factor ["+"]
+    //   Expr = Expr (*) "+" Factor ["-"]
+    //   Expr = Expr (*) "-" Factor [EOF]
+    //   Expr = Expr (*) "-" Factor ["+"]
+    //   Expr = Expr (*) "-" Factor ["-"]
+    //   __Expr = Expr (*) [EOF]
     //
-    //   "+" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   "/" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   ")" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   "*" -> Reduce(Factor = Term => Call(ActionFn(6));)
-    //   "-" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "+" -> Shift(S13)
+    //   "-" -> Shift(S14)
+    //   EOF -> Reduce(__Expr = Expr => Call(ActionFn(0));)
     //
-    pub fn __state12<
+    pub fn __state4<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -891,30 +368,79 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
+            Some(__tok @ Tok::Plus(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some(__tok @ Tok::Minus(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state14(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action0(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::____Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 5
+    //   Term = "Num" (*) [EOF]
+    //   Term = "Num" (*) ["*"]
+    //   Term = "Num" (*) ["+"]
+    //   Term = "Num" (*) ["-"]
+    //   Term = "Num" (*) ["/"]
+    //
+    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   EOF -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //
+    pub fn __state5<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
             Some(Tok::Plus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some(Tok::Div(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
-            Some(Tok::RParen(..)) => {
+            None => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some(Tok::Minus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action6(scale, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             _ => {
                 return Err(__lookahead);
@@ -922,7 +448,7 @@ mod __parse__Expr {
         }
     }
 
-    // State 13
+    // State 6
     //   Expr = (*) Expr "+" Factor [")"]
     //   Expr = (*) Expr "+" Factor ["+"]
     //   Expr = (*) Expr "+" Factor ["-"]
@@ -963,13 +489,13 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "Num" -> Shift(S10)
-    //   "(" -> Shift(S13)
+    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S6)
     //
-    //   Expr -> S21
-    //   Factor -> S11
-    //   Term -> S12
-    pub fn __state13<
+    //   Factor -> S8
+    //   Term -> S10
+    //   Expr -> S15
+    pub fn __state6<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -985,13 +511,13 @@ mod __parse__Expr {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some(__tok @ Tok::LParen(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym1));
             }
             _ => {
                 return Err(__lookahead);
@@ -1000,17 +526,17 @@ mod __parse__Expr {
         while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Expr(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state21(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-                }
                 __Nonterminal::Factor(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state11(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                    __result = try!(__state8(scale, __lookbehind, __lookahead, __tokens, __sym1));
                 }
                 __Nonterminal::Term(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                    __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym1));
+                }
+                __Nonterminal::Expr(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state15(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -1020,7 +546,7 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 14
+    // State 7
     //   Expr = Expr (*) "+" Factor [")"]
     //   Expr = Expr (*) "+" Factor ["+"]
     //   Expr = Expr (*) "+" Factor ["-"]
@@ -1033,11 +559,11 @@ mod __parse__Expr {
     //   Term = "(" Expr (*) ")" ["-"]
     //   Term = "(" Expr (*) ")" ["/"]
     //
-    //   "-" -> Shift(S24)
-    //   ")" -> Shift(S23)
-    //   "+" -> Shift(S22)
+    //   "+" -> Shift(S18)
+    //   "-" -> Shift(S17)
+    //   ")" -> Shift(S16)
     //
-    pub fn __state14<
+    pub fn __state7<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -1050,23 +576,23 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
+            Some(__tok @ Tok::Plus(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state18(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            }
             Some(__tok @ Tok::Minus(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state24(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+                __result = try!(__state17(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
             }
             Some(__tok @ Tok::RParen(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state23(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-            }
-            Some(__tok @ Tok::Plus(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state22(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+                __result = try!(__state16(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -1075,423 +601,482 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
+    // State 8
+    //   Expr = Factor (*) [")"]
+    //   Expr = Factor (*) ["+"]
+    //   Expr = Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "/" -> Shift(S19)
+    //   ")" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "*" -> Shift(S20)
+    //
+    pub fn __state8<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(__tok @ Tok::Div(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state19(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some(__tok @ Tok::Times(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state20(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 9
+    //   Term = "Num" (*) [")"]
+    //   Term = "Num" (*) ["*"]
+    //   Term = "Num" (*) ["+"]
+    //   Term = "Num" (*) ["-"]
+    //   Term = "Num" (*) ["/"]
+    //
+    //   ")" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(7));)
+    //
+    pub fn __state9<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 10
+    //   Factor = Term (*) [")"]
+    //   Factor = Term (*) ["*"]
+    //   Factor = Term (*) ["+"]
+    //   Factor = Term (*) ["-"]
+    //   Factor = Term (*) ["/"]
+    //
+    //   ")" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "-" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "+" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "*" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //   "/" -> Reduce(Factor = Term => Call(ActionFn(6));)
+    //
+    pub fn __state10<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action6(scale, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 11
+    //   Factor = Factor "/" (*) Term [EOF]
+    //   Factor = Factor "/" (*) Term ["*"]
+    //   Factor = Factor "/" (*) Term ["+"]
+    //   Factor = Factor "/" (*) Term ["-"]
+    //   Factor = Factor "/" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "Num" -> Shift(S5)
+    //   "(" -> Shift(S1)
+    //
+    //   Term -> S21
+    pub fn __state11<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state21(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 12
+    //   Factor = Factor "*" (*) Term [EOF]
+    //   Factor = Factor "*" (*) Term ["*"]
+    //   Factor = Factor "*" (*) Term ["+"]
+    //   Factor = Factor "*" (*) Term ["-"]
+    //   Factor = Factor "*" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "Num" -> Shift(S5)
+    //   "(" -> Shift(S1)
+    //
+    //   Term -> S22
+    pub fn __state12<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state22(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 13
+    //   Expr = Expr "+" (*) Factor [EOF]
+    //   Expr = Expr "+" (*) Factor ["+"]
+    //   Expr = Expr "+" (*) Factor ["-"]
+    //   Factor = (*) Factor "*" Term [EOF]
+    //   Factor = (*) Factor "*" Term ["*"]
+    //   Factor = (*) Factor "*" Term ["+"]
+    //   Factor = (*) Factor "*" Term ["-"]
+    //   Factor = (*) Factor "*" Term ["/"]
+    //   Factor = (*) Factor "/" Term [EOF]
+    //   Factor = (*) Factor "/" Term ["*"]
+    //   Factor = (*) Factor "/" Term ["+"]
+    //   Factor = (*) Factor "/" Term ["-"]
+    //   Factor = (*) Factor "/" Term ["/"]
+    //   Factor = (*) Term [EOF]
+    //   Factor = (*) Term ["*"]
+    //   Factor = (*) Term ["+"]
+    //   Factor = (*) Term ["-"]
+    //   Factor = (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "Num" -> Shift(S5)
+    //   "(" -> Shift(S1)
+    //
+    //   Factor -> S23
+    //   Term -> S2
+    pub fn __state13<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state23(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state2(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 14
+    //   Expr = Expr "-" (*) Factor [EOF]
+    //   Expr = Expr "-" (*) Factor ["+"]
+    //   Expr = Expr "-" (*) Factor ["-"]
+    //   Factor = (*) Factor "*" Term [EOF]
+    //   Factor = (*) Factor "*" Term ["*"]
+    //   Factor = (*) Factor "*" Term ["+"]
+    //   Factor = (*) Factor "*" Term ["-"]
+    //   Factor = (*) Factor "*" Term ["/"]
+    //   Factor = (*) Factor "/" Term [EOF]
+    //   Factor = (*) Factor "/" Term ["*"]
+    //   Factor = (*) Factor "/" Term ["+"]
+    //   Factor = (*) Factor "/" Term ["-"]
+    //   Factor = (*) Factor "/" Term ["/"]
+    //   Factor = (*) Term [EOF]
+    //   Factor = (*) Term ["*"]
+    //   Factor = (*) Term ["+"]
+    //   Factor = (*) Term ["-"]
+    //   Factor = (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "Num" -> Shift(S5)
+    //   "(" -> Shift(S1)
+    //
+    //   Factor -> S24
+    //   Term -> S2
+    pub fn __state14<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state5(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state24(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state2(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
     // State 15
-    //   Expr = Expr "-" Factor (*) [EOF]
-    //   Expr = Expr "-" Factor (*) ["+"]
-    //   Expr = Expr "-" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [EOF]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [EOF]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   EOF -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "/" -> Shift(S9)
-    //   "*" -> Shift(S8)
-    //
-    pub fn __state15<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::Div(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(__tok @ Tok::Times(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 16
-    //   Expr = Expr "+" Factor (*) [EOF]
-    //   Expr = Expr "+" Factor (*) ["+"]
-    //   Expr = Expr "+" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [EOF]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [EOF]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "*" -> Shift(S8)
-    //   "/" -> Shift(S9)
-    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   EOF -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //
-    pub fn __state16<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::Times(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(__tok @ Tok::Div(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 17
-    //   Factor = Factor "*" Term (*) [EOF]
-    //   Factor = Factor "*" Term (*) ["*"]
-    //   Factor = Factor "*" Term (*) ["+"]
-    //   Factor = Factor "*" Term (*) ["-"]
-    //   Factor = Factor "*" Term (*) ["/"]
-    //
-    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   EOF -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //
-    pub fn __state17<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Div(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 18
-    //   Factor = Factor "/" Term (*) [EOF]
-    //   Factor = Factor "/" Term (*) ["*"]
-    //   Factor = Factor "/" Term (*) ["+"]
-    //   Factor = Factor "/" Term (*) ["-"]
-    //   Factor = Factor "/" Term (*) ["/"]
-    //
-    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   EOF -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //
-    pub fn __state18<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Div(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 19
-    //   Factor = Factor "/" (*) Term [")"]
-    //   Factor = Factor "/" (*) Term ["*"]
-    //   Factor = Factor "/" (*) Term ["+"]
-    //   Factor = Factor "/" (*) Term ["-"]
-    //   Factor = Factor "/" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S13)
-    //   "Num" -> Shift(S10)
-    //
-    //   Term -> S25
-    pub fn __state19<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state25(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 20
-    //   Factor = Factor "*" (*) Term [")"]
-    //   Factor = Factor "*" (*) Term ["*"]
-    //   Factor = Factor "*" (*) Term ["+"]
-    //   Factor = Factor "*" (*) Term ["-"]
-    //   Factor = Factor "*" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "Num" -> Shift(S10)
-    //   "(" -> Shift(S13)
-    //
-    //   Term -> S26
-    pub fn __state20<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state26(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 21
     //   Expr = Expr (*) "+" Factor [")"]
     //   Expr = Expr (*) "+" Factor ["+"]
     //   Expr = Expr (*) "+" Factor ["-"]
@@ -1504,11 +1089,11 @@ mod __parse__Expr {
     //   Term = "(" Expr (*) ")" ["-"]
     //   Term = "(" Expr (*) ")" ["/"]
     //
-    //   "+" -> Shift(S22)
-    //   "-" -> Shift(S24)
-    //   ")" -> Shift(S27)
+    //   ")" -> Shift(S25)
+    //   "-" -> Shift(S17)
+    //   "+" -> Shift(S18)
     //
-    pub fn __state21<
+    pub fn __state15<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -1521,23 +1106,23 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(__tok @ Tok::Plus(..)) => {
+            Some(__tok @ Tok::RParen(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state22(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+                __result = try!(__state25(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
             }
             Some(__tok @ Tok::Minus(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state24(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+                __result = try!(__state17(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
             }
-            Some(__tok @ Tok::RParen(..)) => {
+            Some(__tok @ Tok::Plus(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state27(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                __result = try!(__state18(scale, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -1546,103 +1131,20 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 22
-    //   Expr = Expr "+" (*) Factor [")"]
-    //   Expr = Expr "+" (*) Factor ["+"]
-    //   Expr = Expr "+" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [")"]
-    //   Factor = (*) Factor "*" Term ["*"]
-    //   Factor = (*) Factor "*" Term ["+"]
-    //   Factor = (*) Factor "*" Term ["-"]
-    //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [")"]
-    //   Factor = (*) Factor "/" Term ["*"]
-    //   Factor = (*) Factor "/" Term ["+"]
-    //   Factor = (*) Factor "/" Term ["-"]
-    //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [")"]
-    //   Factor = (*) Term ["*"]
-    //   Factor = (*) Term ["+"]
-    //   Factor = (*) Term ["-"]
-    //   Factor = (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S13)
-    //   "Num" -> Shift(S10)
-    //
-    //   Term -> S12
-    //   Factor -> S28
-    pub fn __state22<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(__tok @ Tok::LParen(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some(Tok::Num(__tok0)) => {
-                let mut __lookbehind = None;
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state28(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 23
+    // State 16
     //   Term = "(" Expr ")" (*) [EOF]
     //   Term = "(" Expr ")" (*) ["*"]
     //   Term = "(" Expr ")" (*) ["+"]
     //   Term = "(" Expr ")" (*) ["-"]
     //   Term = "(" Expr ")" (*) ["/"]
     //
-    //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //   EOF -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
     //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
     //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   EOF -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
     //
-    pub fn __state23<
+    pub fn __state16<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -1656,39 +1158,39 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(Tok::Div(..)) => {
+            Some(Tok::Minus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some(Tok::Plus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some(Tok::Times(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             _ => {
@@ -1697,7 +1199,7 @@ mod __parse__Expr {
         }
     }
 
-    // State 24
+    // State 17
     //   Expr = Expr "-" (*) Factor [")"]
     //   Expr = Expr "-" (*) Factor ["+"]
     //   Expr = Expr "-" (*) Factor ["-"]
@@ -1727,12 +1229,164 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "(" -> Shift(S13)
-    //   "Num" -> Shift(S10)
+    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S6)
     //
-    //   Factor -> S29
-    //   Term -> S12
-    pub fn __state24<
+    //   Term -> S10
+    //   Factor -> S26
+    pub fn __state17<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state26(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 18
+    //   Expr = Expr "+" (*) Factor [")"]
+    //   Expr = Expr "+" (*) Factor ["+"]
+    //   Expr = Expr "+" (*) Factor ["-"]
+    //   Factor = (*) Factor "*" Term [")"]
+    //   Factor = (*) Factor "*" Term ["*"]
+    //   Factor = (*) Factor "*" Term ["+"]
+    //   Factor = (*) Factor "*" Term ["-"]
+    //   Factor = (*) Factor "*" Term ["/"]
+    //   Factor = (*) Factor "/" Term [")"]
+    //   Factor = (*) Factor "/" Term ["*"]
+    //   Factor = (*) Factor "/" Term ["+"]
+    //   Factor = (*) Factor "/" Term ["-"]
+    //   Factor = (*) Factor "/" Term ["/"]
+    //   Factor = (*) Term [")"]
+    //   Factor = (*) Term ["*"]
+    //   Factor = (*) Term ["+"]
+    //   Factor = (*) Term ["-"]
+    //   Factor = (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S6)
+    //
+    //   Term -> S10
+    //   Factor -> S27
+    pub fn __state18<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state27(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 19
+    //   Factor = Factor "/" (*) Term [")"]
+    //   Factor = Factor "/" (*) Term ["*"]
+    //   Factor = Factor "/" (*) Term ["+"]
+    //   Factor = Factor "/" (*) Term ["-"]
+    //   Factor = Factor "/" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "(" -> Shift(S6)
+    //   "Num" -> Shift(S9)
+    //
+    //   Term -> S28
+    pub fn __state19<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -1749,13 +1403,13 @@ mod __parse__Expr {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state13(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym2));
             }
             Some(Tok::Num(__tok0)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state10(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -1764,13 +1418,9 @@ mod __parse__Expr {
         while __sym1.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state29(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
                 __Nonterminal::Term(__nt) => {
                     let __sym2 = &mut Some(__nt);
-                    __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym2));
+                    __result = try!(__state28(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -1780,20 +1430,85 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 25
-    //   Factor = Factor "/" Term (*) [")"]
+    // State 20
+    //   Factor = Factor "*" (*) Term [")"]
+    //   Factor = Factor "*" (*) Term ["*"]
+    //   Factor = Factor "*" (*) Term ["+"]
+    //   Factor = Factor "*" (*) Term ["-"]
+    //   Factor = Factor "*" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "(" -> Shift(S6)
+    //   "Num" -> Shift(S9)
+    //
+    //   Term -> S29
+    pub fn __state20<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(__tok @ Tok::LParen(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state6(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some(Tok::Num(__tok0)) => {
+                let mut __lookbehind = None;
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state9(scale, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state29(scale, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 21
+    //   Factor = Factor "/" Term (*) [EOF]
     //   Factor = Factor "/" Term (*) ["*"]
     //   Factor = Factor "/" Term (*) ["+"]
     //   Factor = Factor "/" Term (*) ["-"]
     //   Factor = Factor "/" Term (*) ["/"]
     //
-    //   ")" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   EOF -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
     //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
     //
-    pub fn __state25<
+    pub fn __state21<
         __TOKENS: Iterator<Item=Tok>,
     >(
         scale: i32,
@@ -1807,39 +1522,39 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(Tok::RParen(..)) => {
+            None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some(Tok::Div(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(scale, __sym0, __sym1, __sym2);
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
@@ -1848,18 +1563,312 @@ mod __parse__Expr {
         }
     }
 
-    // State 26
-    //   Factor = Factor "*" Term (*) [")"]
+    // State 22
+    //   Factor = Factor "*" Term (*) [EOF]
     //   Factor = Factor "*" Term (*) ["*"]
     //   Factor = Factor "*" Term (*) ["+"]
     //   Factor = Factor "*" Term (*) ["-"]
     //   Factor = Factor "*" Term (*) ["/"]
     //
-    //   ")" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
     //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
     //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   EOF -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //
+    pub fn __state22<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 23
+    //   Expr = Expr "+" Factor (*) [EOF]
+    //   Expr = Expr "+" Factor (*) ["+"]
+    //   Expr = Expr "+" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [EOF]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [EOF]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   EOF -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "*" -> Shift(S12)
+    //   "/" -> Shift(S11)
+    //
+    pub fn __state23<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(__tok @ Tok::Times(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(__tok @ Tok::Div(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state11(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 24
+    //   Expr = Expr "-" Factor (*) [EOF]
+    //   Expr = Expr "-" Factor (*) ["+"]
+    //   Expr = Expr "-" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [EOF]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [EOF]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "*" -> Shift(S12)
+    //   "/" -> Shift(S11)
+    //   EOF -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //
+    pub fn __state24<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(__tok @ Tok::Times(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state12(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(__tok @ Tok::Div(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state11(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 25
+    //   Term = "(" Expr ")" (*) [")"]
+    //   Term = "(" Expr ")" (*) ["*"]
+    //   Term = "(" Expr ")" (*) ["+"]
+    //   Term = "(" Expr ")" (*) ["-"]
+    //   Term = "(" Expr ")" (*) ["/"]
+    //
+    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   ")" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
+    //
+    pub fn __state25<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<i32>,
+        __sym2: &mut Option<Tok>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action8(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 26
+    //   Expr = Expr "-" Factor (*) [")"]
+    //   Expr = Expr "-" Factor (*) ["+"]
+    //   Expr = Expr "-" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "/" -> Shift(S19)
+    //   ")" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "*" -> Shift(S20)
+    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
     //
     pub fn __state26<
         __TOKENS: Iterator<Item=Tok>,
@@ -1875,116 +1884,47 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
+            Some(__tok @ Tok::Div(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state19(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(__tok @ Tok::Times(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state20(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
             Some(Tok::RParen(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some(Tok::Div(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action1(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             Some(Tok::Plus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action1(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
-            Some(Tok::Times(..)) => {
+            Some(Tok::Minus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+                let __nt = super::__action1(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
+        return Ok(__result);
     }
 
     // State 27
-    //   Term = "(" Expr ")" (*) [")"]
-    //   Term = "(" Expr ")" (*) ["*"]
-    //   Term = "(" Expr ")" (*) ["+"]
-    //   Term = "(" Expr ")" (*) ["-"]
-    //   Term = "(" Expr ")" (*) ["/"]
-    //
-    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //   ")" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(8));)
-    //
-    pub fn __state27<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        scale: i32,
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-        __sym1: &mut Option<i32>,
-        __sym2: &mut Option<Tok>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Plus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Div(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::RParen(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some(Tok::Times(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action8(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 28
     //   Expr = Expr "+" Factor (*) [")"]
     //   Expr = Expr "+" Factor (*) ["+"]
     //   Expr = Expr "+" Factor (*) ["-"]
@@ -1999,11 +1939,78 @@ mod __parse__Expr {
     //   Factor = Factor (*) "/" Term ["-"]
     //   Factor = Factor (*) "/" Term ["/"]
     //
-    //   ")" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
     //   "/" -> Shift(S19)
-    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
     //   "*" -> Shift(S20)
+    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   ")" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //
+    pub fn __state27<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        scale: i32,
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(__tok @ Tok::Div(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state19(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(__tok @ Tok::Times(..)) => {
+                let mut __lookbehind = None;
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state20(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 28
+    //   Factor = Factor "/" Term (*) [")"]
+    //   Factor = Factor "/" Term (*) ["*"]
+    //   Factor = Factor "/" Term (*) ["+"]
+    //   Factor = Factor "/" Term (*) ["-"]
+    //   Factor = Factor "/" Term (*) ["/"]
+    //
+    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   ")" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
     //
     pub fn __state28<
         __TOKENS: Iterator<Item=Tok>,
@@ -2019,66 +2026,59 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(__tok @ Tok::Div(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state19(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(__tok @ Tok::Times(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state20(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some(Tok::RParen(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Times(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some(Tok::Plus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action5(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
-        return Ok(__result);
     }
 
     // State 29
-    //   Expr = Expr "-" Factor (*) [")"]
-    //   Expr = Expr "-" Factor (*) ["+"]
-    //   Expr = Expr "-" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
+    //   Factor = Factor "*" Term (*) [")"]
+    //   Factor = Factor "*" Term (*) ["*"]
+    //   Factor = Factor "*" Term (*) ["+"]
+    //   Factor = Factor "*" Term (*) ["-"]
+    //   Factor = Factor "*" Term (*) ["/"]
     //
-    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   ")" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "/" -> Shift(S19)
-    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "*" -> Shift(S20)
+    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   ")" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
     //
     pub fn __state29<
         __TOKENS: Iterator<Item=Tok>,
@@ -2094,140 +2094,135 @@ mod __parse__Expr {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(__tok @ Tok::Div(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state19(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(__tok @ Tok::Times(..)) => {
-                let mut __lookbehind = None;
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state20(scale, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some(Tok::Plus(..)) => {
+            Some(Tok::Times(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some(Tok::RParen(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some(Tok::Minus(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(scale, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Div(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some(Tok::Plus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(scale, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
-        return Ok(__result);
     }
 }
 
-mod __actions {
-    #![allow(unused_variables)]
-    use util::tok::Tok;
-
-
-    pub fn __action0<
-    >(
-        scale: i32,
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action1<
-    >(
-        scale: i32,
-        l: i32,
-        _: Tok,
-        r: i32,
-    ) -> i32
-    {
-        l - r
-    }
-
-    pub fn __action2<
-    >(
-        scale: i32,
-        l: i32,
-        _: Tok,
-        r: i32,
-    ) -> i32
-    {
-        l + r
-    }
-
-    pub fn __action3<
-    >(
-        scale: i32,
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action4<
-    >(
-        scale: i32,
-        l: i32,
-        _: Tok,
-        r: i32,
-    ) -> i32
-    {
-        l * r
-    }
-
-    pub fn __action5<
-    >(
-        scale: i32,
-        l: i32,
-        _: Tok,
-        r: i32,
-    ) -> i32
-    {
-        l / r
-    }
-
-    pub fn __action6<
-    >(
-        scale: i32,
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action7<
-    >(
-        scale: i32,
-        n: i32,
-    ) -> i32
-    {
-        n * scale
-    }
-
-    pub fn __action8<
-    >(
-        scale: i32,
-        _: Tok,
-        __0: i32,
-        _: Tok,
-    ) -> i32
-    {
-        (__0)
-    }
+pub fn __action0<
+>(
+    scale: i32,
+    __0: i32,
+) -> i32
+{
+    (__0)
+}
+
+pub fn __action1<
+>(
+    scale: i32,
+    l: i32,
+    _: Tok,
+    r: i32,
+) -> i32
+{
+    l - r
+}
+
+pub fn __action2<
+>(
+    scale: i32,
+    l: i32,
+    _: Tok,
+    r: i32,
+) -> i32
+{
+    l + r
+}
+
+pub fn __action3<
+>(
+    scale: i32,
+    __0: i32,
+) -> i32
+{
+    (__0)
+}
+
+pub fn __action4<
+>(
+    scale: i32,
+    l: i32,
+    _: Tok,
+    r: i32,
+) -> i32
+{
+    l * r
+}
+
+pub fn __action5<
+>(
+    scale: i32,
+    l: i32,
+    _: Tok,
+    r: i32,
+) -> i32
+{
+    l / r
+}
+
+pub fn __action6<
+>(
+    scale: i32,
+    __0: i32,
+) -> i32
+{
+    (__0)
+}
+
+pub fn __action7<
+>(
+    scale: i32,
+    n: i32,
+) -> i32
+{
+    n * scale
+}
+
+pub fn __action8<
+>(
+    scale: i32,
+    _: Tok,
+    __0: i32,
+    _: Tok,
+) -> i32
+{
+    (__0)
 }
diff --git a/lalrpop-test/src/expr_arena.rs b/lalrpop-test/src/expr_arena.rs
index c1997cf..4514026 100644
--- a/lalrpop-test/src/expr_arena.rs
+++ b/lalrpop-test/src/expr_arena.rs
@@ -1,4 +1,5 @@
 #![allow(unused_imports)]
+#![allow(unused_variables)]
 use expr_arena_ast::{Arena, Node, Op};
 use util::tok::Tok;
 
@@ -26,14 +27,14 @@ mod __parse__Expr {
     use util::tok::Tok;
 
     pub enum __Nonterminal<'ast, > {
-        Comma_3cExpr_3e(Vec<&'ast Node<'ast>>),
         _28_3cExpr_3e_20_22_2c_22_29(&'ast Node<'ast>),
+        Comma_3cExpr_3e(Vec<&'ast Node<'ast>>),
         Term(&'ast Node<'ast>),
-        ____Expr(&'ast Node<'ast>),
-        Expr(&'ast Node<'ast>),
-        Expr_3f(::std::option::Option<&'ast Node<'ast>>),
         Factor(&'ast Node<'ast>),
         _28_3cExpr_3e_20_22_2c_22_29_2a(::std::vec::Vec<&'ast Node<'ast>>),
+        Expr(&'ast Node<'ast>),
+        Expr_3f(::std::option::Option<&'ast Node<'ast>>),
+        ____Expr(&'ast Node<'ast>),
     }
 
     // State 0
@@ -78,13 +79,13 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["/"]
     //   __Expr = (*) Expr [EOF]
     //
-    //   "*" -> Shift(S1)
-    //   "(" -> Shift(S2)
-    //   "Num" -> Shift(S6)
+    //   "(" -> Shift(S3)
+    //   "*" -> Shift(S6)
+    //   "Num" -> Shift(S1)
     //
     //   Expr -> S4
-    //   Factor -> S3
     //   Term -> S5
+    //   Factor -> S2
     pub fn __state0<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -97,23 +98,23 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym0 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym0));
-            }
             Some((_, __tok @ Tok::LParen(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym0 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state2(arena, __lookbehind, __lookahead, __tokens, __sym0));
+                __result = try!(__state3(arena, __lookbehind, __lookahead, __tokens, __sym0));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym0 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym0));
             }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym0 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym0));
+                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym0));
             }
             _ => {
                 return Err(__lookahead);
@@ -126,14 +127,14 @@ mod __parse__Expr {
                     let __sym0 = &mut Some(__nt);
                     __result = try!(__state4(arena, __lookbehind, __lookahead, __tokens, __sym0));
                 }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym0 = &mut Some(__nt);
-                    __result = try!(__state3(arena, __lookbehind, __lookahead, __tokens, __sym0));
-                }
                 __Nonterminal::Term(__nt) => {
                     let __sym0 = &mut Some(__nt);
                     __result = try!(__state5(arena, __lookbehind, __lookahead, __tokens, __sym0));
                 }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym0 = &mut Some(__nt);
+                    __result = try!(__state2(arena, __lookbehind, __lookahead, __tokens, __sym0));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -142,13 +143,17 @@ mod __parse__Expr {
     }
 
     // State 1
-    //   Factor = "*" (*) "(" Comma<Expr> ")" [EOF]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["*"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["+"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["-"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["/"]
+    //   Term = "Num" (*) [EOF]
+    //   Term = "Num" (*) ["*"]
+    //   Term = "Num" (*) ["+"]
+    //   Term = "Num" (*) ["-"]
+    //   Term = "Num" (*) ["/"]
     //
-    //   "(" -> Shift(S7)
+    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   EOF -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(8));)
     //
     pub fn __state1<
         'ast,
@@ -158,17 +163,103 @@ mod __parse__Expr {
         __lookbehind: Option<usize>,
         __lookahead: Option<(usize,Tok,usize)>,
         __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
+        __sym0: &mut Option<i32>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 2
+    //   Expr = Factor (*) [EOF]
+    //   Expr = Factor (*) ["+"]
+    //   Expr = Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [EOF]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [EOF]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "/" -> Shift(S8)
+    //   "*" -> Shift(S7)
+    //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   EOF -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //
+    pub fn __state2<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
                 __result = try!(__state7(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
             _ => {
                 return Err(__lookahead);
             }
@@ -176,7 +267,7 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 2
+    // State 3
     //   Expr = (*) Expr "+" Factor [")"]
     //   Expr = (*) Expr "+" Factor ["+"]
     //   Expr = (*) Expr "+" Factor ["-"]
@@ -222,14 +313,14 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "(" -> Shift(S9)
+    //   "(" -> Shift(S14)
     //   "*" -> Shift(S11)
-    //   "Num" -> Shift(S8)
+    //   "Num" -> Shift(S9)
     //
     //   Expr -> S10
-    //   Factor -> S13
     //   Term -> S12
-    pub fn __state2<
+    //   Factor -> S13
+    pub fn __state3<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -246,7 +337,7 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
@@ -258,7 +349,7 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             _ => {
                 return Err(__lookahead);
@@ -271,14 +362,14 @@ mod __parse__Expr {
                     let __sym1 = &mut Some(__nt);
                     __result = try!(__state10(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state13(arena, __lookbehind, __lookahead, __tokens, __sym1));
-                }
                 __Nonterminal::Term(__nt) => {
                     let __sym1 = &mut Some(__nt);
                     __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym1));
                 }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state13(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -287,74 +378,6 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 3
-    //   Expr = Factor (*) [EOF]
-    //   Expr = Factor (*) ["+"]
-    //   Expr = Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [EOF]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [EOF]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "*" -> Shift(S14)
-    //   EOF -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "/" -> Shift(S15)
-    //
-    pub fn __state3<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state15(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
     // State 4
     //   Expr = Expr (*) "+" Factor [EOF]
     //   Expr = Expr (*) "+" Factor ["+"]
@@ -364,9 +387,9 @@ mod __parse__Expr {
     //   Expr = Expr (*) "-" Factor ["-"]
     //   __Expr = Expr (*) [EOF]
     //
-    //   "-" -> Shift(S17)
-    //   EOF -> Reduce(__Expr = Expr => Call(ActionFn(0));)
+    //   "-" -> Shift(S15)
     //   "+" -> Shift(S16)
+    //   EOF -> Reduce(__Expr = Expr => Call(ActionFn(0));)
     //
     pub fn __state4<
         'ast,
@@ -385,7 +408,7 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state17(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                __result = try!(__state15(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             Some((_, __tok @ Tok::Plus(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
@@ -395,7 +418,7 @@ mod __parse__Expr {
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action0(arena, __sym0);
+                let __nt = super::__action0(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::____Expr(__nt)));
             }
             _ => {
@@ -413,9 +436,9 @@ mod __parse__Expr {
     //   Factor = Term (*) ["/"]
     //
     //   "*" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "-" -> Reduce(Factor = Term => Call(ActionFn(7));)
     //   "/" -> Reduce(Factor = Term => Call(ActionFn(7));)
     //   "+" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "-" -> Reduce(Factor = Term => Call(ActionFn(7));)
     //   EOF -> Reduce(Factor = Term => Call(ActionFn(7));)
     //
     pub fn __state5<
@@ -433,27 +456,27 @@ mod __parse__Expr {
         match __lookahead {
             Some((_, Tok::Times(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
+                let __nt = super::__action7(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
+                let __nt = super::__action7(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
@@ -463,17 +486,13 @@ mod __parse__Expr {
     }
 
     // State 6
-    //   Term = "Num" (*) [EOF]
-    //   Term = "Num" (*) ["*"]
-    //   Term = "Num" (*) ["+"]
-    //   Term = "Num" (*) ["-"]
-    //   Term = "Num" (*) ["/"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" [EOF]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["*"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["+"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["-"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["/"]
     //
-    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   EOF -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "(" -> Shift(S17)
     //
     pub fn __state6<
         'ast,
@@ -483,65 +502,45 @@ mod __parse__Expr {
         __lookbehind: Option<usize>,
         __lookahead: Option<(usize,Tok,usize)>,
         __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
+        __sym0: &mut Option<Tok>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state17(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
+        return Ok(__result);
     }
 
     // State 7
-    //   (<Expr> ",")* = (*) ["("]
-    //   (<Expr> ",")* = (*) [")"]
-    //   (<Expr> ",")* = (*) ["*"]
-    //   (<Expr> ",")* = (*) ["Num"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["("]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") [")"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["*"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["Num"]
-    //   Comma<Expr> = (*) (<Expr> ",")* Expr? [")"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" [EOF]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["*"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["+"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["-"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["/"]
+    //   Factor = Factor "*" (*) Term [EOF]
+    //   Factor = Factor "*" (*) Term ["*"]
+    //   Factor = Factor "*" (*) Term ["+"]
+    //   Factor = Factor "*" (*) Term ["-"]
+    //   Factor = Factor "*" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
     //
-    //   "*" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   "Num" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   "(" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   ")" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "(" -> Shift(S3)
+    //   "Num" -> Shift(S1)
     //
-    //   Comma<Expr> -> S19
-    //   (<Expr> ",")* -> S18
+    //   Term -> S18
     pub fn __state7<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -550,27 +549,23 @@ mod __parse__Expr {
         __lookbehind: Option<usize>,
         __lookahead: Option<(usize,Tok,usize)>,
         __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
+        __sym0: &mut Option<&'ast Node<'ast>>,
         __sym1: &mut Option<Tok>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Times(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state3(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
-            Some((_, Tok::Num(_), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            Some((_, Tok::LParen(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -579,13 +574,9 @@ mod __parse__Expr {
         while __sym1.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Comma_3cExpr_3e(__nt) => {
+                __Nonterminal::Term(__nt) => {
                     let __sym2 = &mut Some(__nt);
-                    __result = try!(__state19(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state18(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                    __result = try!(__state18(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -596,19 +587,85 @@ mod __parse__Expr {
     }
 
     // State 8
+    //   Factor = Factor "/" (*) Term [EOF]
+    //   Factor = Factor "/" (*) Term ["*"]
+    //   Factor = Factor "/" (*) Term ["+"]
+    //   Factor = Factor "/" (*) Term ["-"]
+    //   Factor = Factor "/" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "(" -> Shift(S3)
+    //   "Num" -> Shift(S1)
+    //
+    //   Term -> S19
+    pub fn __state8<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state3(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state19(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 9
     //   Term = "Num" (*) [")"]
     //   Term = "Num" (*) ["*"]
     //   Term = "Num" (*) ["+"]
     //   Term = "Num" (*) ["-"]
     //   Term = "Num" (*) ["/"]
     //
-    //   ")" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(8));)
     //   "+" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   ")" -> Reduce(Term = "Num" => Call(ActionFn(8));)
     //
-    pub fn __state8<
+    pub fn __state9<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -621,29 +678,29 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::RParen(..), _)) => {
+            Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
+                let __nt = super::__action8(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some((_, Tok::Div(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
+                let __nt = super::__action8(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
-            Some((_, Tok::Plus(..), _)) => {
+            Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             _ => {
@@ -652,7 +709,223 @@ mod __parse__Expr {
         }
     }
 
-    // State 9
+    // State 10
+    //   Expr = Expr (*) "+" Factor [")"]
+    //   Expr = Expr (*) "+" Factor ["+"]
+    //   Expr = Expr (*) "+" Factor ["-"]
+    //   Expr = Expr (*) "-" Factor [")"]
+    //   Expr = Expr (*) "-" Factor ["+"]
+    //   Expr = Expr (*) "-" Factor ["-"]
+    //   Term = "(" Expr (*) ")" [EOF]
+    //   Term = "(" Expr (*) ")" ["*"]
+    //   Term = "(" Expr (*) ")" ["+"]
+    //   Term = "(" Expr (*) ")" ["-"]
+    //   Term = "(" Expr (*) ")" ["/"]
+    //
+    //   "+" -> Shift(S22)
+    //   ")" -> Shift(S21)
+    //   "-" -> Shift(S20)
+    //
+    pub fn __state10<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Plus(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state22(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            }
+            Some((_, __tok @ Tok::RParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state21(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+            }
+            Some((_, __tok @ Tok::Minus(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state20(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 11
+    //   Factor = "*" (*) "(" Comma<Expr> ")" [")"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["*"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["+"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["-"]
+    //   Factor = "*" (*) "(" Comma<Expr> ")" ["/"]
+    //
+    //   "(" -> Shift(S23)
+    //
+    pub fn __state11<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state23(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 12
+    //   Factor = Term (*) [")"]
+    //   Factor = Term (*) ["*"]
+    //   Factor = Term (*) ["+"]
+    //   Factor = Term (*) ["-"]
+    //   Factor = Term (*) ["/"]
+    //
+    //   "*" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "/" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "-" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "+" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   ")" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //
+    pub fn __state12<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 13
+    //   Expr = Factor (*) [")"]
+    //   Expr = Factor (*) ["+"]
+    //   Expr = Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "*" -> Shift(S25)
+    //   ")" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "/" -> Shift(S24)
+    //
+    pub fn __state13<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state25(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state24(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 14
     //   Expr = (*) Expr "+" Factor [")"]
     //   Expr = (*) Expr "+" Factor ["+"]
     //   Expr = (*) Expr "+" Factor ["-"]
@@ -698,308 +971,13 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "Num" -> Shift(S8)
-    //   "(" -> Shift(S9)
     //   "*" -> Shift(S11)
+    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S14)
     //
-    //   Factor -> S13
-    //   Expr -> S20
+    //   Expr -> S26
     //   Term -> S12
-    pub fn __state9<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym1));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym1));
-            }
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state11(arena, __lookbehind, __lookahead, __tokens, __sym1));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym0.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Factor(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state13(arena, __lookbehind, __lookahead, __tokens, __sym1));
-                }
-                __Nonterminal::Expr(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state20(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-                }
-                __Nonterminal::Term(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym1));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 10
-    //   Expr = Expr (*) "+" Factor [")"]
-    //   Expr = Expr (*) "+" Factor ["+"]
-    //   Expr = Expr (*) "+" Factor ["-"]
-    //   Expr = Expr (*) "-" Factor [")"]
-    //   Expr = Expr (*) "-" Factor ["+"]
-    //   Expr = Expr (*) "-" Factor ["-"]
-    //   Term = "(" Expr (*) ")" [EOF]
-    //   Term = "(" Expr (*) ")" ["*"]
-    //   Term = "(" Expr (*) ")" ["+"]
-    //   Term = "(" Expr (*) ")" ["-"]
-    //   Term = "(" Expr (*) ")" ["/"]
-    //
-    //   ")" -> Shift(S21)
-    //   "+" -> Shift(S22)
-    //   "-" -> Shift(S23)
-    //
-    pub fn __state10<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-        __sym1: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::RParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state21(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-            }
-            Some((_, __tok @ Tok::Plus(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state22(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
-            }
-            Some((_, __tok @ Tok::Minus(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state23(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 11
-    //   Factor = "*" (*) "(" Comma<Expr> ")" [")"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["*"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["+"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["-"]
-    //   Factor = "*" (*) "(" Comma<Expr> ")" ["/"]
-    //
-    //   "(" -> Shift(S24)
-    //
-    pub fn __state11<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state24(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 12
-    //   Factor = Term (*) [")"]
-    //   Factor = Term (*) ["*"]
-    //   Factor = Term (*) ["+"]
-    //   Factor = Term (*) ["-"]
-    //   Factor = Term (*) ["/"]
-    //
-    //   "+" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "*" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "/" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "-" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   ")" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //
-    pub fn __state12<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 13
-    //   Expr = Factor (*) [")"]
-    //   Expr = Factor (*) ["+"]
-    //   Expr = Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "*" -> Shift(S25)
-    //   "/" -> Shift(S26)
-    //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   ")" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //
-    pub fn __state13<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state25(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state26(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 14
-    //   Factor = Factor "*" (*) Term [EOF]
-    //   Factor = Factor "*" (*) Term ["*"]
-    //   Factor = Factor "*" (*) Term ["+"]
-    //   Factor = Factor "*" (*) Term ["-"]
-    //   Factor = Factor "*" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [EOF]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [EOF]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S2)
-    //   "Num" -> Shift(S6)
-    //
-    //   Term -> S27
+    //   Factor -> S13
     pub fn __state14<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -1008,34 +986,47 @@ mod __parse__Expr {
         __lookbehind: Option<usize>,
         __lookahead: Option<(usize,Tok,usize)>,
         __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
+        __sym0: &mut Option<Tok>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
+                let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state2(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state11(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
+                let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym1));
+            }
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
-        while __sym1.is_some() {
+        while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
+                __Nonterminal::Expr(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state26(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                }
                 __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state27(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state13(arena, __lookbehind, __lookahead, __tokens, __sym1));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -1046,11 +1037,29 @@ mod __parse__Expr {
     }
 
     // State 15
-    //   Factor = Factor "/" (*) Term [EOF]
-    //   Factor = Factor "/" (*) Term ["*"]
-    //   Factor = Factor "/" (*) Term ["+"]
-    //   Factor = Factor "/" (*) Term ["-"]
-    //   Factor = Factor "/" (*) Term ["/"]
+    //   Expr = Expr "-" (*) Factor [EOF]
+    //   Expr = Expr "-" (*) Factor ["+"]
+    //   Expr = Expr "-" (*) Factor ["-"]
+    //   Factor = (*) Factor "*" Term [EOF]
+    //   Factor = (*) Factor "*" Term ["*"]
+    //   Factor = (*) Factor "*" Term ["+"]
+    //   Factor = (*) Factor "*" Term ["-"]
+    //   Factor = (*) Factor "*" Term ["/"]
+    //   Factor = (*) Factor "/" Term [EOF]
+    //   Factor = (*) Factor "/" Term ["*"]
+    //   Factor = (*) Factor "/" Term ["+"]
+    //   Factor = (*) Factor "/" Term ["-"]
+    //   Factor = (*) Factor "/" Term ["/"]
+    //   Factor = (*) Term [EOF]
+    //   Factor = (*) Term ["*"]
+    //   Factor = (*) Term ["+"]
+    //   Factor = (*) Term ["-"]
+    //   Factor = (*) Term ["/"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" [EOF]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
     //   Term = (*) "(" Expr ")" [EOF]
     //   Term = (*) "(" Expr ")" ["*"]
     //   Term = (*) "(" Expr ")" ["+"]
@@ -1062,10 +1071,12 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "Num" -> Shift(S6)
-    //   "(" -> Shift(S2)
+    //   "(" -> Shift(S3)
+    //   "Num" -> Shift(S1)
+    //   "*" -> Shift(S6)
     //
-    //   Term -> S28
+    //   Term -> S5
+    //   Factor -> S27
     pub fn __state15<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -1080,17 +1091,23 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
             Some((_, __tok @ Tok::LParen(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state2(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state3(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -1101,7 +1118,11 @@ mod __parse__Expr {
             match __nt {
                 __Nonterminal::Term(__nt) => {
                     let __sym2 = &mut Some(__nt);
-                    __result = try!(__state28(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                    __result = try!(__state5(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state27(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -1146,12 +1167,12 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "Num" -> Shift(S6)
-    //   "*" -> Shift(S1)
-    //   "(" -> Shift(S2)
+    //   "(" -> Shift(S3)
+    //   "Num" -> Shift(S1)
+    //   "*" -> Shift(S6)
     //
+    //   Factor -> S28
     //   Term -> S5
-    //   Factor -> S29
     pub fn __state16<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -1166,23 +1187,23 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state3(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state2(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -1191,11 +1212,87 @@ mod __parse__Expr {
         while __sym1.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state28(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
                 __Nonterminal::Term(__nt) => {
                     let __sym2 = &mut Some(__nt);
                     __result = try!(__state5(arena, __lookbehind, __lookahead, __tokens, __sym2));
                 }
-                __Nonterminal::Factor(__nt) => {
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 17
+    //   (<Expr> ",")* = (*) ["("]
+    //   (<Expr> ",")* = (*) [")"]
+    //   (<Expr> ",")* = (*) ["*"]
+    //   (<Expr> ",")* = (*) ["Num"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["("]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") [")"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["*"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["Num"]
+    //   Comma<Expr> = (*) (<Expr> ",")* Expr? [")"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" [EOF]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["*"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["+"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["-"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["/"]
+    //
+    //   "Num" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "(" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   ")" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "*" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //
+    //   (<Expr> ",")* -> S30
+    //   Comma<Expr> -> S29
+    pub fn __state17<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Num(_), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::LParen(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state30(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                __Nonterminal::Comma_3cExpr_3e(__nt) => {
                     let __sym2 = &mut Some(__nt);
                     __result = try!(__state29(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
@@ -1207,48 +1304,186 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 17
-    //   Expr = Expr "-" (*) Factor [EOF]
+    // State 18
+    //   Factor = Factor "*" Term (*) [EOF]
+    //   Factor = Factor "*" Term (*) ["*"]
+    //   Factor = Factor "*" Term (*) ["+"]
+    //   Factor = Factor "*" Term (*) ["-"]
+    //   Factor = Factor "*" Term (*) ["/"]
+    //
+    //   EOF -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //
+    pub fn __state18<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 19
+    //   Factor = Factor "/" Term (*) [EOF]
+    //   Factor = Factor "/" Term (*) ["*"]
+    //   Factor = Factor "/" Term (*) ["+"]
+    //   Factor = Factor "/" Term (*) ["-"]
+    //   Factor = Factor "/" Term (*) ["/"]
+    //
+    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   EOF -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //
+    pub fn __state19<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 20
+    //   Expr = Expr "-" (*) Factor [")"]
     //   Expr = Expr "-" (*) Factor ["+"]
     //   Expr = Expr "-" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [EOF]
+    //   Factor = (*) Factor "*" Term [")"]
     //   Factor = (*) Factor "*" Term ["*"]
     //   Factor = (*) Factor "*" Term ["+"]
     //   Factor = (*) Factor "*" Term ["-"]
     //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [EOF]
+    //   Factor = (*) Factor "/" Term [")"]
     //   Factor = (*) Factor "/" Term ["*"]
     //   Factor = (*) Factor "/" Term ["+"]
     //   Factor = (*) Factor "/" Term ["-"]
     //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [EOF]
+    //   Factor = (*) Term [")"]
     //   Factor = (*) Term ["*"]
     //   Factor = (*) Term ["+"]
     //   Factor = (*) Term ["-"]
     //   Factor = (*) Term ["/"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" [EOF]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" [")"]
     //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
     //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
     //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
     //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
-    //   Term = (*) "(" Expr ")" [EOF]
+    //   Term = (*) "(" Expr ")" [")"]
     //   Term = (*) "(" Expr ")" ["*"]
     //   Term = (*) "(" Expr ")" ["+"]
     //   Term = (*) "(" Expr ")" ["-"]
     //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [EOF]
+    //   Term = (*) "Num" [")"]
     //   Term = (*) "Num" ["*"]
     //   Term = (*) "Num" ["+"]
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "(" -> Shift(S2)
-    //   "Num" -> Shift(S6)
-    //   "*" -> Shift(S1)
+    //   "(" -> Shift(S14)
+    //   "Num" -> Shift(S9)
+    //   "*" -> Shift(S11)
     //
-    //   Term -> S5
-    //   Factor -> S30
-    pub fn __state17<
+    //   Factor -> S31
+    //   Term -> S12
+    pub fn __state20<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -1266,19 +1501,330 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state2(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state6(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state1(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state11(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state31(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 21
+    //   Term = "(" Expr ")" (*) [EOF]
+    //   Term = "(" Expr ")" (*) ["*"]
+    //   Term = "(" Expr ")" (*) ["+"]
+    //   Term = "(" Expr ")" (*) ["-"]
+    //   Term = "(" Expr ")" (*) ["/"]
+    //
+    //   EOF -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //
+    pub fn __state21<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<&'ast Node<'ast>>,
+        __sym2: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 22
+    //   Expr = Expr "+" (*) Factor [")"]
+    //   Expr = Expr "+" (*) Factor ["+"]
+    //   Expr = Expr "+" (*) Factor ["-"]
+    //   Factor = (*) Factor "*" Term [")"]
+    //   Factor = (*) Factor "*" Term ["*"]
+    //   Factor = (*) Factor "*" Term ["+"]
+    //   Factor = (*) Factor "*" Term ["-"]
+    //   Factor = (*) Factor "*" Term ["/"]
+    //   Factor = (*) Factor "/" Term [")"]
+    //   Factor = (*) Factor "/" Term ["*"]
+    //   Factor = (*) Factor "/" Term ["+"]
+    //   Factor = (*) Factor "/" Term ["-"]
+    //   Factor = (*) Factor "/" Term ["/"]
+    //   Factor = (*) Term [")"]
+    //   Factor = (*) Term ["*"]
+    //   Factor = (*) Term ["+"]
+    //   Factor = (*) Term ["-"]
+    //   Factor = (*) Term ["/"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" [")"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "*" -> Shift(S11)
+    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S14)
+    //
+    //   Factor -> S32
+    //   Term -> S12
+    pub fn __state22<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state11(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Factor(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state32(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 23
+    //   (<Expr> ",")* = (*) ["("]
+    //   (<Expr> ",")* = (*) [")"]
+    //   (<Expr> ",")* = (*) ["*"]
+    //   (<Expr> ",")* = (*) ["Num"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["("]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") [")"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["*"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["Num"]
+    //   Comma<Expr> = (*) (<Expr> ",")* Expr? [")"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" [")"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["*"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["+"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["-"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["/"]
+    //
+    //   "(" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   ")" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "*" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "Num" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //
+    //   Comma<Expr> -> S33
+    //   (<Expr> ",")* -> S30
+    pub fn __state23<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::LParen(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::Num(_), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Comma_3cExpr_3e(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state33(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state30(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 24
+    //   Factor = Factor "/" (*) Term [")"]
+    //   Factor = Factor "/" (*) Term ["*"]
+    //   Factor = Factor "/" (*) Term ["+"]
+    //   Factor = Factor "/" (*) Term ["-"]
+    //   Factor = Factor "/" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "(" -> Shift(S14)
+    //   "Num" -> Shift(S9)
+    //
+    //   Term -> S34
+    pub fn __state24<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -1289,11 +1835,7 @@ mod __parse__Expr {
             match __nt {
                 __Nonterminal::Term(__nt) => {
                     let __sym2 = &mut Some(__nt);
-                    __result = try!(__state5(arena, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state30(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                    __result = try!(__state34(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -1303,7 +1845,318 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 18
+    // State 25
+    //   Factor = Factor "*" (*) Term [")"]
+    //   Factor = Factor "*" (*) Term ["*"]
+    //   Factor = Factor "*" (*) Term ["+"]
+    //   Factor = Factor "*" (*) Term ["-"]
+    //   Factor = Factor "*" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "(" -> Shift(S14)
+    //   "Num" -> Shift(S9)
+    //
+    //   Term -> S35
+    pub fn __state25<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state35(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 26
+    //   Expr = Expr (*) "+" Factor [")"]
+    //   Expr = Expr (*) "+" Factor ["+"]
+    //   Expr = Expr (*) "+" Factor ["-"]
+    //   Expr = Expr (*) "-" Factor [")"]
+    //   Expr = Expr (*) "-" Factor ["+"]
+    //   Expr = Expr (*) "-" Factor ["-"]
+    //   Term = "(" Expr (*) ")" [")"]
+    //   Term = "(" Expr (*) ")" ["*"]
+    //   Term = "(" Expr (*) ")" ["+"]
+    //   Term = "(" Expr (*) ")" ["-"]
+    //   Term = "(" Expr (*) ")" ["/"]
+    //
+    //   "+" -> Shift(S22)
+    //   ")" -> Shift(S36)
+    //   "-" -> Shift(S20)
+    //
+    pub fn __state26<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Plus(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state22(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            }
+            Some((_, __tok @ Tok::RParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state36(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+            }
+            Some((_, __tok @ Tok::Minus(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state20(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 27
+    //   Expr = Expr "-" Factor (*) [EOF]
+    //   Expr = Expr "-" Factor (*) ["+"]
+    //   Expr = Expr "-" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [EOF]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [EOF]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "/" -> Shift(S8)
+    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   EOF -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "*" -> Shift(S7)
+    //
+    pub fn __state27<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state7(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 28
+    //   Expr = Expr "+" Factor (*) [EOF]
+    //   Expr = Expr "+" Factor (*) ["+"]
+    //   Expr = Expr "+" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [EOF]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [EOF]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "/" -> Shift(S8)
+    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "*" -> Shift(S7)
+    //   EOF -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //
+    pub fn __state28<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state7(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 29
+    //   Factor = "*" "(" Comma<Expr> (*) ")" [EOF]
+    //   Factor = "*" "(" Comma<Expr> (*) ")" ["*"]
+    //   Factor = "*" "(" Comma<Expr> (*) ")" ["+"]
+    //   Factor = "*" "(" Comma<Expr> (*) ")" ["-"]
+    //   Factor = "*" "(" Comma<Expr> (*) ")" ["/"]
+    //
+    //   ")" -> Shift(S37)
+    //
+    pub fn __state29<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<Vec<&'ast Node<'ast>>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::RParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state37(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2, __sym3));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 30
     //   (<Expr> ",") = (*) Expr "," ["("]
     //   (<Expr> ",") = (*) Expr "," [")"]
     //   (<Expr> ",") = (*) Expr "," ["*"]
@@ -1364,17 +2217,17 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "Num" -> Shift(S31)
-    //   "*" -> Shift(S35)
+    //   "(" -> Shift(S45)
     //   ")" -> Reduce(Expr? =  => Call(ActionFn(12));)
-    //   "(" -> Shift(S36)
+    //   "Num" -> Shift(S42)
+    //   "*" -> Shift(S40)
     //
-    //   (<Expr> ",") -> S32
-    //   Factor -> S34
-    //   Expr? -> S37
-    //   Expr -> S33
-    //   Term -> S38
-    pub fn __state18<
+    //   Factor -> S38
+    //   Expr -> S41
+    //   Expr? -> S39
+    //   Term -> S43
+    //   (<Expr> ",") -> S44
+    pub fn __state30<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -1387,26 +2240,26 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state45(arena, __lookbehind, __lookahead, __tokens, __sym1));
+            }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state31(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state42(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state35(arena, __lookbehind, __lookahead, __tokens, __sym1));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state36(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state40(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some((_, Tok::RParen(..), _)) => {
-                let __nt = super::__actions::__action12(arena, );
+                let __nt = super::__action12(arena, );
                 __result = (__lookbehind, __lookahead, __Nonterminal::Expr_3f(__nt));
             }
             _ => {
@@ -1416,25 +2269,25 @@ mod __parse__Expr {
         while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state32(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-                }
                 __Nonterminal::Factor(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state34(arena, __lookbehind, __lookahead, __tokens, __sym1));
-                }
-                __Nonterminal::Expr_3f(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state37(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                    __result = try!(__state38(arena, __lookbehind, __lookahead, __tokens, __sym1));
                 }
                 __Nonterminal::Expr(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state33(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                    __result = try!(__state41(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                }
+                __Nonterminal::Expr_3f(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state39(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
                 __Nonterminal::Term(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state38(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                    __result = try!(__state43(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                }
+                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state44(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -1444,16 +2297,168 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 19
-    //   Factor = "*" "(" Comma<Expr> (*) ")" [EOF]
+    // State 31
+    //   Expr = Expr "-" Factor (*) [")"]
+    //   Expr = Expr "-" Factor (*) ["+"]
+    //   Expr = Expr "-" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "/" -> Shift(S24)
+    //   ")" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "*" -> Shift(S25)
+    //
+    pub fn __state31<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state24(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state25(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 32
+    //   Expr = Expr "+" Factor (*) [")"]
+    //   Expr = Expr "+" Factor (*) ["+"]
+    //   Expr = Expr "+" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "/" -> Shift(S24)
+    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   ")" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "*" -> Shift(S25)
+    //
+    pub fn __state32<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state24(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state25(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 33
+    //   Factor = "*" "(" Comma<Expr> (*) ")" [")"]
     //   Factor = "*" "(" Comma<Expr> (*) ")" ["*"]
     //   Factor = "*" "(" Comma<Expr> (*) ")" ["+"]
     //   Factor = "*" "(" Comma<Expr> (*) ")" ["-"]
     //   Factor = "*" "(" Comma<Expr> (*) ")" ["/"]
     //
-    //   ")" -> Shift(S39)
+    //   ")" -> Shift(S46)
     //
-    pub fn __state19<
+    pub fn __state33<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -1472,7 +2477,7 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym3 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state39(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2, __sym3));
+                __result = try!(__state46(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2, __sym3));
             }
             _ => {
                 return Err(__lookahead);
@@ -1481,24 +2486,20 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 20
-    //   Expr = Expr (*) "+" Factor [")"]
-    //   Expr = Expr (*) "+" Factor ["+"]
-    //   Expr = Expr (*) "+" Factor ["-"]
-    //   Expr = Expr (*) "-" Factor [")"]
-    //   Expr = Expr (*) "-" Factor ["+"]
-    //   Expr = Expr (*) "-" Factor ["-"]
-    //   Term = "(" Expr (*) ")" [")"]
-    //   Term = "(" Expr (*) ")" ["*"]
-    //   Term = "(" Expr (*) ")" ["+"]
-    //   Term = "(" Expr (*) ")" ["-"]
-    //   Term = "(" Expr (*) ")" ["/"]
+    // State 34
+    //   Factor = Factor "/" Term (*) [")"]
+    //   Factor = Factor "/" Term (*) ["*"]
+    //   Factor = Factor "/" Term (*) ["+"]
+    //   Factor = Factor "/" Term (*) ["-"]
+    //   Factor = Factor "/" Term (*) ["/"]
     //
-    //   "+" -> Shift(S22)
-    //   ")" -> Shift(S40)
-    //   "-" -> Shift(S23)
+    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   ")" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
     //
-    pub fn __state20<
+    pub fn __state34<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -1506,51 +2507,137 @@ mod __parse__Expr {
         __lookbehind: Option<usize>,
         __lookahead: Option<(usize,Tok,usize)>,
         __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-        __sym1: &mut Option<&'ast Node<'ast>>,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::Plus(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state22(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
-            Some((_, __tok @ Tok::RParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state40(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
-            Some((_, __tok @ Tok::Minus(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state23(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
-        return Ok(__result);
     }
 
-    // State 21
-    //   Term = "(" Expr ")" (*) [EOF]
+    // State 35
+    //   Factor = Factor "*" Term (*) [")"]
+    //   Factor = Factor "*" Term (*) ["*"]
+    //   Factor = Factor "*" Term (*) ["+"]
+    //   Factor = Factor "*" Term (*) ["-"]
+    //   Factor = Factor "*" Term (*) ["/"]
+    //
+    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   ")" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //
+    pub fn __state35<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 36
+    //   Term = "(" Expr ")" (*) [")"]
     //   Term = "(" Expr ")" (*) ["*"]
     //   Term = "(" Expr ")" (*) ["+"]
     //   Term = "(" Expr ")" (*) ["-"]
     //   Term = "(" Expr ")" (*) ["/"]
     //
-    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   EOF -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   ")" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //
-    pub fn __state21<
+    pub fn __state36<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -1565,39 +2652,39 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
             Some((_, Tok::Div(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             _ => {
@@ -1606,222 +2693,20 @@ mod __parse__Expr {
         }
     }
 
-    // State 22
-    //   Expr = Expr "+" (*) Factor [")"]
-    //   Expr = Expr "+" (*) Factor ["+"]
-    //   Expr = Expr "+" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [")"]
-    //   Factor = (*) Factor "*" Term ["*"]
-    //   Factor = (*) Factor "*" Term ["+"]
-    //   Factor = (*) Factor "*" Term ["-"]
-    //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [")"]
-    //   Factor = (*) Factor "/" Term ["*"]
-    //   Factor = (*) Factor "/" Term ["+"]
-    //   Factor = (*) Factor "/" Term ["-"]
-    //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [")"]
-    //   Factor = (*) Term ["*"]
-    //   Factor = (*) Term ["+"]
-    //   Factor = (*) Term ["-"]
-    //   Factor = (*) Term ["/"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" [")"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
+    // State 37
+    //   Factor = "*" "(" Comma<Expr> ")" (*) [EOF]
+    //   Factor = "*" "(" Comma<Expr> ")" (*) ["*"]
+    //   Factor = "*" "(" Comma<Expr> ")" (*) ["+"]
+    //   Factor = "*" "(" Comma<Expr> ")" (*) ["-"]
+    //   Factor = "*" "(" Comma<Expr> ")" (*) ["/"]
     //
-    //   "*" -> Shift(S11)
-    //   "Num" -> Shift(S8)
-    //   "(" -> Shift(S9)
+    //   "+" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   "-" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   "*" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   "/" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   EOF -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //
-    //   Term -> S12
-    //   Factor -> S41
-    pub fn __state22<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state11(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state41(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 23
-    //   Expr = Expr "-" (*) Factor [")"]
-    //   Expr = Expr "-" (*) Factor ["+"]
-    //   Expr = Expr "-" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [")"]
-    //   Factor = (*) Factor "*" Term ["*"]
-    //   Factor = (*) Factor "*" Term ["+"]
-    //   Factor = (*) Factor "*" Term ["-"]
-    //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [")"]
-    //   Factor = (*) Factor "/" Term ["*"]
-    //   Factor = (*) Factor "/" Term ["+"]
-    //   Factor = (*) Factor "/" Term ["-"]
-    //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [")"]
-    //   Factor = (*) Term ["*"]
-    //   Factor = (*) Term ["+"]
-    //   Factor = (*) Term ["-"]
-    //   Factor = (*) Term ["/"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" [")"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "Num" -> Shift(S8)
-    //   "*" -> Shift(S11)
-    //   "(" -> Shift(S9)
-    //
-    //   Term -> S12
-    //   Factor -> S42
-    pub fn __state23<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state11(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state42(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 24
-    //   (<Expr> ",")* = (*) ["("]
-    //   (<Expr> ",")* = (*) [")"]
-    //   (<Expr> ",")* = (*) ["*"]
-    //   (<Expr> ",")* = (*) ["Num"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["("]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") [")"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["*"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["Num"]
-    //   Comma<Expr> = (*) (<Expr> ",")* Expr? [")"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" [")"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["*"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["+"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["-"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["/"]
-    //
-    //   "*" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   "Num" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   "(" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   ")" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //
-    //   Comma<Expr> -> S43
-    //   (<Expr> ",")* -> S18
-    pub fn __state24<
+    pub fn __state37<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -1831,311 +2716,50 @@ mod __parse__Expr {
         __tokens: &mut __TOKENS,
         __sym0: &mut Option<Tok>,
         __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<Vec<&'ast Node<'ast>>>,
+        __sym3: &mut Option<Tok>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Times(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            Some((_, Tok::Num(_), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            Some((_, Tok::LParen(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Comma_3cExpr_3e(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state43(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state18(arena, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 25
-    //   Factor = Factor "*" (*) Term [")"]
-    //   Factor = Factor "*" (*) Term ["*"]
-    //   Factor = Factor "*" (*) Term ["+"]
-    //   Factor = Factor "*" (*) Term ["-"]
-    //   Factor = Factor "*" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "Num" -> Shift(S8)
-    //   "(" -> Shift(S9)
-    //
-    //   Term -> S44
-    pub fn __state25<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state44(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 26
-    //   Factor = Factor "/" (*) Term [")"]
-    //   Factor = Factor "/" (*) Term ["*"]
-    //   Factor = Factor "/" (*) Term ["+"]
-    //   Factor = Factor "/" (*) Term ["-"]
-    //   Factor = Factor "/" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "Num" -> Shift(S8)
-    //   "(" -> Shift(S9)
-    //
-    //   Term -> S45
-    pub fn __state26<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state45(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 27
-    //   Factor = Factor "*" Term (*) [EOF]
-    //   Factor = Factor "*" Term (*) ["*"]
-    //   Factor = Factor "*" Term (*) ["+"]
-    //   Factor = Factor "*" Term (*) ["-"]
-    //   Factor = Factor "*" Term (*) ["/"]
-    //
-    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   EOF -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //
-    pub fn __state27<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Times(..), _)) => {
+            Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Div(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 28
-    //   Factor = Factor "/" Term (*) [EOF]
-    //   Factor = Factor "/" Term (*) ["*"]
-    //   Factor = Factor "/" Term (*) ["+"]
-    //   Factor = Factor "/" Term (*) ["-"]
-    //   Factor = Factor "/" Term (*) ["/"]
-    //
-    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   EOF -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //
-    pub fn __state28<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
@@ -2144,341 +2768,7 @@ mod __parse__Expr {
         }
     }
 
-    // State 29
-    //   Expr = Expr "+" Factor (*) [EOF]
-    //   Expr = Expr "+" Factor (*) ["+"]
-    //   Expr = Expr "+" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [EOF]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [EOF]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "*" -> Shift(S14)
-    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   EOF -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "/" -> Shift(S15)
-    //
-    pub fn __state29<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state15(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 30
-    //   Expr = Expr "-" Factor (*) [EOF]
-    //   Expr = Expr "-" Factor (*) ["+"]
-    //   Expr = Expr "-" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [EOF]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [EOF]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   EOF -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "/" -> Shift(S15)
-    //   "*" -> Shift(S14)
-    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //
-    pub fn __state30<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state15(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 31
-    //   Term = "Num" (*) [")"]
-    //   Term = "Num" (*) ["*"]
-    //   Term = "Num" (*) ["+"]
-    //   Term = "Num" (*) [","]
-    //   Term = "Num" (*) ["-"]
-    //   Term = "Num" (*) ["/"]
-    //
-    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "," -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //   ")" -> Reduce(Term = "Num" => Call(ActionFn(8));)
-    //
-    pub fn __state31<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Comma(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action8(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 32
-    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) ["("]
-    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) [")"]
-    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) ["*"]
-    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) ["Num"]
-    //
-    //   "Num" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
-    //   "(" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
-    //   ")" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
-    //   "*" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
-    //
-    pub fn __state32<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<::std::vec::Vec<&'ast Node<'ast>>>,
-        __sym1: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(_), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action14(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
-            }
-            Some((_, Tok::LParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action14(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action14(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action14(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 33
-    //   (<Expr> ",") = Expr (*) "," ["("]
-    //   (<Expr> ",") = Expr (*) "," [")"]
-    //   (<Expr> ",") = Expr (*) "," ["*"]
-    //   (<Expr> ",") = Expr (*) "," ["Num"]
-    //   Expr = Expr (*) "+" Factor [")"]
-    //   Expr = Expr (*) "+" Factor ["+"]
-    //   Expr = Expr (*) "+" Factor [","]
-    //   Expr = Expr (*) "+" Factor ["-"]
-    //   Expr = Expr (*) "-" Factor [")"]
-    //   Expr = Expr (*) "-" Factor ["+"]
-    //   Expr = Expr (*) "-" Factor [","]
-    //   Expr = Expr (*) "-" Factor ["-"]
-    //   Expr? = Expr (*) [")"]
-    //
-    //   ")" -> Reduce(Expr? = Expr => Call(ActionFn(11));)
-    //   "," -> Shift(S46)
-    //   "+" -> Shift(S48)
-    //   "-" -> Shift(S47)
-    //
-    pub fn __state33<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Comma(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state46(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, __tok @ Tok::Plus(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state48(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, __tok @ Tok::Minus(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state47(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action11(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr_3f(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 34
+    // State 38
     //   Expr = Factor (*) [")"]
     //   Expr = Factor (*) ["+"]
     //   Expr = Factor (*) [","]
@@ -2498,12 +2788,12 @@ mod __parse__Expr {
     //
     //   "," -> Reduce(Expr = Factor => Call(ActionFn(3));)
     //   "-" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
-    //   "*" -> Shift(S49)
-    //   "/" -> Shift(S50)
+    //   "*" -> Shift(S47)
+    //   "/" -> Shift(S48)
     //   ")" -> Reduce(Expr = Factor => Call(ActionFn(3));)
+    //   "+" -> Reduce(Expr = Factor => Call(ActionFn(3));)
     //
-    pub fn __state34<
+    pub fn __state38<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -2520,32 +2810,32 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state49(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                __result = try!(__state47(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             Some((_, __tok @ Tok::Div(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state50(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                __result = try!(__state48(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             Some((_, Tok::Comma(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
+                let __nt = super::__action3(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
+                let __nt = super::__action3(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             Some((_, Tok::RParen(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(arena, __sym0);
+                let __nt = super::__action3(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(arena, __sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
             }
             _ => {
@@ -2555,7 +2845,38 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 35
+    // State 39
+    //   Comma<Expr> = (<Expr> ",")* Expr? (*) [")"]
+    //
+    //   ")" -> Reduce(Comma<Expr> = (<Expr> ",")*, Expr? => Call(ActionFn(10));)
+    //
+    pub fn __state39<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<::std::vec::Vec<&'ast Node<'ast>>>,
+        __sym1: &mut Option<::std::option::Option<&'ast Node<'ast>>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action10(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Comma_3cExpr_3e(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 40
     //   Factor = "*" (*) "(" Comma<Expr> ")" [")"]
     //   Factor = "*" (*) "(" Comma<Expr> ")" ["*"]
     //   Factor = "*" (*) "(" Comma<Expr> ")" ["+"]
@@ -2563,9 +2884,9 @@ mod __parse__Expr {
     //   Factor = "*" (*) "(" Comma<Expr> ")" ["-"]
     //   Factor = "*" (*) "(" Comma<Expr> ")" ["/"]
     //
-    //   "(" -> Shift(S51)
+    //   "(" -> Shift(S49)
     //
-    pub fn __state35<
+    pub fn __state40<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -2582,7 +2903,7 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state51(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                __result = try!(__state49(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
             _ => {
                 return Err(__lookahead);
@@ -2591,7 +2912,253 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 36
+    // State 41
+    //   (<Expr> ",") = Expr (*) "," ["("]
+    //   (<Expr> ",") = Expr (*) "," [")"]
+    //   (<Expr> ",") = Expr (*) "," ["*"]
+    //   (<Expr> ",") = Expr (*) "," ["Num"]
+    //   Expr = Expr (*) "+" Factor [")"]
+    //   Expr = Expr (*) "+" Factor ["+"]
+    //   Expr = Expr (*) "+" Factor [","]
+    //   Expr = Expr (*) "+" Factor ["-"]
+    //   Expr = Expr (*) "-" Factor [")"]
+    //   Expr = Expr (*) "-" Factor ["+"]
+    //   Expr = Expr (*) "-" Factor [","]
+    //   Expr = Expr (*) "-" Factor ["-"]
+    //   Expr? = Expr (*) [")"]
+    //
+    //   "+" -> Shift(S50)
+    //   ")" -> Reduce(Expr? = Expr => Call(ActionFn(11));)
+    //   "," -> Shift(S51)
+    //   "-" -> Shift(S52)
+    //
+    pub fn __state41<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Plus(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state50(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some((_, __tok @ Tok::Comma(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state51(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some((_, __tok @ Tok::Minus(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state52(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action11(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr_3f(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 42
+    //   Term = "Num" (*) [")"]
+    //   Term = "Num" (*) ["*"]
+    //   Term = "Num" (*) ["+"]
+    //   Term = "Num" (*) [","]
+    //   Term = "Num" (*) ["-"]
+    //   Term = "Num" (*) ["/"]
+    //
+    //   "/" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "," -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "+" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   ")" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "*" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //   "-" -> Reduce(Term = "Num" => Call(ActionFn(8));)
+    //
+    pub fn __state42<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Comma(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action8(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 43
+    //   Factor = Term (*) [")"]
+    //   Factor = Term (*) ["*"]
+    //   Factor = Term (*) ["+"]
+    //   Factor = Term (*) [","]
+    //   Factor = Term (*) ["-"]
+    //   Factor = Term (*) ["/"]
+    //
+    //   ")" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "+" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "/" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "," -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "-" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //   "*" -> Reduce(Factor = Term => Call(ActionFn(7));)
+    //
+    pub fn __state43<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Comma(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action7(arena, __sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 44
+    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) ["("]
+    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) [")"]
+    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) ["*"]
+    //   (<Expr> ",")* = (<Expr> ",")* (<Expr> ",") (*) ["Num"]
+    //
+    //   "*" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
+    //   ")" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
+    //   "(" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
+    //   "Num" -> Reduce((<Expr> ",")* = (<Expr> ",")*, (<Expr> ",") => Call(ActionFn(14));)
+    //
+    pub fn __state44<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<::std::vec::Vec<&'ast Node<'ast>>>,
+        __sym1: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action14(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action14(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
+            }
+            Some((_, Tok::LParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action14(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
+            }
+            Some((_, Tok::Num(_), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action14(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 45
     //   Expr = (*) Expr "+" Factor [")"]
     //   Expr = (*) Expr "+" Factor ["+"]
     //   Expr = (*) Expr "+" Factor ["-"]
@@ -2638,14 +3205,14 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "(" -> Shift(S9)
-    //   "Num" -> Shift(S8)
+    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S14)
     //   "*" -> Shift(S11)
     //
-    //   Term -> S12
-    //   Expr -> S52
     //   Factor -> S13
-    pub fn __state36<
+    //   Expr -> S53
+    //   Term -> S12
+    pub fn __state45<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -2658,17 +3225,17 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym1 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym1));
-            }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state8(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state9(arena, __lookbehind, __lookahead, __tokens, __sym1));
+            }
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym1 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state14(arena, __lookbehind, __lookahead, __tokens, __sym1));
             }
             Some((_, __tok @ Tok::Times(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
@@ -2683,18 +3250,18 @@ mod __parse__Expr {
         while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym1));
-                }
-                __Nonterminal::Expr(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state52(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
-                }
                 __Nonterminal::Factor(__nt) => {
                     let __sym1 = &mut Some(__nt);
                     __result = try!(__state13(arena, __lookbehind, __lookahead, __tokens, __sym1));
                 }
+                __Nonterminal::Expr(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state53(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                }
+                __Nonterminal::Term(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state12(arena, __lookbehind, __lookahead, __tokens, __sym1));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -2703,115 +3270,20 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 37
-    //   Comma<Expr> = (<Expr> ",")* Expr? (*) [")"]
-    //
-    //   ")" -> Reduce(Comma<Expr> = (<Expr> ",")*, Expr? => Call(ActionFn(10));)
-    //
-    pub fn __state37<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<::std::vec::Vec<&'ast Node<'ast>>>,
-        __sym1: &mut Option<::std::option::Option<&'ast Node<'ast>>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action10(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Comma_3cExpr_3e(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 38
-    //   Factor = Term (*) [")"]
-    //   Factor = Term (*) ["*"]
-    //   Factor = Term (*) ["+"]
-    //   Factor = Term (*) [","]
-    //   Factor = Term (*) ["-"]
-    //   Factor = Term (*) ["/"]
-    //
-    //   "," -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "/" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "-" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "+" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   ")" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //   "*" -> Reduce(Factor = Term => Call(ActionFn(7));)
-    //
-    pub fn __state38<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Comma(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action7(arena, __sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 39
-    //   Factor = "*" "(" Comma<Expr> ")" (*) [EOF]
+    // State 46
+    //   Factor = "*" "(" Comma<Expr> ")" (*) [")"]
     //   Factor = "*" "(" Comma<Expr> ")" (*) ["*"]
     //   Factor = "*" "(" Comma<Expr> ")" (*) ["+"]
     //   Factor = "*" "(" Comma<Expr> ")" (*) ["-"]
     //   Factor = "*" "(" Comma<Expr> ")" (*) ["/"]
     //
+    //   "-" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   ")" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   "+" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //   "/" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //   "*" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "-" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   EOF -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "+" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //
-    pub fn __state39<
+    pub fn __state46<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -2827,371 +3299,44 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
                 let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 40
-    //   Term = "(" Expr ")" (*) [")"]
-    //   Term = "(" Expr ")" (*) ["*"]
-    //   Term = "(" Expr ")" (*) ["+"]
-    //   Term = "(" Expr ")" (*) ["-"]
-    //   Term = "(" Expr ")" (*) ["/"]
-    //
-    //   ")" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //
-    pub fn __state40<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-        __sym1: &mut Option<&'ast Node<'ast>>,
-        __sym2: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 41
-    //   Expr = Expr "+" Factor (*) [")"]
-    //   Expr = Expr "+" Factor (*) ["+"]
-    //   Expr = Expr "+" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "/" -> Shift(S26)
-    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "*" -> Shift(S25)
-    //   ")" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //
-    pub fn __state41<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state26(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state25(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 42
-    //   Expr = Expr "-" Factor (*) [")"]
-    //   Expr = Expr "-" Factor (*) ["+"]
-    //   Expr = Expr "-" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
-    //
-    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "*" -> Shift(S25)
-    //   ")" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "/" -> Shift(S26)
-    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //
-    pub fn __state42<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state25(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state26(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 43
-    //   Factor = "*" "(" Comma<Expr> (*) ")" [")"]
-    //   Factor = "*" "(" Comma<Expr> (*) ")" ["*"]
-    //   Factor = "*" "(" Comma<Expr> (*) ")" ["+"]
-    //   Factor = "*" "(" Comma<Expr> (*) ")" ["-"]
-    //   Factor = "*" "(" Comma<Expr> (*) ")" ["/"]
-    //
-    //   ")" -> Shift(S53)
-    //
-    pub fn __state43<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<Vec<&'ast Node<'ast>>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::RParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state53(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2, __sym3));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 44
-    //   Factor = Factor "*" Term (*) [")"]
-    //   Factor = Factor "*" Term (*) ["*"]
-    //   Factor = Factor "*" Term (*) ["+"]
-    //   Factor = Factor "*" Term (*) ["-"]
-    //   Factor = Factor "*" Term (*) ["/"]
-    //
-    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   ")" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //
-    pub fn __state44<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::RParen(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Div(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Times(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
@@ -3200,159 +3345,13 @@ mod __parse__Expr {
         }
     }
 
-    // State 45
-    //   Factor = Factor "/" Term (*) [")"]
-    //   Factor = Factor "/" Term (*) ["*"]
-    //   Factor = Factor "/" Term (*) ["+"]
-    //   Factor = Factor "/" Term (*) ["-"]
-    //   Factor = Factor "/" Term (*) ["/"]
-    //
-    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   ")" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //
-    pub fn __state45<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 46
-    //   (<Expr> ",") = Expr "," (*) ["("]
-    //   (<Expr> ",") = Expr "," (*) [")"]
-    //   (<Expr> ",") = Expr "," (*) ["*"]
-    //   (<Expr> ",") = Expr "," (*) ["Num"]
-    //
-    //   "Num" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
-    //   ")" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
-    //   "*" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
-    //   "(" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
-    //
-    pub fn __state46<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(_), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action15(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action15(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action15(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
-            }
-            Some((_, Tok::LParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action15(arena, __sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
     // State 47
-    //   Expr = Expr "-" (*) Factor [")"]
-    //   Expr = Expr "-" (*) Factor ["+"]
-    //   Expr = Expr "-" (*) Factor [","]
-    //   Expr = Expr "-" (*) Factor ["-"]
-    //   Factor = (*) Factor "*" Term [")"]
-    //   Factor = (*) Factor "*" Term ["*"]
-    //   Factor = (*) Factor "*" Term ["+"]
-    //   Factor = (*) Factor "*" Term [","]
-    //   Factor = (*) Factor "*" Term ["-"]
-    //   Factor = (*) Factor "*" Term ["/"]
-    //   Factor = (*) Factor "/" Term [")"]
-    //   Factor = (*) Factor "/" Term ["*"]
-    //   Factor = (*) Factor "/" Term ["+"]
-    //   Factor = (*) Factor "/" Term [","]
-    //   Factor = (*) Factor "/" Term ["-"]
-    //   Factor = (*) Factor "/" Term ["/"]
-    //   Factor = (*) Term [")"]
-    //   Factor = (*) Term ["*"]
-    //   Factor = (*) Term ["+"]
-    //   Factor = (*) Term [","]
-    //   Factor = (*) Term ["-"]
-    //   Factor = (*) Term ["/"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" [")"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" [","]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
-    //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
+    //   Factor = Factor "*" (*) Term [")"]
+    //   Factor = Factor "*" (*) Term ["*"]
+    //   Factor = Factor "*" (*) Term ["+"]
+    //   Factor = Factor "*" (*) Term [","]
+    //   Factor = Factor "*" (*) Term ["-"]
+    //   Factor = Factor "*" (*) Term ["/"]
     //   Term = (*) "(" Expr ")" [")"]
     //   Term = (*) "(" Expr ")" ["*"]
     //   Term = (*) "(" Expr ")" ["+"]
@@ -3366,12 +3365,10 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "(" -> Shift(S36)
-    //   "Num" -> Shift(S31)
-    //   "*" -> Shift(S35)
+    //   "Num" -> Shift(S42)
+    //   "(" -> Shift(S45)
     //
-    //   Term -> S38
-    //   Factor -> S54
+    //   Term -> S54
     pub fn __state47<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -3386,23 +3383,17 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state36(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state31(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state42(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state35(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state45(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -3412,10 +3403,6 @@ mod __parse__Expr {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
                 __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state38(arena, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                __Nonterminal::Factor(__nt) => {
                     let __sym2 = &mut Some(__nt);
                     __result = try!(__state54(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
@@ -3428,6 +3415,152 @@ mod __parse__Expr {
     }
 
     // State 48
+    //   Factor = Factor "/" (*) Term [")"]
+    //   Factor = Factor "/" (*) Term ["*"]
+    //   Factor = Factor "/" (*) Term ["+"]
+    //   Factor = Factor "/" (*) Term [","]
+    //   Factor = Factor "/" (*) Term ["-"]
+    //   Factor = Factor "/" (*) Term ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" [","]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" [","]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "Num" -> Shift(S42)
+    //   "(" -> Shift(S45)
+    //
+    //   Term -> S55
+    pub fn __state48<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state42(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state45(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state55(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 49
+    //   (<Expr> ",")* = (*) ["("]
+    //   (<Expr> ",")* = (*) [")"]
+    //   (<Expr> ",")* = (*) ["*"]
+    //   (<Expr> ",")* = (*) ["Num"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["("]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") [")"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["*"]
+    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["Num"]
+    //   Comma<Expr> = (*) (<Expr> ",")* Expr? [")"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" [")"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["*"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["+"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" [","]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["-"]
+    //   Factor = "*" "(" (*) Comma<Expr> ")" ["/"]
+    //
+    //   ")" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "Num" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "*" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "(" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //
+    //   (<Expr> ",")* -> S30
+    //   Comma<Expr> -> S56
+    pub fn __state49<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<Tok>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, Tok::RParen(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::Num(_), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            Some((_, Tok::LParen(..), _)) => {
+                let __nt = super::__action13(arena, );
+                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        while __sym1.is_some() {
+            let (__lookbehind, __lookahead, __nt) = __result;
+            match __nt {
+                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state30(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
+                __Nonterminal::Comma_3cExpr_3e(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state56(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
+                }
+                _ => {
+                    return Ok((__lookbehind, __lookahead, __nt));
+                }
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 50
     //   Expr = Expr "+" (*) Factor [")"]
     //   Expr = Expr "+" (*) Factor ["+"]
     //   Expr = Expr "+" (*) Factor [","]
@@ -3469,160 +3602,12 @@ mod __parse__Expr {
     //   Term = (*) "Num" ["-"]
     //   Term = (*) "Num" ["/"]
     //
-    //   "Num" -> Shift(S31)
-    //   "(" -> Shift(S36)
-    //   "*" -> Shift(S35)
+    //   "(" -> Shift(S45)
+    //   "*" -> Shift(S40)
+    //   "Num" -> Shift(S42)
     //
-    //   Term -> S38
-    //   Factor -> S55
-    pub fn __state48<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state31(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state36(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state35(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state38(arena, __lookbehind, __lookahead, __tokens, __sym2));
-                }
-                __Nonterminal::Factor(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state55(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 49
-    //   Factor = Factor "*" (*) Term [")"]
-    //   Factor = Factor "*" (*) Term ["*"]
-    //   Factor = Factor "*" (*) Term ["+"]
-    //   Factor = Factor "*" (*) Term [","]
-    //   Factor = Factor "*" (*) Term ["-"]
-    //   Factor = Factor "*" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" [","]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" [","]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S36)
-    //   "Num" -> Shift(S31)
-    //
-    //   Term -> S56
-    pub fn __state49<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, __tok @ Tok::LParen(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state36(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            Some((_, Tok::Num(__tok0), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym2 = &mut Some((__tok0));
-                let __lookahead = __tokens.next();
-                __result = try!(__state31(arena, __lookbehind, __lookahead, __tokens, __sym2));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-        while __sym1.is_some() {
-            let (__lookbehind, __lookahead, __nt) = __result;
-            match __nt {
-                __Nonterminal::Term(__nt) => {
-                    let __sym2 = &mut Some(__nt);
-                    __result = try!(__state56(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
-                }
-                _ => {
-                    return Ok((__lookbehind, __lookahead, __nt));
-                }
-            }
-        }
-        return Ok(__result);
-    }
-
-    // State 50
-    //   Factor = Factor "/" (*) Term [")"]
-    //   Factor = Factor "/" (*) Term ["*"]
-    //   Factor = Factor "/" (*) Term ["+"]
-    //   Factor = Factor "/" (*) Term [","]
-    //   Factor = Factor "/" (*) Term ["-"]
-    //   Factor = Factor "/" (*) Term ["/"]
-    //   Term = (*) "(" Expr ")" [")"]
-    //   Term = (*) "(" Expr ")" ["*"]
-    //   Term = (*) "(" Expr ")" ["+"]
-    //   Term = (*) "(" Expr ")" [","]
-    //   Term = (*) "(" Expr ")" ["-"]
-    //   Term = (*) "(" Expr ")" ["/"]
-    //   Term = (*) "Num" [")"]
-    //   Term = (*) "Num" ["*"]
-    //   Term = (*) "Num" ["+"]
-    //   Term = (*) "Num" [","]
-    //   Term = (*) "Num" ["-"]
-    //   Term = (*) "Num" ["/"]
-    //
-    //   "(" -> Shift(S36)
-    //   "Num" -> Shift(S31)
-    //
-    //   Term -> S57
+    //   Factor -> S57
+    //   Term -> S43
     pub fn __state50<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -3641,13 +3626,19 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state36(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state45(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state40(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             Some((_, Tok::Num(__tok0), __loc)) => {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state31(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state42(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -3656,10 +3647,14 @@ mod __parse__Expr {
         while __sym1.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::Term(__nt) => {
+                __Nonterminal::Factor(__nt) => {
                     let __sym2 = &mut Some(__nt);
                     __result = try!(__state57(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
+                __Nonterminal::Term(__nt) => {
+                    let __sym2 = &mut Some(__nt);
+                    __result = try!(__state43(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -3669,29 +3664,16 @@ mod __parse__Expr {
     }
 
     // State 51
-    //   (<Expr> ",")* = (*) ["("]
-    //   (<Expr> ",")* = (*) [")"]
-    //   (<Expr> ",")* = (*) ["*"]
-    //   (<Expr> ",")* = (*) ["Num"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["("]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") [")"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["*"]
-    //   (<Expr> ",")* = (*) (<Expr> ",")* (<Expr> ",") ["Num"]
-    //   Comma<Expr> = (*) (<Expr> ",")* Expr? [")"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" [")"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["*"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["+"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" [","]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["-"]
-    //   Factor = "*" "(" (*) Comma<Expr> ")" ["/"]
+    //   (<Expr> ",") = Expr "," (*) ["("]
+    //   (<Expr> ",") = Expr "," (*) [")"]
+    //   (<Expr> ",") = Expr "," (*) ["*"]
+    //   (<Expr> ",") = Expr "," (*) ["Num"]
     //
-    //   "(" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   "Num" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   "*" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
-    //   ")" -> Reduce((<Expr> ",")* =  => Call(ActionFn(13));)
+    //   "(" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
+    //   "Num" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
+    //   ")" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
+    //   "*" -> Reduce((<Expr> ",") = Expr, "," => Call(ActionFn(15));)
     //
-    //   (<Expr> ",")* -> S18
-    //   Comma<Expr> -> S58
     pub fn __state51<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -3700,27 +3682,121 @@ mod __parse__Expr {
         __lookbehind: Option<usize>,
         __lookahead: Option<(usize,Tok,usize)>,
         __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
+        __sym0: &mut Option<&'ast Node<'ast>>,
         __sym1: &mut Option<Tok>,
     ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
             Some((_, Tok::LParen(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action15(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
             }
             Some((_, Tok::Num(_), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action15(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
             }
             Some((_, Tok::RParen(..), _)) => {
-                let __nt = super::__actions::__action13(arena, );
-                __result = (__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt));
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action15(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action15(arena, __sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 52
+    //   Expr = Expr "-" (*) Factor [")"]
+    //   Expr = Expr "-" (*) Factor ["+"]
+    //   Expr = Expr "-" (*) Factor [","]
+    //   Expr = Expr "-" (*) Factor ["-"]
+    //   Factor = (*) Factor "*" Term [")"]
+    //   Factor = (*) Factor "*" Term ["*"]
+    //   Factor = (*) Factor "*" Term ["+"]
+    //   Factor = (*) Factor "*" Term [","]
+    //   Factor = (*) Factor "*" Term ["-"]
+    //   Factor = (*) Factor "*" Term ["/"]
+    //   Factor = (*) Factor "/" Term [")"]
+    //   Factor = (*) Factor "/" Term ["*"]
+    //   Factor = (*) Factor "/" Term ["+"]
+    //   Factor = (*) Factor "/" Term [","]
+    //   Factor = (*) Factor "/" Term ["-"]
+    //   Factor = (*) Factor "/" Term ["/"]
+    //   Factor = (*) Term [")"]
+    //   Factor = (*) Term ["*"]
+    //   Factor = (*) Term ["+"]
+    //   Factor = (*) Term [","]
+    //   Factor = (*) Term ["-"]
+    //   Factor = (*) Term ["/"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" [")"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["*"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["+"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" [","]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["-"]
+    //   Factor = (*) "*" "(" Comma<Expr> ")" ["/"]
+    //   Term = (*) "(" Expr ")" [")"]
+    //   Term = (*) "(" Expr ")" ["*"]
+    //   Term = (*) "(" Expr ")" ["+"]
+    //   Term = (*) "(" Expr ")" [","]
+    //   Term = (*) "(" Expr ")" ["-"]
+    //   Term = (*) "(" Expr ")" ["/"]
+    //   Term = (*) "Num" [")"]
+    //   Term = (*) "Num" ["*"]
+    //   Term = (*) "Num" ["+"]
+    //   Term = (*) "Num" [","]
+    //   Term = (*) "Num" ["-"]
+    //   Term = (*) "Num" ["/"]
+    //
+    //   "(" -> Shift(S45)
+    //   "*" -> Shift(S40)
+    //   "Num" -> Shift(S42)
+    //
+    //   Term -> S43
+    //   Factor -> S58
+    pub fn __state52<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::LParen(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state45(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state40(arena, __lookbehind, __lookahead, __tokens, __sym2));
+            }
+            Some((_, Tok::Num(__tok0), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym2 = &mut Some((__tok0));
+                let __lookahead = __tokens.next();
+                __result = try!(__state42(arena, __lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -3729,11 +3805,11 @@ mod __parse__Expr {
         while __sym1.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::_28_3cExpr_3e_20_22_2c_22_29_2a(__nt) => {
+                __Nonterminal::Term(__nt) => {
                     let __sym2 = &mut Some(__nt);
-                    __result = try!(__state18(arena, __lookbehind, __lookahead, __tokens, __sym2));
+                    __result = try!(__state43(arena, __lookbehind, __lookahead, __tokens, __sym2));
                 }
-                __Nonterminal::Comma_3cExpr_3e(__nt) => {
+                __Nonterminal::Factor(__nt) => {
                     let __sym2 = &mut Some(__nt);
                     __result = try!(__state58(arena, __lookbehind, __lookahead, __tokens, __sym0, __sym1, __sym2));
                 }
@@ -3745,7 +3821,7 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 52
+    // State 53
     //   Expr = Expr (*) "+" Factor [")"]
     //   Expr = Expr (*) "+" Factor ["+"]
     //   Expr = Expr (*) "+" Factor ["-"]
@@ -3759,11 +3835,11 @@ mod __parse__Expr {
     //   Term = "(" Expr (*) ")" ["-"]
     //   Term = "(" Expr (*) ")" ["/"]
     //
-    //   "-" -> Shift(S23)
+    //   "-" -> Shift(S20)
     //   "+" -> Shift(S22)
     //   ")" -> Shift(S59)
     //
-    pub fn __state52<
+    pub fn __state53<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -3781,7 +3857,7 @@ mod __parse__Expr {
                 let mut __lookbehind = Some(__loc);
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state23(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
+                __result = try!(__state20(arena, __lookbehind, __lookahead, __tokens, __sym1, __sym2));
             }
             Some((_, __tok @ Tok::Plus(..), __loc)) => {
                 let mut __lookbehind = Some(__loc);
@@ -3802,105 +3878,20 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
-    // State 53
-    //   Factor = "*" "(" Comma<Expr> ")" (*) [")"]
-    //   Factor = "*" "(" Comma<Expr> ")" (*) ["*"]
-    //   Factor = "*" "(" Comma<Expr> ")" (*) ["+"]
-    //   Factor = "*" "(" Comma<Expr> ")" (*) ["-"]
-    //   Factor = "*" "(" Comma<Expr> ")" (*) ["/"]
-    //
-    //   ")" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "*" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "-" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "/" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "+" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //
-    pub fn __state53<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<Tok>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<Vec<&'ast Node<'ast>>>,
-        __sym3: &mut Option<Tok>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
     // State 54
-    //   Expr = Expr "-" Factor (*) [")"]
-    //   Expr = Expr "-" Factor (*) ["+"]
-    //   Expr = Expr "-" Factor (*) [","]
-    //   Expr = Expr "-" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term [","]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term [","]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
+    //   Factor = Factor "*" Term (*) [")"]
+    //   Factor = Factor "*" Term (*) ["*"]
+    //   Factor = Factor "*" Term (*) ["+"]
+    //   Factor = Factor "*" Term (*) [","]
+    //   Factor = Factor "*" Term (*) ["-"]
+    //   Factor = Factor "*" Term (*) ["/"]
     //
-    //   ")" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "," -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "*" -> Shift(S49)
-    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
-    //   "/" -> Shift(S50)
+    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   ")" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
+    //   "," -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
     //
     pub fn __state54<
         'ast,
@@ -3917,77 +3908,68 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state49(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state50(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, Tok::RParen(..), _)) => {
+            Some((_, Tok::Div(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
-            Some((_, Tok::Plus(..), _)) => {
+            Some((_, Tok::Times(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Comma(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action1(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Comma(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
-        return Ok(__result);
     }
 
     // State 55
-    //   Expr = Expr "+" Factor (*) [")"]
-    //   Expr = Expr "+" Factor (*) ["+"]
-    //   Expr = Expr "+" Factor (*) [","]
-    //   Expr = Expr "+" Factor (*) ["-"]
-    //   Factor = Factor (*) "*" Term [")"]
-    //   Factor = Factor (*) "*" Term ["*"]
-    //   Factor = Factor (*) "*" Term ["+"]
-    //   Factor = Factor (*) "*" Term [","]
-    //   Factor = Factor (*) "*" Term ["-"]
-    //   Factor = Factor (*) "*" Term ["/"]
-    //   Factor = Factor (*) "/" Term [")"]
-    //   Factor = Factor (*) "/" Term ["*"]
-    //   Factor = Factor (*) "/" Term ["+"]
-    //   Factor = Factor (*) "/" Term [","]
-    //   Factor = Factor (*) "/" Term ["-"]
-    //   Factor = Factor (*) "/" Term ["/"]
+    //   Factor = Factor "/" Term (*) [")"]
+    //   Factor = Factor "/" Term (*) ["*"]
+    //   Factor = Factor "/" Term (*) ["+"]
+    //   Factor = Factor "/" Term (*) [","]
+    //   Factor = Factor "/" Term (*) ["-"]
+    //   Factor = Factor "/" Term (*) ["/"]
     //
-    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "*" -> Shift(S49)
-    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "/" -> Shift(S50)
-    //   ")" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
-    //   "," -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   ")" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "," -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
+    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
     //
     pub fn __state55<
         'ast,
@@ -4004,210 +3986,55 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, __tok @ Tok::Times(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state49(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
-            Some((_, __tok @ Tok::Div(..), __loc)) => {
-                let mut __lookbehind = Some(__loc);
-                let mut __sym3 = &mut Some((__tok));
-                let __lookahead = __tokens.next();
-                __result = try!(__state50(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
-            }
             Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::RParen(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Comma(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Div(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action5(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
                 return Err(__lookahead);
             }
         }
-        return Ok(__result);
     }
 
     // State 56
-    //   Factor = Factor "*" Term (*) [")"]
-    //   Factor = Factor "*" Term (*) ["*"]
-    //   Factor = Factor "*" Term (*) ["+"]
-    //   Factor = Factor "*" Term (*) [","]
-    //   Factor = Factor "*" Term (*) ["-"]
-    //   Factor = Factor "*" Term (*) ["/"]
-    //
-    //   "-" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "/" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "," -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "*" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   ")" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //   "+" -> Reduce(Factor = Factor, "*", Term => Call(ActionFn(4));)
-    //
-    pub fn __state56<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Comma(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 57
-    //   Factor = Factor "/" Term (*) [")"]
-    //   Factor = Factor "/" Term (*) ["*"]
-    //   Factor = Factor "/" Term (*) ["+"]
-    //   Factor = Factor "/" Term (*) [","]
-    //   Factor = Factor "/" Term (*) ["-"]
-    //   Factor = Factor "/" Term (*) ["/"]
-    //
-    //   "*" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   ")" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "," -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "-" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "+" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //   "/" -> Reduce(Factor = Factor, "/", Term => Call(ActionFn(5));)
-    //
-    pub fn __state57<
-        'ast,
-        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
-    >(
-        arena: &'ast Arena<'ast>,
-        __lookbehind: Option<usize>,
-        __lookahead: Option<(usize,Tok,usize)>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<&'ast Node<'ast>>,
-        __sym1: &mut Option<Tok>,
-        __sym2: &mut Option<&'ast Node<'ast>>,
-    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
-    {
-        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
-        match __lookahead {
-            Some((_, Tok::Times(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::RParen(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Comma(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Div(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 58
     //   Factor = "*" "(" Comma<Expr> (*) ")" [")"]
     //   Factor = "*" "(" Comma<Expr> (*) ")" ["*"]
     //   Factor = "*" "(" Comma<Expr> (*) ")" ["+"]
@@ -4217,7 +4044,7 @@ mod __parse__Expr {
     //
     //   ")" -> Shift(S60)
     //
-    pub fn __state58<
+    pub fn __state56<
         'ast,
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -4245,6 +4072,180 @@ mod __parse__Expr {
         return Ok(__result);
     }
 
+    // State 57
+    //   Expr = Expr "+" Factor (*) [")"]
+    //   Expr = Expr "+" Factor (*) ["+"]
+    //   Expr = Expr "+" Factor (*) [","]
+    //   Expr = Expr "+" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term [","]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term [","]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   "," -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "+" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "*" -> Shift(S47)
+    //   "-" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //   "/" -> Shift(S48)
+    //   ")" -> Reduce(Expr = Expr, "+", Factor => Call(ActionFn(2));)
+    //
+    pub fn __state57<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state47(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state48(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, Tok::Comma(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
+    // State 58
+    //   Expr = Expr "-" Factor (*) [")"]
+    //   Expr = Expr "-" Factor (*) ["+"]
+    //   Expr = Expr "-" Factor (*) [","]
+    //   Expr = Expr "-" Factor (*) ["-"]
+    //   Factor = Factor (*) "*" Term [")"]
+    //   Factor = Factor (*) "*" Term ["*"]
+    //   Factor = Factor (*) "*" Term ["+"]
+    //   Factor = Factor (*) "*" Term [","]
+    //   Factor = Factor (*) "*" Term ["-"]
+    //   Factor = Factor (*) "*" Term ["/"]
+    //   Factor = Factor (*) "/" Term [")"]
+    //   Factor = Factor (*) "/" Term ["*"]
+    //   Factor = Factor (*) "/" Term ["+"]
+    //   Factor = Factor (*) "/" Term [","]
+    //   Factor = Factor (*) "/" Term ["-"]
+    //   Factor = Factor (*) "/" Term ["/"]
+    //
+    //   ")" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "*" -> Shift(S47)
+    //   "+" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "," -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "-" -> Reduce(Expr = Expr, "-", Factor => Call(ActionFn(1));)
+    //   "/" -> Shift(S48)
+    //
+    pub fn __state58<
+        'ast,
+        __TOKENS: Iterator<Item=(usize,Tok,usize)>,
+    >(
+        arena: &'ast Arena<'ast>,
+        __lookbehind: Option<usize>,
+        __lookahead: Option<(usize,Tok,usize)>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<&'ast Node<'ast>>,
+        __sym1: &mut Option<Tok>,
+        __sym2: &mut Option<&'ast Node<'ast>>,
+    ) -> Result<(Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >), Option<(usize,Tok,usize)>>
+    {
+        let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
+        match __lookahead {
+            Some((_, __tok @ Tok::Times(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state47(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, __tok @ Tok::Div(..), __loc)) => {
+                let mut __lookbehind = Some(__loc);
+                let mut __sym3 = &mut Some((__tok));
+                let __lookahead = __tokens.next();
+                __result = try!(__state48(arena, __lookbehind, __lookahead, __tokens, __sym2, __sym3));
+            }
+            Some((_, Tok::RParen(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Comma(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action1(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Expr(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+        return Ok(__result);
+    }
+
     // State 59
     //   Term = "(" Expr ")" (*) [")"]
     //   Term = "(" Expr ")" (*) ["*"]
@@ -4253,11 +4254,11 @@ mod __parse__Expr {
     //   Term = "(" Expr ")" (*) ["-"]
     //   Term = "(" Expr ")" (*) ["/"]
     //
-    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //   "+" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
-    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "-" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //   ")" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //   "/" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
+    //   "*" -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //   "," -> Reduce(Term = "(", Expr, ")" => Call(ActionFn(9));)
     //
     pub fn __state59<
@@ -4275,46 +4276,46 @@ mod __parse__Expr {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<'ast, >);
         match __lookahead {
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
-            }
             Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
-            Some((_, Tok::Times(..), _)) => {
+            Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some((_, Tok::RParen(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some((_, Tok::Div(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
+            }
+            Some((_, Tok::Times(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             Some((_, Tok::Comma(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action9(arena, __sym0, __sym1, __sym2);
+                let __nt = super::__action9(arena, __sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Term(__nt)));
             }
             _ => {
@@ -4332,11 +4333,11 @@ mod __parse__Expr {
     //   Factor = "*" "(" Comma<Expr> ")" (*) ["/"]
     //
     //   "/" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "-" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
-    //   "," -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //   "+" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   "," -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //   "*" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //   ")" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
+    //   "-" -> Reduce(Factor = "*", "(", Comma<Expr>, ")" => Call(ActionFn(6));)
     //
     pub fn __state60<
         'ast,
@@ -4359,23 +4360,7 @@ mod __parse__Expr {
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
                 let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
-            }
-            Some((_, Tok::Comma(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Plus(..), _)) => {
@@ -4383,7 +4368,15 @@ mod __parse__Expr {
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
                 let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Comma(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::Times(..), _)) => {
@@ -4391,7 +4384,7 @@ mod __parse__Expr {
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
                 let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             Some((_, Tok::RParen(..), _)) => {
@@ -4399,7 +4392,15 @@ mod __parse__Expr {
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
                 let __sym3 = __sym3.take().unwrap();
-                let __nt = super::__actions::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
+            }
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __sym3 = __sym3.take().unwrap();
+                let __nt = super::__action6(arena, __sym0, __sym1, __sym2, __sym3);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Factor(__nt)));
             }
             _ => {
@@ -4409,183 +4410,176 @@ mod __parse__Expr {
     }
 }
 
-mod __actions {
-    #![allow(unused_variables)]
-    use expr_arena_ast::{Arena, Node, Op};
-    use util::tok::Tok;
-
-
-    pub fn __action0<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        __0: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        (__0)
-    }
-
-    pub fn __action1<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        l: &'ast Node<'ast>,
-        _: Tok,
-        r: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        arena.alloc(Node::Binary(Op::Sub, l, r))
-    }
-
-    pub fn __action2<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        l: &'ast Node<'ast>,
-        _: Tok,
-        r: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        arena.alloc(Node::Binary(Op::Add, l, r))
-    }
-
-    pub fn __action3<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        __0: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        (__0)
-    }
-
-    pub fn __action4<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        l: &'ast Node<'ast>,
-        _: Tok,
-        r: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        arena.alloc(Node::Binary(Op::Mul, l, r))
-    }
-
-    pub fn __action5<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        l: &'ast Node<'ast>,
-        _: Tok,
-        r: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        arena.alloc(Node::Binary(Op::Div, l, r))
-    }
-
-    pub fn __action6<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        _: Tok,
-        _: Tok,
-        __0: Vec<&'ast Node<'ast>>,
-        _: Tok,
-    ) -> &'ast Node<'ast>
-    {
-        arena.alloc(Node::Reduce(Op::Mul, __0))
-    }
-
-    pub fn __action7<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        __0: &'ast Node<'ast>,
-    ) -> &'ast Node<'ast>
-    {
-        (__0)
-    }
-
-    pub fn __action8<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        n: i32,
-    ) -> &'ast Node<'ast>
-    {
-        arena.alloc(Node::Value(n))
-    }
-
-    pub fn __action9<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        _: Tok,
-        __0: &'ast Node<'ast>,
-        _: Tok,
-    ) -> &'ast Node<'ast>
-    {
-        (__0)
-    }
-
-    pub fn __action10<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        h: ::std::vec::Vec<&'ast Node<'ast>>,
-        t: ::std::option::Option<&'ast Node<'ast>>,
-    ) -> Vec<&'ast Node<'ast>>
-    {
-        h.into_iter().chain(t).collect()
-    }
-
-    pub fn __action11<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        __0: &'ast Node<'ast>,
-    ) -> ::std::option::Option<&'ast Node<'ast>>
-    {
-        Some(__0)
-    }
-
-    pub fn __action12<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-    ) -> ::std::option::Option<&'ast Node<'ast>>
-    {
-        None
-    }
-
-    pub fn __action13<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-    ) -> ::std::vec::Vec<&'ast Node<'ast>>
-    {
-        vec![]
-    }
-
-    pub fn __action14<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        v: ::std::vec::Vec<&'ast Node<'ast>>,
-        e: &'ast Node<'ast>,
-    ) -> ::std::vec::Vec<&'ast Node<'ast>>
-    {
-        { let mut v = v; v.push(e); v }
-    }
-
-    pub fn __action15<
-        'ast,
-    >(
-        arena: &'ast Arena<'ast>,
-        __0: &'ast Node<'ast>,
-        _: Tok,
-    ) -> &'ast Node<'ast>
-    {
-        (__0)
-    }
+pub fn __action0<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    __0: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    (__0)
+}
+
+pub fn __action1<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    l: &'ast Node<'ast>,
+    _: Tok,
+    r: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    arena.alloc(Node::Binary(Op::Sub, l, r))
+}
+
+pub fn __action2<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    l: &'ast Node<'ast>,
+    _: Tok,
+    r: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    arena.alloc(Node::Binary(Op::Add, l, r))
+}
+
+pub fn __action3<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    __0: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    (__0)
+}
+
+pub fn __action4<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    l: &'ast Node<'ast>,
+    _: Tok,
+    r: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    arena.alloc(Node::Binary(Op::Mul, l, r))
+}
+
+pub fn __action5<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    l: &'ast Node<'ast>,
+    _: Tok,
+    r: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    arena.alloc(Node::Binary(Op::Div, l, r))
+}
+
+pub fn __action6<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    _: Tok,
+    _: Tok,
+    __0: Vec<&'ast Node<'ast>>,
+    _: Tok,
+) -> &'ast Node<'ast>
+{
+    arena.alloc(Node::Reduce(Op::Mul, __0))
+}
+
+pub fn __action7<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    __0: &'ast Node<'ast>,
+) -> &'ast Node<'ast>
+{
+    (__0)
+}
+
+pub fn __action8<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    n: i32,
+) -> &'ast Node<'ast>
+{
+    arena.alloc(Node::Value(n))
+}
+
+pub fn __action9<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    _: Tok,
+    __0: &'ast Node<'ast>,
+    _: Tok,
+) -> &'ast Node<'ast>
+{
+    (__0)
+}
+
+pub fn __action10<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    h: ::std::vec::Vec<&'ast Node<'ast>>,
+    t: ::std::option::Option<&'ast Node<'ast>>,
+) -> Vec<&'ast Node<'ast>>
+{
+    h.into_iter().chain(t).collect()
+}
+
+pub fn __action11<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    __0: &'ast Node<'ast>,
+) -> ::std::option::Option<&'ast Node<'ast>>
+{
+    Some(__0)
+}
+
+pub fn __action12<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+) -> ::std::option::Option<&'ast Node<'ast>>
+{
+    None
+}
+
+pub fn __action13<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+) -> ::std::vec::Vec<&'ast Node<'ast>>
+{
+    vec![]
+}
+
+pub fn __action14<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    v: ::std::vec::Vec<&'ast Node<'ast>>,
+    e: &'ast Node<'ast>,
+) -> ::std::vec::Vec<&'ast Node<'ast>>
+{
+    { let mut v = v; v.push(e); v }
+}
+
+pub fn __action15<
+    'ast,
+>(
+    arena: &'ast Arena<'ast>,
+    __0: &'ast Node<'ast>,
+    _: Tok,
+) -> &'ast Node<'ast>
+{
+    (__0)
 }
diff --git a/lalrpop-test/src/loc.rs b/lalrpop-test/src/loc.rs
index f765793..5de0b30 100644
--- a/lalrpop-test/src/loc.rs
+++ b/lalrpop-test/src/loc.rs
@@ -22,11 +22,11 @@ mod __parse__Items {
     use util::tok::Tok;
 
     pub enum __Nonterminal<> {
-        ____Items(Vec<(Option<usize>, Option<usize>)>),
         Items(Vec<(Option<usize>, Option<usize>)>),
         _40_3e(::std::option::Option<usize>),
-        Spanned_3c_22_2b_22_3e((Option<usize>, Option<usize>)),
         _40_3c(::std::option::Option<usize>),
+        ____Items(Vec<(Option<usize>, Option<usize>)>),
+        Spanned_3c_22_2b_22_3e((Option<usize>, Option<usize>)),
     }
 
     // State 0
@@ -41,9 +41,9 @@ mod __parse__Items {
     //   Items = (*) Items "-" ["-"]
     //   __Items = (*) Items [EOF]
     //
+    //   "-" -> Reduce(Items =  => Call(ActionFn(1));)
     //   "+" -> Reduce(Items =  => Call(ActionFn(1));)
     //   EOF -> Reduce(Items =  => Call(ActionFn(1));)
-    //   "-" -> Reduce(Items =  => Call(ActionFn(1));)
     //
     //   Items -> S1
     pub fn __state0<
@@ -56,16 +56,16 @@ mod __parse__Items {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<>);
         match __lookahead {
+            Some((_, Tok::Minus(..), _)) => {
+                let __nt = super::__action1();
+                __result = (__lookbehind, __lookahead, __Nonterminal::Items(__nt));
+            }
             Some((_, Tok::Plus(..), _)) => {
-                let __nt = super::__actions::__action1();
+                let __nt = super::__action1();
                 __result = (__lookbehind, __lookahead, __Nonterminal::Items(__nt));
             }
             None => {
-                let __nt = super::__actions::__action1();
-                __result = (__lookbehind, __lookahead, __Nonterminal::Items(__nt));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __nt = super::__actions::__action1();
+                let __nt = super::__action1();
                 __result = (__lookbehind, __lookahead, __Nonterminal::Items(__nt));
             }
             _ => {
@@ -99,12 +99,12 @@ mod __parse__Items {
     //   Spanned<"+"> = (*) @< "+" @> ["-"]
     //   __Items = Items (*) [EOF]
     //
+    //   "+" -> Reduce(@< =  => Lookahead;)
     //   EOF -> Reduce(__Items = Items => Call(ActionFn(0));)
     //   "-" -> Shift(S2)
-    //   "+" -> Reduce(@< =  => Lookahead;)
     //
-    //   @< -> S3
     //   Spanned<"+"> -> S4
+    //   @< -> S3
     pub fn __state1<
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
     >(
@@ -122,15 +122,15 @@ mod __parse__Items {
                 let __lookahead = __tokens.next();
                 __result = try!(__state2(__lookbehind, __lookahead, __tokens, __sym0, __sym1));
             }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action0(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::____Items(__nt)));
-            }
             Some((_, Tok::Plus(..), _)) => {
                 let __nt = __lookahead.as_ref().map(|o| ::std::clone::Clone::clone(&o.0));
                 __result = (__lookbehind, __lookahead, __Nonterminal::_40_3c(__nt));
             }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action0(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::____Items(__nt)));
+            }
             _ => {
                 return Err(__lookahead);
             }
@@ -138,14 +138,14 @@ mod __parse__Items {
         while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::_40_3c(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state3(__lookbehind, __lookahead, __tokens, __sym1));
-                }
                 __Nonterminal::Spanned_3c_22_2b_22_3e(__nt) => {
                     let __sym1 = &mut Some(__nt);
                     __result = try!(__state4(__lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
+                __Nonterminal::_40_3c(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state3(__lookbehind, __lookahead, __tokens, __sym1));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -178,19 +178,19 @@ mod __parse__Items {
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0, __sym1);
+                let __nt = super::__action3(__sym0, __sym1);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
             }
             Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0, __sym1);
+                let __nt = super::__action3(__sym0, __sym1);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0, __sym1);
+                let __nt = super::__action3(__sym0, __sym1);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
             }
             _ => {
@@ -236,8 +236,8 @@ mod __parse__Items {
     //   Items = Items Spanned<"+"> (*) ["-"]
     //
     //   EOF -> Reduce(Items = Items, Spanned<"+"> => Call(ActionFn(2));)
-    //   "+" -> Reduce(Items = Items, Spanned<"+"> => Call(ActionFn(2));)
     //   "-" -> Reduce(Items = Items, Spanned<"+"> => Call(ActionFn(2));)
+    //   "+" -> Reduce(Items = Items, Spanned<"+"> => Call(ActionFn(2));)
     //
     pub fn __state4<
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -254,19 +254,19 @@ mod __parse__Items {
             None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
-            }
-            Some((_, Tok::Plus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1);
+                let __nt = super::__action2(__sym0, __sym1);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
             }
             Some((_, Tok::Minus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1);
+                let __nt = super::__action2(__sym0, __sym1);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
+            }
+            Some((_, Tok::Plus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __nt = super::__action2(__sym0, __sym1);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Items(__nt)));
             }
             _ => {
@@ -283,9 +283,9 @@ mod __parse__Items {
     //   Spanned<"+"> = @< "+" (*) @> ["+"]
     //   Spanned<"+"> = @< "+" (*) @> ["-"]
     //
-    //   "-" -> Reduce(@> =  => Lookbehind;)
-    //   "+" -> Reduce(@> =  => Lookbehind;)
     //   EOF -> Reduce(@> =  => Lookbehind;)
+    //   "+" -> Reduce(@> =  => Lookbehind;)
+    //   "-" -> Reduce(@> =  => Lookbehind;)
     //
     //   @> -> S6
     pub fn __state5<
@@ -300,7 +300,7 @@ mod __parse__Items {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<>);
         match __lookahead {
-            Some((_, Tok::Minus(..), _)) => {
+            None => {
                 let __nt = ::std::clone::Clone::clone(&__lookbehind);
                 __result = (__lookbehind, __lookahead, __Nonterminal::_40_3e(__nt));
             }
@@ -308,7 +308,7 @@ mod __parse__Items {
                 let __nt = ::std::clone::Clone::clone(&__lookbehind);
                 __result = (__lookbehind, __lookahead, __Nonterminal::_40_3e(__nt));
             }
-            None => {
+            Some((_, Tok::Minus(..), _)) => {
                 let __nt = ::std::clone::Clone::clone(&__lookbehind);
                 __result = (__lookbehind, __lookahead, __Nonterminal::_40_3e(__nt));
             }
@@ -336,9 +336,9 @@ mod __parse__Items {
     //   Spanned<"+"> = @< "+" @> (*) ["+"]
     //   Spanned<"+"> = @< "+" @> (*) ["-"]
     //
+    //   "-" -> Reduce(Spanned<"+"> = @<, "+", @> => Call(ActionFn(4));)
     //   "+" -> Reduce(Spanned<"+"> = @<, "+", @> => Call(ActionFn(4));)
     //   EOF -> Reduce(Spanned<"+"> = @<, "+", @> => Call(ActionFn(4));)
-    //   "-" -> Reduce(Spanned<"+"> = @<, "+", @> => Call(ActionFn(4));)
     //
     pub fn __state6<
         __TOKENS: Iterator<Item=(usize,Tok,usize)>,
@@ -353,25 +353,25 @@ mod __parse__Items {
     {
         let mut __result: (Option<usize>, Option<(usize,Tok,usize)>, __Nonterminal<>);
         match __lookahead {
+            Some((_, Tok::Minus(..), _)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action4(__sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::Spanned_3c_22_2b_22_3e(__nt)));
+            }
             Some((_, Tok::Plus(..), _)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0, __sym1, __sym2);
+                let __nt = super::__action4(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Spanned_3c_22_2b_22_3e(__nt)));
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::Spanned_3c_22_2b_22_3e(__nt)));
-            }
-            Some((_, Tok::Minus(..), _)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0, __sym1, __sym2);
+                let __nt = super::__action4(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::Spanned_3c_22_2b_22_3e(__nt)));
             }
             _ => {
@@ -381,54 +381,49 @@ mod __parse__Items {
     }
 }
 
-mod __actions {
-    use util::tok::Tok;
+pub fn __action0<
+>(
+    __0: Vec<(Option<usize>, Option<usize>)>,
+) -> Vec<(Option<usize>, Option<usize>)>
+{
+    (__0)
+}
 
+pub fn __action1<
+>(
+) -> Vec<(Option<usize>, Option<usize>)>
+{
+    vec![]
+}
 
-    pub fn __action0<
-    >(
-        __0: Vec<(Option<usize>, Option<usize>)>,
-    ) -> Vec<(Option<usize>, Option<usize>)>
+pub fn __action2<
+>(
+    v: Vec<(Option<usize>, Option<usize>)>,
+    e: (Option<usize>, Option<usize>),
+) -> Vec<(Option<usize>, Option<usize>)>
+{
     {
-        (__0)
-    }
-
-    pub fn __action1<
-    >(
-    ) -> Vec<(Option<usize>, Option<usize>)>
-    {
-        vec![]
-    }
-
-    pub fn __action2<
-    >(
-        v: Vec<(Option<usize>, Option<usize>)>,
-        e: (Option<usize>, Option<usize>),
-    ) -> Vec<(Option<usize>, Option<usize>)>
-    {
-        {
         let mut v = v;
         v.push(e);
         v
     }
-    }
-
-    pub fn __action3<
-    >(
-        v: Vec<(Option<usize>, Option<usize>)>,
-        _: Tok,
-    ) -> Vec<(Option<usize>, Option<usize>)>
-    {
-        v
-    }
-
-    pub fn __action4<
-    >(
-        __0: ::std::option::Option<usize>,
-        _: Tok,
-        __1: ::std::option::Option<usize>,
-    ) -> (Option<usize>, Option<usize>)
-    {
-        (__0, __1)
-    }
+}
+
+pub fn __action3<
+>(
+    v: Vec<(Option<usize>, Option<usize>)>,
+    _: Tok,
+) -> Vec<(Option<usize>, Option<usize>)>
+{
+    v
+}
+
+pub fn __action4<
+>(
+    __0: ::std::option::Option<usize>,
+    _: Tok,
+    __1: ::std::option::Option<usize>,
+) -> (Option<usize>, Option<usize>)
+{
+    (__0, __1)
 }
diff --git a/lalrpop-test/src/main.rs b/lalrpop-test/src/main.rs
index cd9da25..9c12ec3 100644
--- a/lalrpop-test/src/main.rs
+++ b/lalrpop-test/src/main.rs
@@ -5,6 +5,10 @@ mod loc;
 mod sub;
 mod util;
 
+/// This constant is here so that some of the generator parsers can
+/// refer to it in order to test `super::` handling in action code.
+const ZERO: i32 = 0;
+
 #[test]
 fn expr_test1() {
     util::test(|v| expr::parse_Expr(1, v), "22 - 3", 22 - 3);
diff --git a/lalrpop-test/src/sub.lalrpop b/lalrpop-test/src/sub.lalrpop
index 8668d7a..ba39351 100644
--- a/lalrpop-test/src/sub.lalrpop
+++ b/lalrpop-test/src/sub.lalrpop
@@ -13,10 +13,10 @@ extern token {
 
 pub S = E;
 
-E = {
-    <l:E> "-" <r:T> => l-r;
+E: i32 = {
+    <l:E> "-" <r:T> => l - r;
 
-    T;
+    <t:T> => t - super::ZERO;
 };
 
 T = {
diff --git a/lalrpop-test/src/sub.rs b/lalrpop-test/src/sub.rs
index 0f429f6..81d4604 100644
--- a/lalrpop-test/src/sub.rs
+++ b/lalrpop-test/src/sub.rs
@@ -22,10 +22,10 @@ mod __parse__S {
     use util::tok::Tok;
 
     pub enum __Nonterminal<> {
-        E(i32),
+        ____S(i32),
         S(i32),
         T(i32),
-        ____S(i32),
+        E(i32),
     }
 
     // State 0
@@ -40,12 +40,12 @@ mod __parse__S {
     //   T = (*) "Num" ["-"]
     //   __S = (*) S [EOF]
     //
-    //   "Num" -> Shift(S2)
+    //   "Num" -> Shift(S5)
     //   "(" -> Shift(S4)
     //
-    //   S -> S3
-    //   E -> S1
-    //   T -> S5
+    //   S -> S2
+    //   T -> S1
+    //   E -> S3
     pub fn __state0<
         __TOKENS: Iterator<Item=Tok>,
     >(
@@ -60,7 +60,7 @@ mod __parse__S {
                 let mut __lookbehind = None;
                 let mut __sym0 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state2(__lookbehind, __lookahead, __tokens, __sym0));
+                __result = try!(__state5(__lookbehind, __lookahead, __tokens, __sym0));
             }
             Some(__tok @ Tok::LParen(..)) => {
                 let mut __lookbehind = None;
@@ -77,15 +77,15 @@ mod __parse__S {
             match __nt {
                 __Nonterminal::S(__nt) => {
                     let __sym0 = &mut Some(__nt);
-                    __result = try!(__state3(__lookbehind, __lookahead, __tokens, __sym0));
-                }
-                __Nonterminal::E(__nt) => {
-                    let __sym0 = &mut Some(__nt);
-                    __result = try!(__state1(__lookbehind, __lookahead, __tokens, __sym0));
+                    __result = try!(__state2(__lookbehind, __lookahead, __tokens, __sym0));
                 }
                 __Nonterminal::T(__nt) => {
                     let __sym0 = &mut Some(__nt);
-                    __result = try!(__state5(__lookbehind, __lookahead, __tokens, __sym0));
+                    __result = try!(__state1(__lookbehind, __lookahead, __tokens, __sym0));
+                }
+                __Nonterminal::E(__nt) => {
+                    let __sym0 = &mut Some(__nt);
+                    __result = try!(__state3(__lookbehind, __lookahead, __tokens, __sym0));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -95,14 +95,75 @@ mod __parse__S {
     }
 
     // State 1
+    //   E = T (*) [EOF]
+    //   E = T (*) ["-"]
+    //
+    //   "-" -> Reduce(E = T => Call(ActionFn(3));)
+    //   EOF -> Reduce(E = T => Call(ActionFn(3));)
+    //
+    pub fn __state1<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
+            }
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 2
+    //   __S = S (*) [EOF]
+    //
+    //   EOF -> Reduce(__S = S => Call(ActionFn(0));)
+    //
+    pub fn __state2<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            None => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action0(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::____S(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 3
     //   E = E (*) "-" T [EOF]
     //   E = E (*) "-" T ["-"]
     //   S = E (*) [EOF]
     //
-    //   "-" -> Shift(S6)
     //   EOF -> Reduce(S = E => Call(ActionFn(1));)
+    //   "-" -> Shift(S6)
     //
-    pub fn __state1<
+    pub fn __state3<
         __TOKENS: Iterator<Item=Tok>,
     >(
         __lookbehind: Option<()>,
@@ -121,7 +182,7 @@ mod __parse__S {
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action1(__sym0);
+                let __nt = super::__action1(__sym0);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::S(__nt)));
             }
             _ => {
@@ -131,67 +192,6 @@ mod __parse__S {
         return Ok(__result);
     }
 
-    // State 2
-    //   T = "Num" (*) [EOF]
-    //   T = "Num" (*) ["-"]
-    //
-    //   "-" -> Reduce(T = "Num" => Call(ActionFn(4));)
-    //   EOF -> Reduce(T = "Num" => Call(ActionFn(4));)
-    //
-    pub fn __state2<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
-            }
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 3
-    //   __S = S (*) [EOF]
-    //
-    //   EOF -> Reduce(__S = S => Call(ActionFn(0));)
-    //
-    pub fn __state3<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            None => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action0(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::____S(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
     // State 4
     //   E = (*) E "-" T [")"]
     //   E = (*) E "-" T ["-"]
@@ -204,11 +204,11 @@ mod __parse__S {
     //   T = (*) "Num" [")"]
     //   T = (*) "Num" ["-"]
     //
-    //   "Num" -> Shift(S9)
-    //   "(" -> Shift(S10)
+    //   "Num" -> Shift(S10)
+    //   "(" -> Shift(S9)
     //
-    //   E -> S7
-    //   T -> S8
+    //   E -> S8
+    //   T -> S7
     pub fn __state4<
         __TOKENS: Iterator<Item=Tok>,
     >(
@@ -224,13 +224,13 @@ mod __parse__S {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state9(__lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state10(__lookbehind, __lookahead, __tokens, __sym1));
             }
             Some(__tok @ Tok::LParen(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state10(__lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state9(__lookbehind, __lookahead, __tokens, __sym1));
             }
             _ => {
                 return Err(__lookahead);
@@ -241,11 +241,11 @@ mod __parse__S {
             match __nt {
                 __Nonterminal::E(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state7(__lookbehind, __lookahead, __tokens, __sym0, __sym1));
+                    __result = try!(__state8(__lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
                 __Nonterminal::T(__nt) => {
                     let __sym1 = &mut Some(__nt);
-                    __result = try!(__state8(__lookbehind, __lookahead, __tokens, __sym1));
+                    __result = try!(__state7(__lookbehind, __lookahead, __tokens, __sym1));
                 }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
@@ -256,11 +256,11 @@ mod __parse__S {
     }
 
     // State 5
-    //   E = T (*) [EOF]
-    //   E = T (*) ["-"]
+    //   T = "Num" (*) [EOF]
+    //   T = "Num" (*) ["-"]
     //
-    //   "-" -> Reduce(E = T => Call(ActionFn(3));)
-    //   EOF -> Reduce(E = T => Call(ActionFn(3));)
+    //   EOF -> Reduce(T = "Num" => Call(ActionFn(4));)
+    //   "-" -> Reduce(T = "Num" => Call(ActionFn(4));)
     //
     pub fn __state5<
         __TOKENS: Iterator<Item=Tok>,
@@ -273,15 +273,15 @@ mod __parse__S {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
-            }
             None => {
                 let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
+                let __nt = super::__action4(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action4(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
             }
             _ => {
                 return Err(__lookahead);
@@ -298,7 +298,7 @@ mod __parse__S {
     //   T = (*) "Num" ["-"]
     //
     //   "(" -> Shift(S4)
-    //   "Num" -> Shift(S2)
+    //   "Num" -> Shift(S5)
     //
     //   T -> S11
     pub fn __state6<
@@ -323,7 +323,7 @@ mod __parse__S {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state2(__lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state5(__lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -345,6 +345,40 @@ mod __parse__S {
     }
 
     // State 7
+    //   E = T (*) [")"]
+    //   E = T (*) ["-"]
+    //
+    //   "-" -> Reduce(E = T => Call(ActionFn(3));)
+    //   ")" -> Reduce(E = T => Call(ActionFn(3));)
+    //
+    pub fn __state7<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
+            }
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action3(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
+    // State 8
     //   E = E (*) "-" T [")"]
     //   E = E (*) "-" T ["-"]
     //   T = "(" E (*) ")" [EOF]
@@ -353,7 +387,7 @@ mod __parse__S {
     //   "-" -> Shift(S12)
     //   ")" -> Shift(S13)
     //
-    pub fn __state7<
+    pub fn __state8<
         __TOKENS: Iterator<Item=Tok>,
     >(
         __lookbehind: Option<()>,
@@ -384,75 +418,7 @@ mod __parse__S {
         return Ok(__result);
     }
 
-    // State 8
-    //   E = T (*) [")"]
-    //   E = T (*) ["-"]
-    //
-    //   "-" -> Reduce(E = T => Call(ActionFn(3));)
-    //   ")" -> Reduce(E = T => Call(ActionFn(3));)
-    //
-    pub fn __state8<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
-            }
-            Some(Tok::RParen(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action3(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
     // State 9
-    //   T = "Num" (*) [")"]
-    //   T = "Num" (*) ["-"]
-    //
-    //   ")" -> Reduce(T = "Num" => Call(ActionFn(4));)
-    //   "-" -> Reduce(T = "Num" => Call(ActionFn(4));)
-    //
-    pub fn __state9<
-        __TOKENS: Iterator<Item=Tok>,
-    >(
-        __lookbehind: Option<()>,
-        __lookahead: Option<Tok>,
-        __tokens: &mut __TOKENS,
-        __sym0: &mut Option<i32>,
-    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
-    {
-        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
-        match __lookahead {
-            Some(Tok::RParen(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
-            }
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __nt = super::__actions::__action4(__sym0);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
-            }
-            _ => {
-                return Err(__lookahead);
-            }
-        }
-    }
-
-    // State 10
     //   E = (*) E "-" T [")"]
     //   E = (*) E "-" T ["-"]
     //   E = (*) T [")"]
@@ -464,12 +430,12 @@ mod __parse__S {
     //   T = (*) "Num" [")"]
     //   T = (*) "Num" ["-"]
     //
-    //   "(" -> Shift(S10)
-    //   "Num" -> Shift(S9)
+    //   "(" -> Shift(S9)
+    //   "Num" -> Shift(S10)
     //
-    //   T -> S8
     //   E -> S14
-    pub fn __state10<
+    //   T -> S7
+    pub fn __state9<
         __TOKENS: Iterator<Item=Tok>,
     >(
         __lookbehind: Option<()>,
@@ -484,13 +450,13 @@ mod __parse__S {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state10(__lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state9(__lookbehind, __lookahead, __tokens, __sym1));
             }
             Some(Tok::Num(__tok0)) => {
                 let mut __lookbehind = None;
                 let mut __sym1 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state9(__lookbehind, __lookahead, __tokens, __sym1));
+                __result = try!(__state10(__lookbehind, __lookahead, __tokens, __sym1));
             }
             _ => {
                 return Err(__lookahead);
@@ -499,14 +465,14 @@ mod __parse__S {
         while __sym0.is_some() {
             let (__lookbehind, __lookahead, __nt) = __result;
             match __nt {
-                __Nonterminal::T(__nt) => {
-                    let __sym1 = &mut Some(__nt);
-                    __result = try!(__state8(__lookbehind, __lookahead, __tokens, __sym1));
-                }
                 __Nonterminal::E(__nt) => {
                     let __sym1 = &mut Some(__nt);
                     __result = try!(__state14(__lookbehind, __lookahead, __tokens, __sym0, __sym1));
                 }
+                __Nonterminal::T(__nt) => {
+                    let __sym1 = &mut Some(__nt);
+                    __result = try!(__state7(__lookbehind, __lookahead, __tokens, __sym1));
+                }
                 _ => {
                     return Ok((__lookbehind, __lookahead, __nt));
                 }
@@ -515,6 +481,40 @@ mod __parse__S {
         return Ok(__result);
     }
 
+    // State 10
+    //   T = "Num" (*) [")"]
+    //   T = "Num" (*) ["-"]
+    //
+    //   "-" -> Reduce(T = "Num" => Call(ActionFn(4));)
+    //   ")" -> Reduce(T = "Num" => Call(ActionFn(4));)
+    //
+    pub fn __state10<
+        __TOKENS: Iterator<Item=Tok>,
+    >(
+        __lookbehind: Option<()>,
+        __lookahead: Option<Tok>,
+        __tokens: &mut __TOKENS,
+        __sym0: &mut Option<i32>,
+    ) -> Result<(Option<()>, Option<Tok>, __Nonterminal<>), Option<Tok>>
+    {
+        let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
+        match __lookahead {
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action4(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
+            }
+            Some(Tok::RParen(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __nt = super::__action4(__sym0);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
+            }
+            _ => {
+                return Err(__lookahead);
+            }
+        }
+    }
+
     // State 11
     //   E = E "-" T (*) [EOF]
     //   E = E "-" T (*) ["-"]
@@ -539,14 +539,14 @@ mod __parse__S {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1, __sym2);
+                let __nt = super::__action2(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1, __sym2);
+                let __nt = super::__action2(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
             }
             _ => {
@@ -563,8 +563,8 @@ mod __parse__S {
     //   T = (*) "Num" [")"]
     //   T = (*) "Num" ["-"]
     //
-    //   "Num" -> Shift(S9)
-    //   "(" -> Shift(S10)
+    //   "Num" -> Shift(S10)
+    //   "(" -> Shift(S9)
     //
     //   T -> S15
     pub fn __state12<
@@ -583,13 +583,13 @@ mod __parse__S {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok0));
                 let __lookahead = __tokens.next();
-                __result = try!(__state9(__lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state10(__lookbehind, __lookahead, __tokens, __sym2));
             }
             Some(__tok @ Tok::LParen(..)) => {
                 let mut __lookbehind = None;
                 let mut __sym2 = &mut Some((__tok));
                 let __lookahead = __tokens.next();
-                __result = try!(__state10(__lookbehind, __lookahead, __tokens, __sym2));
+                __result = try!(__state9(__lookbehind, __lookahead, __tokens, __sym2));
             }
             _ => {
                 return Err(__lookahead);
@@ -634,14 +634,14 @@ mod __parse__S {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(__sym0, __sym1, __sym2);
+                let __nt = super::__action5(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
             }
             None => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(__sym0, __sym1, __sym2);
+                let __nt = super::__action5(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
             }
             _ => {
@@ -694,8 +694,8 @@ mod __parse__S {
     //   E = E "-" T (*) [")"]
     //   E = E "-" T (*) ["-"]
     //
-    //   "-" -> Reduce(E = E, "-", T => Call(ActionFn(2));)
     //   ")" -> Reduce(E = E, "-", T => Call(ActionFn(2));)
+    //   "-" -> Reduce(E = E, "-", T => Call(ActionFn(2));)
     //
     pub fn __state15<
         __TOKENS: Iterator<Item=Tok>,
@@ -710,18 +710,18 @@ mod __parse__S {
     {
         let mut __result: (Option<()>, Option<Tok>, __Nonterminal<>);
         match __lookahead {
-            Some(Tok::Minus(..)) => {
-                let __sym0 = __sym0.take().unwrap();
-                let __sym1 = __sym1.take().unwrap();
-                let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1, __sym2);
-                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
-            }
             Some(Tok::RParen(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action2(__sym0, __sym1, __sym2);
+                let __nt = super::__action2(__sym0, __sym1, __sym2);
+                return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
+            }
+            Some(Tok::Minus(..)) => {
+                let __sym0 = __sym0.take().unwrap();
+                let __sym1 = __sym1.take().unwrap();
+                let __sym2 = __sym2.take().unwrap();
+                let __nt = super::__action2(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::E(__nt)));
             }
             _ => {
@@ -754,14 +754,14 @@ mod __parse__S {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(__sym0, __sym1, __sym2);
+                let __nt = super::__action5(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
             }
             Some(Tok::RParen(..)) => {
                 let __sym0 = __sym0.take().unwrap();
                 let __sym1 = __sym1.take().unwrap();
                 let __sym2 = __sym2.take().unwrap();
-                let __nt = super::__actions::__action5(__sym0, __sym1, __sym2);
+                let __nt = super::__action5(__sym0, __sym1, __sym2);
                 return Ok((__lookbehind, __lookahead, __Nonterminal::T(__nt)));
             }
             _ => {
@@ -771,59 +771,54 @@ mod __parse__S {
     }
 }
 
-mod __actions {
-    use util::tok::Tok;
-
-
-    pub fn __action0<
-    >(
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action1<
-    >(
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action2<
-    >(
-        l: i32,
-        _: Tok,
-        r: i32,
-    ) -> i32
-    {
-        l-r
-    }
-
-    pub fn __action3<
-    >(
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action4<
-    >(
-        __0: i32,
-    ) -> i32
-    {
-        (__0)
-    }
-
-    pub fn __action5<
-    >(
-        _: Tok,
-        __0: i32,
-        _: Tok,
-    ) -> i32
-    {
-        (__0)
-    }
+pub fn __action0<
+>(
+    __0: i32,
+) -> i32
+{
+    (__0)
+}
+
+pub fn __action1<
+>(
+    __0: i32,
+) -> i32
+{
+    (__0)
+}
+
+pub fn __action2<
+>(
+    l: i32,
+    _: Tok,
+    r: i32,
+) -> i32
+{
+    l - r
+}
+
+pub fn __action3<
+>(
+    t: i32,
+) -> i32
+{
+    t - super::ZERO
+}
+
+pub fn __action4<
+>(
+    __0: i32,
+) -> i32
+{
+    (__0)
+}
+
+pub fn __action5<
+>(
+    _: Tok,
+    __0: i32,
+    _: Tok,
+) -> i32
+{
+    (__0)
 }
diff --git a/lalrpop/src/build/mod.rs b/lalrpop/src/build/mod.rs
index b883d6f..87c6f91 100644
--- a/lalrpop/src/build/mod.rs
+++ b/lalrpop/src/build/mod.rs
@@ -95,12 +95,32 @@ fn emit_uses<W:Write>(grammar: &r::Grammar,
     Ok(())
 }
 
-fn emit_action_code<W:Write>(grammar: &r::Grammar,
-                             rust: &mut RustWrite<W>)
-                             -> io::Result<()>
+fn emit_recursive_ascent(output_path: &Path, grammar: &r::Grammar) -> io::Result<()>
 {
-    rust!(rust, "");
-    rust!(rust, "mod {}actions {{", grammar.prefix);
+    let output_file = try!(fs::File::create(output_path));
+    let mut rust = RustWrite::new(output_file);
+
+    // We generate a module structure like this:
+    //
+    // ```
+    // mod <output-file> {
+    //     // For each public symbol:
+    //     pub fn parse_XYZ();
+    //     mod __XYZ { ... }
+    //
+    //     // For each bit of action code:
+    //     <action-code>
+    // }
+    // ```
+    //
+    // Note that the action code goes in the outer module.  This is
+    // intentional because it means that the foo.lalrpop file serves
+    // as a module in the rust hierarchy, so if the action code
+    // includes things like `super::` it will resolve in the natural
+    // way.
+
+    // often some of the uses are not used here
+    rust!(rust, "#![allow(unused_imports)]");
 
     // we always thread the parameters through to the action code,
     // even if they are not used, and hence we need to disable the
@@ -109,35 +129,6 @@ fn emit_action_code<W:Write>(grammar: &r::Grammar,
         rust!(rust, "#![allow(unused_variables)]");
     }
 
-    try!(emit_uses(grammar, rust));
-    for (i, defn) in grammar.action_fn_defns.iter().enumerate() {
-        rust!(rust, "");
-        try!(rust.write_pub_fn_header(
-            grammar,
-            format!("{}action{}", grammar.prefix, i),
-            vec![],
-            defn.arg_patterns.iter()
-                             .zip(defn.arg_types.iter())
-                             .map(|(p, t)| format!("{}: {}", p, t))
-                             .collect(),
-            format!("{}", defn.ret_type),
-            vec![]));
-        rust!(rust, "{{");
-        rust!(rust, "{}", defn.code);
-        rust!(rust, "}}");
-    }
-    rust!(rust, "}}");
-    Ok(())
-}
-
-fn emit_recursive_ascent(output_path: &Path, grammar: &r::Grammar) -> io::Result<()>
-{
-    let output_file = try!(fs::File::create(output_path));
-    let mut rust = RustWrite::new(output_file);
-
-    // often some of the uses are not used here
-    rust!(rust, "#![allow(unused_imports)]");
-
     try!(emit_uses(grammar, &mut rust));
 
     if grammar.start_nonterminals.is_empty() {
@@ -165,3 +156,27 @@ fn emit_recursive_ascent(output_path: &Path, grammar: &r::Grammar) -> io::Result
     try!(emit_action_code(grammar, &mut rust));
     Ok(())
 }
+
+fn emit_action_code<W:Write>(grammar: &r::Grammar,
+                             rust: &mut RustWrite<W>)
+                             -> io::Result<()>
+{
+    for (i, defn) in grammar.action_fn_defns.iter().enumerate() {
+        rust!(rust, "");
+        try!(rust.write_pub_fn_header(
+            grammar,
+            format!("{}action{}", grammar.prefix, i),
+            vec![],
+            defn.arg_patterns.iter()
+                             .zip(defn.arg_types.iter())
+                             .map(|(p, t)| format!("{}: {}", p, t))
+                             .collect(),
+            format!("{}", defn.ret_type),
+            vec![]));
+        rust!(rust, "{{");
+        rust!(rust, "{}", defn.code);
+        rust!(rust, "}}");
+    }
+    Ok(())
+}
+
diff --git a/lalrpop/src/lr1/ascent.rs b/lalrpop/src/lr1/ascent.rs
index 31082c7..8c71d63 100644
--- a/lalrpop/src/lr1/ascent.rs
+++ b/lalrpop/src/lr1/ascent.rs
@@ -239,8 +239,7 @@ impl<'ascent,'grammar,W:Write> RecursiveAscent<'ascent,'grammar,W> {
             // invoke the action code
             match production.action {
                 ActionKind::Call(action_fn) => {
-                    rust!(self.out, "let {}nt = super::{}actions::{}action{}({}{});",
-                          self.prefix,
+                    rust!(self.out, "let {}nt = super::{}action{}({}{});",
                           self.prefix,
                           self.prefix,
                           action_fn.index(),