//Parser generated by rustlr for grammar brackets
#![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};
use rustlr::charscanner;
//anything on a ! line is injected verbatim into the generated parser
fn main() {
let argv:Vec<String> = std::env::args().collect(); // command-line args
let input = &argv[1];
let mut parser1 = make_parser();
let mut lexer1 = charscanner::new(input,true);
lexer1.modify = |c| { match c { //modify symbols to grammar terminal names
"{" => "LBRACE",
"}" => "RBRACE",
_ if c.chars().next().unwrap().is_whitespace() => "Whitespace",
_ => c
}};
let result = parser1.parse(&mut lexer1);
if !parser1.error_occurred() {
println!("parsed successfully with result {:?}",&result);
}
else {println!("parsing failed; partial result is {:?}",&result);}
}//main
const SYMBOLS:[&'static str;12] = ["E","S","WS","(",")","[","]","LBRACE","RBRACE","Whitespace","START","EOF"];
const TABLE:[u64;92] = [38655033346,47244967938,8590000129,4295098369,30065098754,12885229570,21475164162,281487861809154,281513631612928,281505041678338,281522221547522,281496451743746,281500746711042,281509336645634,281492156776450,562971428519936,562962838650880,562997198061571,562949953880065,562980018585600,844454995296258,844459290263554,844472175165442,844463585230850,844446405361666,844442110394370,844437815427074,844450700328962,1125938561875970,1125929971941378,1125908496842753,1125912792072194,1125904202334209,1125921382006786,1125925676974082,1407413538586626,1407404948652034,1407379179110401,1407387768782850,1407396358717442,1407392063750146,1407383473553409,1688854155886593,1688888515297282,1688862745493506,1688858450264065,1688871335428098,1688884220329986,1688879925362690,1970346312073218,1970337722138626,1970359196975106,1970350607040514,1970354902007810,1970372081876994,1970342017105922,2251825584209920,2251799814144001,2251821288783872,2251829878849536,2251812698914816,2533287675625472,2533296265494528,2533291971051520,2533274790854657,2533304855560192,2814771242205184,2814779832270848,2814749767565313,2814762652336128,2814784127696896,3096237628784642,3096271988523010,3096250513686530,3096259103621122,3096241923751938,3096254808653826,3096246218719234,3377729785298946,3377746965168130,3377712605429762,3377721195364354,3377716900397058,3377734080266242,3377725490331650,3659191877238786,3659196172206082,3659204762140674,3659209057107970,3659200467173378,3659187582271490,3659221942009858,];
pub fn make_parser() -> ZCParser<(u32,u32,u32),(u32,u32,u32)>
{
let mut parser1:ZCParser<(u32,u32,u32),(u32,u32,u32)> = ZCParser::new(8,14);
let mut rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("start");
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("E");
rule.Ruleaction = |parser|{ let mut _item2_ = parser.popstack(); let mut _item1_ = parser.popstack(); let mut _item0_ = parser.popstack();
if let ((a,b,c),)=(_item1_.value,) { (a+1,b,c)} else {parser.bad_pattern("((a,b,c),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("E");
rule.Ruleaction = |parser|{ let mut _item2_ = parser.popstack(); let mut _item1_ = parser.popstack(); let mut _item0_ = parser.popstack();
if let ((a,b,c),)=(_item1_.value,) { (a,b+1,c)} else {parser.bad_pattern("((a,b,c),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("E");
rule.Ruleaction = |parser|{ let mut _item2_ = parser.popstack(); let mut _item1_ = parser.popstack(); let mut _item0_ = parser.popstack();
if let ((a,b,c),)=(_item1_.value,) { (a,b,c+1)} else {parser.bad_pattern("((a,b,c),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("S");
rule.Ruleaction = |parser|{ let mut _item0_ = parser.popstack(); (0,0,0) };
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("S");
rule.Ruleaction = |parser|{ let mut _item1_ = parser.popstack(); let mut _item0_ = parser.popstack();
if let ((p,q,r),(a,b,c),)=(_item1_.value,_item0_.value,) { (a+p,b+q,c+r)} else {parser.bad_pattern("((p,q,r),(a,b,c),)")} };
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("WS");
rule.Ruleaction = |parser|{ <(u32,u32,u32)>::default()};
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("WS");
rule.Ruleaction = |parser|{ let mut _item1_ = parser.popstack(); let mut _item0_ = parser.popstack(); <(u32,u32,u32)>::default()};
parser1.Rules.push(rule);
rule = ZCRProduction::<(u32,u32,u32),(u32,u32,u32)>::new_skeleton("START");
rule.Ruleaction = |parser|{ let mut _item0_ = parser.popstack(); <(u32,u32,u32)>::default()};
parser1.Rules.push(rule);
parser1.Errsym = "";
parser1.resynch.insert("Whitespace");
for i in 0..92 {
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<(u32,u32,u32),(u32,u32,u32)>)
{
}//end of load_extras: don't change this line as it affects augmentation