rustlr 0.2.2

LR(1)/LALR(1) parser generator for rust
Documentation
//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