//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(dead_code)]
#![allow(irrefutable_let_patterns)]
extern crate rustlr;
use rustlr::{Tokenizer,TerminalToken,ZCParser,ZCRProduction,Stateaction,decode_action,LBox,lbdown};
use crate::exprtrees::*;
use crate::exprtrees::Expr::*;
const SYMBOLS:[&'static str;12] = ["E","ES","+","-","*","/","(",")",";","int","START","EOF"];
const TABLE:[u64;99] = [12885098496,38654967808,4295294977,65537,25769934848,281483567300608,281487862071296,281509336842240,281492157104128,281496452136960,562988608389120,562975723356160,562949954142209,562962838519808,844450700066816,844463585099776,844424930918401,844437815230464,1125908496777218,1125934266580994,1125929971613698,1125921381679106,1125912791744514,1125917086711810,1407374884405249,1407400653488128,1407422128193539,1407413538521088,1407387768651776,1688888515428354,1688875630526466,1688862745624578,1688897105362946,1970324837892097,1970350606909440,1970363491942400,1970337722073088,2251799814668289,2251812698783744,2251838468653056,2251825583620096,2533300560330752,2533287675494400,2533313445363712,2533274791444481,2814788422074368,2814749768220673,2814762652205056,2814775537041408,3096241924210688,3096246219243520,3096237629177856,3096233334407168,3096254809767936,3377712605757442,3377734080593922,3377729785626626,3377708310790146,3377716900921344,3377721195954176,3659191877632000,3659196172664832,3659209058222080,3659183287828480,3659187582599168,3940679738851330,3940671149375488,3940666854342656,3940662558982146,3940684033818626,3940658264014850,4222133240856578,4222154715693058,4222159010660354,4222146125758466,4222137535823874,4222141830791170,4503616807436290,4503629692338178,4503621102403586,4503612512468994,4503633987305474,4503608217501698,4785083194081282,4785091784474624,4785108963885058,4785096079507456,4785087489048578,4785104668917762,5066579645956098,5066562466086914,5066583940923394,5066571056021506,5066566761054210,5066558171119618,5348050327830530,5348063212732418,5348037442928642,5348071802667010,];
fn _semaction_for_0_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut m = lbdown!(parser.popstack().value,Expr); *m };
fn _semaction_for_1_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut e2 = lbdown!(parser.popstack().value,Expr); let mut _item1_ = parser.popstack().value; let mut e1 = lbdown!(parser.popstack().value,Expr); Plus(e1,e2) };
fn _semaction_for_2_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut e2 = lbdown!(parser.popstack().value,Expr); let mut _item1_ = parser.popstack().value; let mut e1 = lbdown!(parser.popstack().value,Expr); Minus(e1,e2) };
fn _semaction_for_3_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut e2 = lbdown!(parser.popstack().value,Expr); let mut _item1_ = parser.popstack().value; let mut e1 = lbdown!(parser.popstack().value,Expr); Divide(e1,e2)) };
fn _semaction_for_4_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut e2 = lbdown!(parser.popstack().value,Expr); let mut _item1_ = parser.popstack().value; let mut e1 = lbdown!(parser.popstack().value,Expr); Times(e1,e2) };
fn _semaction_for_5_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut e = lbdown!(parser.popstack().value,Expr); let mut _item0_ = parser.popstack().value; Negative(e) };
fn _semaction_for_6_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Expr {
let mut _item2_ = parser.popstack().value; let mut e = lbdown!(parser.popstack().value,Expr); let mut _item0_ = parser.popstack().value; e };
fn _semaction_for_7_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Vec<LBox<Expr>> {
let mut _item1_ = parser.popstack().value; let mut n = lbdown!(parser.popstack().value,Expr); vec![n] };
fn _semaction_for_8_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> Vec<LBox<Expr>> {
let mut _item2_ = parser.popstack().value; let mut e = lbdown!(parser.popstack().value,Expr); let mut es = lbdown!(parser.popstack().value,Vec<LBox<Expr>>);
if let (Seq(v),)=(&mut es,) {
v.push(e) );
es
} else {parser.bad_pattern("(Seq(v),)")} };
fn _semaction_for_9_(parser:&mut ZCParser<LBox<dyn Any>,i64>) -> LBox<dyn Any> {
let mut _item0_ = lbdown!(parser.popstack().value,Vec<LBox<Expr>>); <LBox<dyn Any>>::default()};
pub fn create_parser<'t>(tokenizer:&'t mut dyn Tokenizer<'t,LBox<dyn Any>>) -> ZCParser<'t,LBox<dyn Any>,i64>
{
let mut parser1,ZCParser<LBox<dyn Any>,i64> = ZCParser::new(10,20,tokenizer);
let mut rule = ZCRProduction::<LBox<dyn Any>,i64>::new_skeleton("start",0);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",1);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_0_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",3);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_1_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",3);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_2_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",3);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_3_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",3);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_4_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",2);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_5_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("E",3);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_6_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("ES",2);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_7_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("ES",3);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_8_(&mut parer)) };
parser1.Rules.push(rule);
rule = ZCProduction::<LBox<dyn Any>,i64>::new_skeleton("START",1);
rule.Ruleaction = |parser|{ parser.lba(_semaction_for_9_(&mut parer)) };
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<LBox<dyn Any>,i64>)
{
}//end of load_extras: don't change this line as it affects augmentation