//Parser generated by rustlr for grammar zc1
#![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(dead_code)]
#![allow(irrefutable_let_patterns)]
extern crate rustlr;
use rustlr::{Tokenizer,TerminalToken,ZCParser,ZCRProduction,Stateaction,decode_action};
const SYMBOLS:[&'static str;10] = ["E","T","F","+","*","(",")","num","START","EOF"];
const TABLE:[u64;45] = [8590065665,30064967680,21475164160,4295032833,262145,281492156973056,281513631481858,281500746579970,281487861678082,562967133487106,562988608323586,562975723421698,562962838519810,844437815361538,844463585165314,844442110328834,844450700263426,1125938561548291,1125912792203264,1407374884077569,1407404948520960,1407396358717440,1407383473618945,1407379178586113,1688879925231616,1688871335428096,1688858450788353,1970354901942272,1970333427040257,1970329132597249,1970346312138752,2251825584209920,2251812699045888,2533291970396162,2533287675428866,2533300560330754,2533313445232642,2814762652008450,2814788421812226,2814766947368960,2814775536910338,3096241923948546,3096263398785026,3096250513883138,3096237628981250,];
pub fn make_parser() -> ZCParser<i32,i32>
{
let mut parser1:ZCParser<i32,i32> = ZCParser::new(7,12);
let mut rule = ZCRProduction::<i32,i32>::new_skeleton("start");
rule = ZCRProduction::<i32,i32>::new_skeleton("E");
rule.Ruleaction = |parser|{ let mut t = parser.popstack(); let mut _item1_ = parser.popstack(); let mut e = parser.popstack(); e.value + t.value };
parser1.Rules.push(rule);
rule = ZCRProduction::<i32,i32>::new_skeleton("E");
rule.Ruleaction = |parser|{ let mut t = parser.popstack(); t.value };
parser1.Rules.push(rule);
rule = ZCRProduction::<i32,i32>::new_skeleton("T");
rule.Ruleaction = |parser|{ let mut _item2_ = parser.popstack(); let mut _item1_ = parser.popstack(); let mut _item0_ = parser.popstack();
if let ((f),(t),)=(_item2_.value,_item0_.value,) { t*f } else {parser.bad_pattern("((f),(t),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<i32,i32>::new_skeleton("T");
rule.Ruleaction = |parser|{ let mut _item0_ = parser.popstack();
if let ((f),)=(_item0_.value,) { f } else {parser.bad_pattern("((f),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<i32,i32>::new_skeleton("F");
rule.Ruleaction = |parser|{ let mut _item2_ = parser.popstack(); let mut e = parser.popstack(); let mut _item0_ = parser.popstack(); e.value };
parser1.Rules.push(rule);
rule = ZCRProduction::<i32,i32>::new_skeleton("F");
rule.Ruleaction = |parser|{ let mut n = parser.popstack(); n.value };
parser1.Rules.push(rule);
rule = ZCRProduction::<i32,i32>::new_skeleton("START");
rule.Ruleaction = |parser|{ let mut _item0_ = parser.popstack(); <i32>::default()};
parser1.Rules.push(rule);
parser1.Errsym = "";
for i in 0..45 {
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<i32,i32>)
{
}//end of load_extras: don't change this line as it affects augmentation