#![allow(unused_variables)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(unused_parens)]
#![allow(unused_mut)]
#![allow(unused_imports)]
#![allow(unused_assignments)]
extern crate rustlr;
use rustlr::{RuntimeParser,RProduction,Stateaction,decode_action};
const SYMBOLS:[&'static str;10] = ["A","B","C","AB","S","a","b","c","START","EOF"];
const TABLE:[u64;30] = [30064967682,12885098497,25770000386,17180000257,38654902274,21475033090,65537,281479271940097,281505041809410,281500746842114,281513631744002,281496451874816,562988608126979,844454995361794,844463585296386,844433520459777,1125938561613826,1125929971679234,1125925677105152,1407404948455426,1407396358520834,1407413538390018,1407400653488130,1688888514969602,1688879925559296,1970354902007810,1970350607040514,1970363491942402,2251829878849538,2251838468784130,];
pub fn make_parser() -> RuntimeParser<bool,(i32,i32)>
{
let mut parser1:RuntimeParser<bool,(i32,i32)> = RuntimeParser::new(9,9);
let mut rule = RProduction::<bool,(i32,i32)>::new_skeleton("start");
rule = RProduction::<bool,(i32,i32)>::new_skeleton("S");
rule.Ruleaction = |parser|{ parser.stack.pop(); let ok:bool=parser.stack.pop().unwrap().value; let (an,bn)=parser.exstate; println!("counters at end: an {}, bn {}",an,bn); ok && bn==0 };
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("AB");
rule.Ruleaction = |parser|{ parser.stack.pop(); parser.stack.pop(); let (an,bn)=parser.exstate; if an!=bn {parser.abort("different numbers of a's and b's");} an==bn };
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("A");
rule.Ruleaction = |parser|{ parser.stack.pop(); parser.stack.pop(); parser.exstate.0+=1; true };
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("A");
rule.Ruleaction = |parser|{ return <bool>::default();};
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("B");
rule.Ruleaction = |parser|{ parser.stack.pop(); parser.stack.pop(); parser.exstate.1+=1; true };
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("B");
rule.Ruleaction = |parser|{ return <bool>::default();};
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("C");
rule.Ruleaction = |parser|{ parser.stack.pop(); parser.stack.pop(); parser.exstate.1-=1; true };
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("C");
rule.Ruleaction = |parser|{ return <bool>::default();};
parser1.Rules.push(rule);
rule = RProduction::<bool,(i32,i32)>::new_skeleton("START");
rule.Ruleaction = |parser|{ parser.stack.pop(); return <bool>::default();};
parser1.Rules.push(rule);
parser1.Errsym = "";
for i in 0..30 {
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;
}
fn load_extras(parser:&mut RuntimeParser<bool,(i32,i32)>)
{
}