mirror of
https://github.com/fluencelabs/lalrpop
synced 2025-03-16 17:00:53 +00:00
structure to be more friendly to adding parameters
This commit is contained in:
parent
0ee3ac81d6
commit
8f14f9a3f3
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,11 @@
|
||||
use util::tok::Tok;
|
||||
|
||||
#[allow(non_snake_case)]
|
||||
pub fn parse_S<__TOKENS: IntoIterator<Item=Tok>>(
|
||||
__tokens: __TOKENS)
|
||||
-> Result<(Option<Tok>, i32), Option<Tok>>
|
||||
{
|
||||
pub fn parse_S<
|
||||
__TOKENS: IntoIterator<Item=Tok>,
|
||||
>(
|
||||
__tokens: __TOKENS,
|
||||
) -> Result<(Option<Tok>, i32), Option<Tok>> {
|
||||
let mut __tokens = __tokens.into_iter();
|
||||
let __lookahead = __tokens.next();
|
||||
match try!(__parse__S::__state0(__lookahead, &mut __tokens)) {
|
||||
@ -20,9 +21,9 @@ mod __parse__S {
|
||||
|
||||
pub enum __Nonterminal {
|
||||
E(i32),
|
||||
S(i32),
|
||||
__S(i32),
|
||||
T(i32),
|
||||
__S(i32),
|
||||
S(i32),
|
||||
}
|
||||
|
||||
// State 0
|
||||
@ -37,13 +38,15 @@ mod __parse__S {
|
||||
// T = (*) "Num" ["-"]
|
||||
// __S = (*) S [EOF]
|
||||
//
|
||||
// "(" -> Shift(S1)
|
||||
// "Num" -> Shift(S5)
|
||||
// "(" -> Shift(S5)
|
||||
// "Num" -> Shift(S3)
|
||||
//
|
||||
// T -> S4
|
||||
// S -> S2
|
||||
// E -> S3
|
||||
pub fn __state0<__TOKENS: Iterator<Item=Tok>>(
|
||||
// E -> S4
|
||||
// T -> S1
|
||||
pub fn __state0<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
@ -52,12 +55,12 @@ mod __parse__S {
|
||||
Some(__tok @ Tok::LParen(..)) => {
|
||||
let mut __sym0 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state1(__lookahead, __tokens, __sym0));
|
||||
__result = try!(__state5(__lookahead, __tokens, __sym0));
|
||||
}
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym0 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state5(__lookahead, __tokens, __sym0));
|
||||
__result = try!(__state3(__lookahead, __tokens, __sym0));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
@ -66,17 +69,17 @@ mod __parse__S {
|
||||
loop {
|
||||
let (__lookahead, __nt) = __result;
|
||||
match __nt {
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym0 = &mut Some(__nt);
|
||||
__result = try!(__state4(__lookahead, __tokens, __sym0));
|
||||
}
|
||||
__Nonterminal::S(__nt) => {
|
||||
let __sym0 = &mut Some(__nt);
|
||||
__result = try!(__state2(__lookahead, __tokens, __sym0));
|
||||
}
|
||||
__Nonterminal::E(__nt) => {
|
||||
let __sym0 = &mut Some(__nt);
|
||||
__result = try!(__state3(__lookahead, __tokens, __sym0));
|
||||
__result = try!(__state4(__lookahead, __tokens, __sym0));
|
||||
}
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym0 = &mut Some(__nt);
|
||||
__result = try!(__state1(__lookahead, __tokens, __sym0));
|
||||
}
|
||||
_ => {
|
||||
return Ok((__lookahead, __nt));
|
||||
@ -86,60 +89,35 @@ mod __parse__S {
|
||||
}
|
||||
|
||||
// State 1
|
||||
// E = (*) E "-" T [")"]
|
||||
// E = (*) E "-" T ["-"]
|
||||
// E = (*) T [")"]
|
||||
// E = (*) T ["-"]
|
||||
// T = (*) "(" E ")" [")"]
|
||||
// T = (*) "(" E ")" ["-"]
|
||||
// T = "(" (*) E ")" [EOF]
|
||||
// T = "(" (*) E ")" ["-"]
|
||||
// T = (*) "Num" [")"]
|
||||
// T = (*) "Num" ["-"]
|
||||
// E = T (*) [EOF]
|
||||
// E = T (*) ["-"]
|
||||
//
|
||||
// "(" -> Shift(S6)
|
||||
// "Num" -> Shift(S8)
|
||||
// "-" -> Reduce(E = T => ActionFn(3);)
|
||||
// EOF -> Reduce(E = T => ActionFn(3);)
|
||||
//
|
||||
// T -> S7
|
||||
// E -> S9
|
||||
pub fn __state1<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state1<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym0: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(__tok @ Tok::LParen(..)) => {
|
||||
let mut __sym1 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state6(__lookahead, __tokens, __sym1));
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action3(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym1 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state8(__lookahead, __tokens, __sym1));
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action3(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
while __sym0.is_some() {
|
||||
let (__lookahead, __nt) = __result;
|
||||
match __nt {
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state7(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
__Nonterminal::E(__nt) => {
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state9(__lookahead, __tokens, __sym0, __sym1));
|
||||
}
|
||||
_ => {
|
||||
return Ok((__lookahead, __nt));
|
||||
}
|
||||
}
|
||||
}
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 2
|
||||
@ -147,7 +125,9 @@ mod __parse__S {
|
||||
//
|
||||
// EOF -> Reduce(__S = S => ActionFn(0);)
|
||||
//
|
||||
pub fn __state2<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state2<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
@ -166,14 +146,48 @@ mod __parse__S {
|
||||
}
|
||||
|
||||
// State 3
|
||||
// T = "Num" (*) [EOF]
|
||||
// T = "Num" (*) ["-"]
|
||||
//
|
||||
// "-" -> Reduce(T = "Num" => ActionFn(4);)
|
||||
// EOF -> Reduce(T = "Num" => ActionFn(4);)
|
||||
//
|
||||
pub fn __state3<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action4(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action4(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// State 4
|
||||
// E = E (*) "-" T [EOF]
|
||||
// E = E (*) "-" T ["-"]
|
||||
// S = E (*) [EOF]
|
||||
//
|
||||
// "-" -> Shift(S10)
|
||||
// "-" -> Shift(S6)
|
||||
// EOF -> Reduce(S = E => ActionFn(1);)
|
||||
//
|
||||
pub fn __state3<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state4<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
@ -183,7 +197,7 @@ mod __parse__S {
|
||||
Some(__tok @ Tok::Minus(..)) => {
|
||||
let mut __sym1 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state10(__lookahead, __tokens, __sym0, __sym1));
|
||||
__result = try!(__state6(__lookahead, __tokens, __sym0, __sym1));
|
||||
}
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
@ -197,99 +211,41 @@ mod __parse__S {
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 4
|
||||
// E = T (*) [EOF]
|
||||
// E = T (*) ["-"]
|
||||
//
|
||||
// EOF -> Reduce(E = T => ActionFn(3);)
|
||||
// "-" -> Reduce(E = T => ActionFn(3);)
|
||||
//
|
||||
pub fn __state4<__TOKENS: Iterator<Item=Tok>>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action3(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action3(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// State 5
|
||||
// T = "Num" (*) [EOF]
|
||||
// T = "Num" (*) ["-"]
|
||||
//
|
||||
// "-" -> Reduce(T = "Num" => ActionFn(4);)
|
||||
// EOF -> Reduce(T = "Num" => ActionFn(4);)
|
||||
//
|
||||
pub fn __state5<__TOKENS: Iterator<Item=Tok>>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action4(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __nt = super::__action4(__sym0);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// State 6
|
||||
// E = (*) E "-" T [")"]
|
||||
// E = (*) E "-" T ["-"]
|
||||
// E = (*) T [")"]
|
||||
// E = (*) T ["-"]
|
||||
// T = (*) "(" E ")" [")"]
|
||||
// T = (*) "(" E ")" ["-"]
|
||||
// T = "(" (*) E ")" [")"]
|
||||
// T = "(" (*) E ")" [EOF]
|
||||
// T = "(" (*) E ")" ["-"]
|
||||
// T = (*) "Num" [")"]
|
||||
// T = (*) "Num" ["-"]
|
||||
//
|
||||
// "Num" -> Shift(S8)
|
||||
// "(" -> Shift(S6)
|
||||
// "(" -> Shift(S10)
|
||||
// "Num" -> Shift(S9)
|
||||
//
|
||||
// E -> S11
|
||||
// T -> S7
|
||||
pub fn __state6<__TOKENS: Iterator<Item=Tok>>(
|
||||
// E -> S8
|
||||
pub fn __state5<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym1 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state8(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
Some(__tok @ Tok::LParen(..)) => {
|
||||
let mut __sym1 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state6(__lookahead, __tokens, __sym1));
|
||||
__result = try!(__state10(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym1 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state9(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
@ -298,14 +254,65 @@ mod __parse__S {
|
||||
while __sym0.is_some() {
|
||||
let (__lookahead, __nt) = __result;
|
||||
match __nt {
|
||||
__Nonterminal::E(__nt) => {
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state11(__lookahead, __tokens, __sym0, __sym1));
|
||||
}
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state7(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
__Nonterminal::E(__nt) => {
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state8(__lookahead, __tokens, __sym0, __sym1));
|
||||
}
|
||||
_ => {
|
||||
return Ok((__lookahead, __nt));
|
||||
}
|
||||
}
|
||||
}
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 6
|
||||
// E = E "-" (*) T [EOF]
|
||||
// E = E "-" (*) T ["-"]
|
||||
// T = (*) "(" E ")" [EOF]
|
||||
// T = (*) "(" E ")" ["-"]
|
||||
// T = (*) "Num" [EOF]
|
||||
// T = (*) "Num" ["-"]
|
||||
//
|
||||
// "Num" -> Shift(S3)
|
||||
// "(" -> Shift(S5)
|
||||
//
|
||||
// T -> S11
|
||||
pub fn __state6<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
__sym1: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym2 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state3(__lookahead, __tokens, __sym2));
|
||||
}
|
||||
Some(__tok @ Tok::LParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state5(__lookahead, __tokens, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
while __sym1.is_some() {
|
||||
let (__lookahead, __nt) = __result;
|
||||
match __nt {
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym2 = &mut Some(__nt);
|
||||
__result = try!(__state11(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Ok((__lookahead, __nt));
|
||||
}
|
||||
@ -321,7 +328,9 @@ mod __parse__S {
|
||||
// ")" -> Reduce(E = T => ActionFn(3);)
|
||||
// "-" -> Reduce(E = T => ActionFn(3);)
|
||||
//
|
||||
pub fn __state7<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state7<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
@ -345,13 +354,51 @@ mod __parse__S {
|
||||
}
|
||||
|
||||
// State 8
|
||||
// E = E (*) "-" T [")"]
|
||||
// E = E (*) "-" T ["-"]
|
||||
// T = "(" E (*) ")" [EOF]
|
||||
// T = "(" E (*) ")" ["-"]
|
||||
//
|
||||
// ")" -> Shift(S12)
|
||||
// "-" -> Shift(S13)
|
||||
//
|
||||
pub fn __state8<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(__tok @ Tok::RParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state12(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
}
|
||||
Some(__tok @ Tok::Minus(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state13(__lookahead, __tokens, __sym1, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 9
|
||||
// T = "Num" (*) [")"]
|
||||
// T = "Num" (*) ["-"]
|
||||
//
|
||||
// ")" -> Reduce(T = "Num" => ActionFn(4);)
|
||||
// "-" -> Reduce(T = "Num" => ActionFn(4);)
|
||||
//
|
||||
pub fn __state8<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state9<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
@ -374,80 +421,56 @@ mod __parse__S {
|
||||
}
|
||||
}
|
||||
|
||||
// State 9
|
||||
// E = E (*) "-" T [")"]
|
||||
// E = E (*) "-" T ["-"]
|
||||
// T = "(" E (*) ")" [EOF]
|
||||
// T = "(" E (*) ")" ["-"]
|
||||
// State 10
|
||||
// E = (*) E "-" T [")"]
|
||||
// E = (*) E "-" T ["-"]
|
||||
// E = (*) T [")"]
|
||||
// E = (*) T ["-"]
|
||||
// T = (*) "(" E ")" [")"]
|
||||
// T = (*) "(" E ")" ["-"]
|
||||
// T = "(" (*) E ")" [")"]
|
||||
// T = "(" (*) E ")" ["-"]
|
||||
// T = (*) "Num" [")"]
|
||||
// T = (*) "Num" ["-"]
|
||||
//
|
||||
// "-" -> Shift(S12)
|
||||
// ")" -> Shift(S13)
|
||||
// "(" -> Shift(S10)
|
||||
// "Num" -> Shift(S9)
|
||||
//
|
||||
pub fn __state9<__TOKENS: Iterator<Item=Tok>>(
|
||||
// E -> S14
|
||||
// T -> S7
|
||||
pub fn __state10<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(__tok @ Tok::Minus(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state12(__lookahead, __tokens, __sym1, __sym2));
|
||||
}
|
||||
Some(__tok @ Tok::RParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state13(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 10
|
||||
// E = E "-" (*) T [EOF]
|
||||
// E = E "-" (*) T ["-"]
|
||||
// T = (*) "(" E ")" [EOF]
|
||||
// T = (*) "(" E ")" ["-"]
|
||||
// T = (*) "Num" [EOF]
|
||||
// T = (*) "Num" ["-"]
|
||||
//
|
||||
// "(" -> Shift(S1)
|
||||
// "Num" -> Shift(S5)
|
||||
//
|
||||
// T -> S14
|
||||
pub fn __state10<__TOKENS: Iterator<Item=Tok>>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
__sym1: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(__tok @ Tok::LParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let mut __sym1 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state1(__lookahead, __tokens, __sym2));
|
||||
__result = try!(__state10(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym2 = &mut Some((__tok0));
|
||||
let mut __sym1 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state5(__lookahead, __tokens, __sym2));
|
||||
__result = try!(__state9(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
while __sym1.is_some() {
|
||||
while __sym0.is_some() {
|
||||
let (__lookahead, __nt) = __result;
|
||||
match __nt {
|
||||
__Nonterminal::E(__nt) => {
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state14(__lookahead, __tokens, __sym0, __sym1));
|
||||
}
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym2 = &mut Some(__nt);
|
||||
__result = try!(__state14(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
let __sym1 = &mut Some(__nt);
|
||||
__result = try!(__state7(__lookahead, __tokens, __sym1));
|
||||
}
|
||||
_ => {
|
||||
return Ok((__lookahead, __nt));
|
||||
@ -458,40 +481,82 @@ mod __parse__S {
|
||||
}
|
||||
|
||||
// State 11
|
||||
// E = E (*) "-" T [")"]
|
||||
// E = E (*) "-" T ["-"]
|
||||
// T = "(" E (*) ")" [")"]
|
||||
// T = "(" E (*) ")" ["-"]
|
||||
// E = E "-" T (*) [EOF]
|
||||
// E = E "-" T (*) ["-"]
|
||||
//
|
||||
// "-" -> Shift(S12)
|
||||
// ")" -> Shift(S15)
|
||||
// "-" -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
// EOF -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
//
|
||||
pub fn __state11<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state11<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
__sym0: &mut Option<i32>,
|
||||
__sym1: &mut Option<Tok>,
|
||||
__sym2: &mut Option<i32>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(__tok @ Tok::Minus(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state12(__lookahead, __tokens, __sym1, __sym2));
|
||||
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((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
Some(__tok @ Tok::RParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state15(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action2(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 12
|
||||
// T = "(" E ")" (*) [EOF]
|
||||
// T = "(" E ")" (*) ["-"]
|
||||
//
|
||||
// EOF -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
// "-" -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
//
|
||||
pub fn __state12<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
__sym2: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// State 13
|
||||
// E = E "-" (*) T [")"]
|
||||
// E = E "-" (*) T ["-"]
|
||||
// T = (*) "(" E ")" [")"]
|
||||
@ -499,11 +564,13 @@ mod __parse__S {
|
||||
// T = (*) "Num" [")"]
|
||||
// T = (*) "Num" ["-"]
|
||||
//
|
||||
// "Num" -> Shift(S8)
|
||||
// "(" -> Shift(S6)
|
||||
// "Num" -> Shift(S9)
|
||||
// "(" -> Shift(S10)
|
||||
//
|
||||
// T -> S16
|
||||
pub fn __state12<__TOKENS: Iterator<Item=Tok>>(
|
||||
// T -> S15
|
||||
pub fn __state13<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
@ -514,12 +581,12 @@ mod __parse__S {
|
||||
Some(Tok::Num(__tok0)) => {
|
||||
let mut __sym2 = &mut Some((__tok0));
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state8(__lookahead, __tokens, __sym2));
|
||||
__result = try!(__state9(__lookahead, __tokens, __sym2));
|
||||
}
|
||||
Some(__tok @ Tok::LParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state6(__lookahead, __tokens, __sym2));
|
||||
__result = try!(__state10(__lookahead, __tokens, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
@ -530,7 +597,7 @@ mod __parse__S {
|
||||
match __nt {
|
||||
__Nonterminal::T(__nt) => {
|
||||
let __sym2 = &mut Some(__nt);
|
||||
__result = try!(__state16(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
__result = try!(__state15(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Ok((__lookahead, __nt));
|
||||
@ -540,50 +607,52 @@ mod __parse__S {
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 13
|
||||
// T = "(" E ")" (*) [EOF]
|
||||
// T = "(" E ")" (*) ["-"]
|
||||
// State 14
|
||||
// E = E (*) "-" T [")"]
|
||||
// E = E (*) "-" T ["-"]
|
||||
// T = "(" E (*) ")" [")"]
|
||||
// T = "(" E (*) ")" ["-"]
|
||||
//
|
||||
// EOF -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
// "-" -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
// "-" -> Shift(S13)
|
||||
// ")" -> Shift(S16)
|
||||
//
|
||||
pub fn __state13<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state14<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
__sym2: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
None => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
Some(__tok @ Tok::Minus(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state13(__lookahead, __tokens, __sym1, __sym2));
|
||||
}
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
Some(__tok @ Tok::RParen(..)) => {
|
||||
let mut __sym2 = &mut Some(__tok);
|
||||
let __lookahead = __tokens.next();
|
||||
__result = try!(__state16(__lookahead, __tokens, __sym0, __sym1, __sym2));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
return Ok(__result);
|
||||
}
|
||||
|
||||
// State 14
|
||||
// E = E "-" T (*) [EOF]
|
||||
// State 15
|
||||
// E = E "-" T (*) [")"]
|
||||
// E = E "-" T (*) ["-"]
|
||||
//
|
||||
// "-" -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
// EOF -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
// ")" -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
//
|
||||
pub fn __state14<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state15<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
@ -599,7 +668,7 @@ mod __parse__S {
|
||||
let __nt = super::__action2(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
}
|
||||
None => {
|
||||
Some(Tok::RParen(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
@ -612,71 +681,37 @@ mod __parse__S {
|
||||
}
|
||||
}
|
||||
|
||||
// State 15
|
||||
// T = "(" E ")" (*) [")"]
|
||||
// T = "(" E ")" (*) ["-"]
|
||||
//
|
||||
// ")" -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
// "-" -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
//
|
||||
pub fn __state15<__TOKENS: Iterator<Item=Tok>>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
__sym2: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (Option<Tok>, __Nonterminal);
|
||||
match __lookahead {
|
||||
Some(Tok::RParen(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// State 16
|
||||
// E = E "-" T (*) [")"]
|
||||
// E = E "-" T (*) ["-"]
|
||||
// T = "(" E ")" (*) [")"]
|
||||
// T = "(" E ")" (*) ["-"]
|
||||
//
|
||||
// "-" -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
// ")" -> Reduce(E = E, "-", T => ActionFn(2);)
|
||||
// ")" -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
// "-" -> Reduce(T = "(", E, ")" => ActionFn(5);)
|
||||
//
|
||||
pub fn __state16<__TOKENS: Iterator<Item=Tok>>(
|
||||
pub fn __state16<
|
||||
__TOKENS: Iterator<Item=Tok>,
|
||||
>(
|
||||
mut __lookahead: Option<Tok>,
|
||||
__tokens: &mut __TOKENS,
|
||||
__sym0: &mut Option<i32>,
|
||||
__sym1: &mut Option<Tok>,
|
||||
__sym2: &mut Option<i32>,
|
||||
__sym0: &mut Option<Tok>,
|
||||
__sym1: &mut Option<i32>,
|
||||
__sym2: &mut Option<Tok>,
|
||||
) -> Result<(Option<Tok>, __Nonterminal), Option<Tok>> {
|
||||
let mut __result: (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::__action2(__sym0, __sym1, __sym2);
|
||||
return Ok((__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::__action2(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::E(__nt)));
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
Some(Tok::Minus(..)) => {
|
||||
let __sym0 = __sym0.take().unwrap();
|
||||
let __sym1 = __sym1.take().unwrap();
|
||||
let __sym2 = __sym2.take().unwrap();
|
||||
let __nt = super::__action5(__sym0, __sym1, __sym2);
|
||||
return Ok((__lookahead, __Nonterminal::T(__nt)));
|
||||
}
|
||||
_ => {
|
||||
return Err(__lookahead);
|
||||
|
@ -11,15 +11,6 @@ pub enum Tok {
|
||||
Div,
|
||||
}
|
||||
|
||||
impl Tok {
|
||||
pub fn as_num(&self) -> i32 {
|
||||
match *self {
|
||||
Tok::Num(x) => x,
|
||||
_ => panic!("as_num invoked with non-number"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// simplest and stupidest possible tokenizer
|
||||
pub fn tokenize(s: &str) -> Vec<Tok> {
|
||||
let mut tokens = vec![];
|
||||
|
@ -104,14 +104,12 @@ impl<'ascent,'grammar,W:Write> RecursiveAscent<'ascent,'grammar,W> {
|
||||
fn write_start_fn(&mut self) -> io::Result<()> {
|
||||
let terminal_type = self.types.terminal_enum_type();
|
||||
rust!(self.out, "#[allow(non_snake_case)]");
|
||||
rust!(self.out, "pub fn parse_{}<{}TOKENS: IntoIterator<Item={}>>(",
|
||||
self.user_start_symbol, self.prefix, terminal_type);
|
||||
rust!(self.out, "{}tokens: {}TOKENS)", self.prefix, self.prefix);
|
||||
rust!(self.out, "-> Result<(Option<{}>, {}), Option<{}>>",
|
||||
terminal_type,
|
||||
self.types.nonterminal_type(self.start_symbol),
|
||||
terminal_type);
|
||||
rust!(self.out, "{{");
|
||||
rust!(self.out, "pub fn parse_{}<", self.user_start_symbol);
|
||||
rust!(self.out, " {}TOKENS: IntoIterator<Item={}>,", self.prefix, terminal_type);
|
||||
rust!(self.out, ">(");
|
||||
rust!(self.out, "{}tokens: {}TOKENS,", self.prefix, self.prefix);
|
||||
rust!(self.out, ") -> Result<(Option<{}>, {}), Option<{}>> {{",
|
||||
terminal_type, self.types.nonterminal_type(self.start_symbol), terminal_type);
|
||||
rust!(self.out, "let mut {}tokens = {}tokens.into_iter();", self.prefix, self.prefix);
|
||||
rust!(self.out, "let {}lookahead = {}tokens.next();", self.prefix, self.prefix);
|
||||
rust!(self.out, "match try!({}parse{}::{}state0({}lookahead, &mut {}tokens)) {{",
|
||||
@ -149,10 +147,10 @@ impl<'ascent,'grammar,W:Write> RecursiveAscent<'ascent,'grammar,W> {
|
||||
// set to true if goto actions are worth generating
|
||||
let mut fallthrough = false;
|
||||
|
||||
rust!(self.out, "pub fn {}state{}<{}TOKENS: Iterator<Item={}>>(",
|
||||
self.prefix, this_index.0, self.prefix, terminal_type);
|
||||
rust!(self.out, "mut {}lookahead: Option<{}>,",
|
||||
self.prefix, terminal_type);
|
||||
rust!(self.out, "pub fn {}state{}<", self.prefix, this_index.0);
|
||||
rust!(self.out, " {}TOKENS: Iterator<Item={}>,", self.prefix, terminal_type);
|
||||
rust!(self.out, ">(");
|
||||
rust!(self.out, "mut {}lookahead: Option<{}>,", self.prefix, terminal_type);
|
||||
rust!(self.out, "{}tokens: &mut {}TOKENS,", self.prefix, self.prefix);
|
||||
for i in 0..this_prefix.len() {
|
||||
rust!(self.out, "{}sym{}: &mut Option<{}>,",
|
||||
|
Loading…
x
Reference in New Issue
Block a user