//Parser generated by rustlr
#![allow(unused_variables)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(unused_parens)]
#![allow(unused_mut)]
#![allow(unused_imports)]
#![allow(unused_assignments)]
#![allow(irrefutable_let_patterns)]
extern crate rustlr;
use rustlr::{ZCParser,ZCRProduction,Stateaction,decode_action};
use crate::exprtrees::*;
use crate::exprtrees::Expr::*;
use rustlr::{LBox};
const SYMBOLS:[&'static str;12] = ["E","ES","+","-","*","/","(",")",";","int","START","EOF"];
const TABLE:[u64;99] = [4295098369,65537,12885164032,25770131456,38654902272,281509337038848,281492157038592,281483567169536,281496452202496,281487862005760,562997198061571,562962838585344,562975723552768,562988608323584,562949954142209,844454994903042,844433520066562,844442110001154,844446404968450,844437815033858,844459289870338,1125912792006656,1125925676974080,1125938561744896,1125899907629057,1407413538455552,1407400653684736,1407387768717312,1407374884405249,1688849861181441,1688862745427968,1688888515166208,1688875630395392,1970350607106048,1970324837957633,1970363491876864,1970337722138624,2251799814733825,2251825583816704,2251838468587520,2251812698849280,2533300560658434,2533313445560322,2533287675756546,2533322035494914,2814775537238016,2814788422008832,2814762652270592,2814749768220673,3096237629112320,3096246219309056,3096259104735232,3096233334276096,3096241924145152,3377734080593922,3377721196019712,3377708310790146,3377712605757442,3377729785626626,3377716900855808,3659183287697408,3659187582533632,3659196172730368,3659204763254784,3659191877566464,3940658264014850,3940679738851330,3940671149441024,3940684033818626,3940666854277120,3940662558982146,4222137535823874,4222154715693058,4222146125758466,4222159010660354,4222133240856578,4222141830791170,4503612512337922,4503633987174402,4503621102862336,4503629692207106,4503608217370626,4503616807698432,4785087489179650,4785096079114242,4785104669048834,4785108964016130,4785083194212354,4785091784146946,5066575351119874,5066562466217986,5066596825956354,5066588236021762,5348058917634050,5348041737764866,5348054622666754,5348037442797570,5348046032732162,5348033147830274,];
pub fn make_parser() -> ZCParser<Expr,Expr>
{
let mut parser1:ZCParser<Expr,Expr> = ZCParser::new(10,20);
let mut rule = ZCRProduction::<Expr,Expr>::new_skeleton("start");
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _m_ = parser.popstack();
if let (m,)=(_m_.value,) { m /* should be a Val(n) */} else {parser.bad_pattern("(m,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _e2_ = parser.popstack(); let _popped_1 = parser.popstack(); let _e1_ = parser.popstack();
if let (e2,e1,)=(_e2_.value,_e1_.value,) { Plus(makelbox!(_e1_,e1),makelbox!(_e2_,e2)) } else {parser.bad_pattern("(e2,e1,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _e2_ = parser.popstack(); let _popped_1 = parser.popstack(); let _e1_ = parser.popstack();
if let (e2,e1,)=(_e2_.value,_e1_.value,) { Minus(parser.lb(e1),parser.lb(e2)) } else {parser.bad_pattern("(e2,e1,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _e2_ = parser.popstack(); let _popped_1 = parser.popstack(); let _e1_ = parser.popstack();
if let (e2,e1,)=(_e2_.value,_e1_.value,) { Divide(parser.lb(e1),parser.lb(e2)) } else {parser.bad_pattern("(e2,e1,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _e2_ = parser.popstack(); let _popped_1 = parser.popstack(); let _e1_ = parser.popstack();
if let (e2,e1,)=(_e2_.value,_e1_.value,) { Times(parser.lb(e1),parser.lb(e2)) } else {parser.bad_pattern("(e2,e1,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _e_ = parser.popstack(); let _popped_0 = parser.popstack();
if let (e,)=(_e_.value,) { Negative(makelbox!(_e_,e)) } else {parser.bad_pattern("(e,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("E");
rule.Ruleaction = |parser|{ let _popped_2 = parser.popstack(); let _e_ = parser.popstack(); let _popped_0 = parser.popstack();
if let (e,)=(_e_.value,) { e } else {parser.bad_pattern("(e,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("ES");
rule.Ruleaction = |parser|{ let _popped_1 = parser.popstack(); let _n_ = parser.popstack();
if let (n,)=(_n_.value,) { Seq(vec![parser.lb(n)]) } else {parser.bad_pattern("(n,)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("ES");
rule.Ruleaction = |parser|{ let _popped_2 = parser.popstack(); let _e_ = parser.popstack(); let _@Seq(mut v)_ = parser.popstack();
if let (e,Seq(mut v),)=(_e_.value,_@Seq(mut v)_.value,) {
v.push(parser.lb(e));
Seq(v)
} else {parser.bad_pattern("(e,Seq(mut v),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<Expr,Expr>::new_skeleton("START");
rule.Ruleaction = |parser|{ let _popped_0 = parser.popstack(); <Expr>::default()};
parser1.Rules.push(rule);
parser1.Errsym = "";
parser1.resynch.insert(";");
for i in 0..99 {
let symi = ((TABLE[i] & 0x0000ffff00000000) >> 32) as usize;
let sti = ((TABLE[i] & 0xffff000000000000) >> 48) as usize;
parser1.RSM[sti].insert(SYMBOLS[symi],decode_action(TABLE[i]));
}
for s in SYMBOLS { parser1.Symset.insert(s); }
load_extras(&mut parser1);
return parser1;
} //make_parser
fn load_extras(parser:&mut ZCParser<Expr,Expr>)
{
}//end of load_extras: don't change this line as it affects augmentation