rustlr 0.3.93

Bottom-Up Parser Generator with Advanced Options
Documentation
//Parser generated by rustlr for grammar cppqid
    
#![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(unreachable_patterns)]
#![allow(irrefutable_let_patterns)]
use std::rc::Rc;
use std::cell::RefCell;
extern crate rustlr;
use rustlr::{Tokenizer,TerminalToken,ZCParser,ZCRProduction,Stateaction,decode_action};
use rustlr::{StrTokenizer,RawToken,LexSource};
use std::collections::{HashMap,HashSet};
use rustlr::LBox;
use crate::cppqid_ast;
use crate::cppqid_ast::*;

static SYMBOLS:[&'static str;13] = ["_WILDCARD_TOKEN_","COLONCOLON","LANGLE","RANGLE","ID","I","U","Q","T","N","START","EOF","NEWDELAYNT_N_6"];

static TABLE:[u64;63] = [25773015041,34359803905,30065164289,17180065792,51542884353,21475164161,281522221547522,281479271874562,844429225230338,844433523933184,844472174903298,1407422128193539,1688897104969730,3096229038915586,3096237628850178,3096233335259136,3377704015691778,3377712605626370,3659187582205954,6473958824869889,6473954529968129,6473950236246017,6473976006115329,6473945940754433,6473941644935168,6755412327596032,7036878713192450,7036887303127042,9007203551936512,9007212139642882,9288687117074434,9570174980390913,9570200750260225,9570183568687105,9570166388752384,10414587023851522,10414578435817472,10696062000693250,10977558452240385,10977549863944193,10977541272305664,10977575633813505,13229328202924032,13229336790302722,13792278157131776,13792321103462402,14073796080893954,14355275355324417,14355258172047361,14355249585848321,14355240992309248,14918221011091458,16325552947527680,16325595894513666,16607057986453505,16607049398812673,16607075167698945,16607053691551745,16607045104697345,16607040806518784,16888511491538944,17169977874776066,17170020824449026,];


fn _rrsemaction_0_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:U<'input>) -> I<'input> {  I::I_0(parser.lbx(0,_item0_)) }

fn _rrsemaction_1_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:Q<'input>) -> I<'input> {  I::I_1(parser.lbx(0,_item0_)) }

fn _rrsemaction_2_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:&'input str) -> U<'input> {  U::ID(_item0_) }

fn _rrsemaction_3_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:T<'input>) -> U<'input> {  U::U_3(parser.lbx(0,_item0_)) }

fn _rrsemaction_4_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:N<'input>, mut _item1_:U<'input>) -> Q<'input> {  Q(parser.lbx(0,_item0_),parser.lbx(1,_item1_),) }

fn _rrsemaction_5_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:U<'input>, mut _item1_:(), mut _item2_:N<'input>) -> N<'input> {  N::N_5(parser.lbx(0,_item0_),parser.lbx(2,_item2_)) }

fn _rrsemaction_6_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:U<'input>, mut _item1_:()) -> N<'input> {  N::N_6(parser.lbx(0,_item0_)) }

fn _rrsemaction_7_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:&'input str, mut _item1_:(), mut _item2_:I<'input>, mut _item3_:()) -> T<'input> {  T(_item0_,parser.lbx(2,_item2_),) }

fn _rrsemaction_8_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:I<'input>, mut _item1_:(), mut _item2_:(), mut _item3_:(), mut _item4_:()) -> () { <()>::default()}

fn _rrsemaction_9_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:U<'input>, mut _item1_:(), mut _item2_:N<'input>, mut _item_del3_9_5_:U<'input>) -> (N<'input>,U<'input>,) {  let _delvar_12_0_ = _rrsemaction_5_(parser,_item0_,_item1_,_item2_); (_delvar_12_0_,_item_del3_9_5_,) }

fn _rrsemaction_10_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:U<'input>, mut _item1_:(), mut _item_del2_10_6_:U<'input>) -> (N<'input>,U<'input>,) {  let _delvar_12_0_ = _rrsemaction_6_(parser,_item0_,_item1_); (_delvar_12_0_,_item_del2_10_6_,) }

fn _rrsemaction_11_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _delayitem0_4_24:(N<'input>,U<'input>,)) -> Q<'input> {  _rrsemaction_4_(parser,_delayitem0_4_24.0,_delayitem0_4_24.1) }

fn _rrsemaction_12_<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, mut _item0_:U<'input>, mut _item1_:(), mut _delayitem2_9_30:(N<'input>,U<'input>,)) -> (N<'input>,U<'input>,) {  _rrsemaction_9_(parser,_item0_,_item1_,_delayitem2_9_30.0,_delayitem2_9_30.1) }

pub fn make_parser<'input>() -> ZCParser<RetTypeEnum<'input>,()>
{
 let mut parser1:ZCParser<RetTypeEnum<'input>,()> = ZCParser::new(13,62);
 let mut rule;
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("I");
 rule.Ruleaction = |parser|{ let _item0_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()};  RetTypeEnum::Enumvariant_0(_rrsemaction_0_(parser,_item0_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("I");
 rule.Ruleaction = |parser|{ let _item0_ = if let RetTypeEnum::Enumvariant_15(_rr_15)=parser.popstack().value { _rr_15 } else {<Q<'input>>::default()};  RetTypeEnum::Enumvariant_0(_rrsemaction_1_(parser,_item0_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("U");
 rule.Ruleaction = |parser|{ let _item0_ = if let RetTypeEnum::Enumvariant_3(_rr_3)=parser.popstack().value { _rr_3 } else {<&'input str>::default()};  RetTypeEnum::Enumvariant_16(_rrsemaction_2_(parser,_item0_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("U");
 rule.Ruleaction = |parser|{ let _item0_ = if let RetTypeEnum::Enumvariant_17(_rr_17)=parser.popstack().value { _rr_17 } else {<T<'input>>::default()};  RetTypeEnum::Enumvariant_16(_rrsemaction_3_(parser,_item0_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("Q");
 rule.Ruleaction = |parser|{ let _item1_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_18(_rr_18)=parser.popstack().value { _rr_18 } else {<N<'input>>::default()};  RetTypeEnum::Enumvariant_15(_rrsemaction_4_(parser,_item0_,_item1_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("N");
 rule.Ruleaction = |parser|{ let _item2_ = if let RetTypeEnum::Enumvariant_18(_rr_18)=parser.popstack().value { _rr_18 } else {<N<'input>>::default()}; let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()};  RetTypeEnum::Enumvariant_18(_rrsemaction_5_(parser,_item0_,_item1_,_item2_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("N");
 rule.Ruleaction = |parser|{ let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()};  RetTypeEnum::Enumvariant_18(_rrsemaction_6_(parser,_item0_,_item1_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("T");
 rule.Ruleaction = |parser|{ let _item3_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item2_ = if let RetTypeEnum::Enumvariant_0(_rr_0)=parser.popstack().value { _rr_0 } else {<I<'input>>::default()}; let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_3(_rr_3)=parser.popstack().value { _rr_3 } else {<&'input str>::default()};  RetTypeEnum::Enumvariant_17(_rrsemaction_7_(parser,_item0_,_item1_,_item2_,_item3_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("START");
 rule.Ruleaction = |parser|{ let _item4_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item3_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item2_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_0(_rr_0)=parser.popstack().value { _rr_0 } else {<I<'input>>::default()};  RetTypeEnum::Enumvariant_20(_rrsemaction_8_(parser,_item0_,_item1_,_item2_,_item3_,_item4_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("NEWDELAYNT_N_6");
 rule.Ruleaction = |parser|{ let _item_del3_9_5_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()}; let _item2_ = if let RetTypeEnum::Enumvariant_18(_rr_18)=parser.popstack().value { _rr_18 } else {<N<'input>>::default()}; let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()};  RetTypeEnum::Enumvariant_23(_rrsemaction_9_(parser,_item0_,_item1_,_item2_,_item_del3_9_5_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("NEWDELAYNT_N_6");
 rule.Ruleaction = |parser|{ let _item_del2_10_6_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()}; let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()};  RetTypeEnum::Enumvariant_23(_rrsemaction_10_(parser,_item0_,_item1_,_item_del2_10_6_)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("Q");
 rule.Ruleaction = |parser|{ let _delayitem0_4_24 = if let RetTypeEnum::Enumvariant_23(_rr_23)=parser.popstack().value { _rr_23 } else {<(N<'input>,U<'input>,)>::default()};  RetTypeEnum::Enumvariant_15(_rrsemaction_11_(parser,_delayitem0_4_24)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum<'input>,()>::new_skeleton("NEWDELAYNT_N_6");
 rule.Ruleaction = |parser|{ let _delayitem2_9_30 = if let RetTypeEnum::Enumvariant_23(_rr_23)=parser.popstack().value { _rr_23 } else {<(N<'input>,U<'input>,)>::default()}; let _item1_ = if let RetTypeEnum::Enumvariant_20(_rr_20)=parser.popstack().value { _rr_20 } else {<()>::default()}; let _item0_ = if let RetTypeEnum::Enumvariant_16(_rr_16)=parser.popstack().value { _rr_16 } else {<U<'input>>::default()};  RetTypeEnum::Enumvariant_23(_rrsemaction_12_(parser,_item0_,_item1_,_delayitem2_9_30)) };
 parser1.Rules.push(rule);
 parser1.Errsym = "";

 for i in 0..63 {
   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

pub fn parse_with<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, lexer:&mut cppqidlexer<'input>) -> Result<I<'input>,I<'input>>
{
  lexer.shared_state = Rc::clone(&parser.shared_state);
  if let RetTypeEnum::Enumvariant_0(_xres_) = parser.parse(lexer) {
     if !parser.error_occurred() {Ok(_xres_)} else {Err(_xres_)}
  } else { Err(<I<'input>>::default())}
}//parse_with public function

pub fn parse_train_with<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>, lexer:&mut cppqidlexer<'input>, parserpath:&str) -> Result<I<'input>,I<'input>>
{
  lexer.shared_state = Rc::clone(&parser.shared_state);
  if let RetTypeEnum::Enumvariant_0(_xres_) = parser.parse_train(lexer,parserpath) {
     if !parser.error_occurred() {Ok(_xres_)} else {Err(_xres_)}
  } else { Err(<I<'input>>::default())}
}//parse_train_with public function

//Enum for return values 
pub enum RetTypeEnum<'input> {
  Enumvariant_2((usize,usize)),
  Enumvariant_17(T<'input>),
  Enumvariant_18(N<'input>),
  Enumvariant_0(I<'input>),
  Enumvariant_15(Q<'input>),
  Enumvariant_20(()),
  Enumvariant_3(&'input str),
  Enumvariant_16(U<'input>),
  Enumvariant_23((N<'input>,U<'input>,)),
}
impl<'input> Default for RetTypeEnum<'input> { fn default()->Self {RetTypeEnum::Enumvariant_0(<I<'input>>::default())} }


// Lexical Scanner using RawToken and StrTokenizer
pub struct cppqidlexer<'input> {
   stk: StrTokenizer<'input>,
   keywords: HashSet<&'static str>,
   lexnames: HashMap<&'static str,&'static str>,
   shared_state: Rc<RefCell<()>>,
}
impl<'input> cppqidlexer<'input> 
{
  pub fn from_str(s:&'input str) -> cppqidlexer<'input>  {
    Self::new(StrTokenizer::from_str(s))
  }
  pub fn from_source(s:&'input LexSource<'input>) -> cppqidlexer<'input>  {
    Self::new(StrTokenizer::from_source(s))
  }
  pub fn new(mut stk:StrTokenizer<'input>) -> cppqidlexer<'input> {
    let mut lexnames = HashMap::with_capacity(64);
    let mut keywords = HashSet::with_capacity(64);
    let shared_state = Rc::new(RefCell::new(<()>::default()));
    for kw in ["_WILDCARD_TOKEN_",] {keywords.insert(kw);}
    for c in ['<','>',] {stk.add_single(c);}
    for d in ["::",] {stk.add_double(d);}
    for d in [] {stk.add_triple(d);}
    for (k,v) in [(r"::","COLONCOLON"),(r"<","LANGLE"),(r">","RANGLE"),] {lexnames.insert(k,v);}
    cppqidlexer {stk,keywords,lexnames,shared_state}
  }
}
impl<'input> Tokenizer<'input,RetTypeEnum<'input>> for cppqidlexer<'input>
{
   fn nextsym(&mut self) -> Option<TerminalToken<'input,RetTypeEnum<'input>>> {
    let tokopt = self.stk.next_token();
    if let None = tokopt {return None;}
    let token = tokopt.unwrap();
    match token.0 {
      RawToken::Alphanum(sym) if self.keywords.contains(sym) => {
        let truesym = self.lexnames.get(sym).unwrap_or(&sym);
        Some(TerminalToken::from_raw(token,truesym,<RetTypeEnum<'input>>::default()))
      },
      RawToken:: Alphanum(n)  => Some(TerminalToken::from_raw(token,"ID",RetTypeEnum::Enumvariant_3( n
))),
      RawToken::Symbol(s) if self.lexnames.contains_key(s) => {
        let tname = self.lexnames.get(s).unwrap();
        Some(TerminalToken::from_raw(token,tname,<RetTypeEnum<'input>>::default()))
      },
      RawToken::Symbol(s) => Some(TerminalToken::from_raw(token,s,<RetTypeEnum<'input>>::default())),
      RawToken::Alphanum(s) => Some(TerminalToken::from_raw(token,s,<RetTypeEnum<'input>>::default())),
      _ => Some(TerminalToken::from_raw(token,"<LexicalError>",<RetTypeEnum<'input>>::default())),
    }
  }
   fn linenum(&self) -> usize {self.stk.line()}
   fn column(&self) -> usize {self.stk.column()}
   fn position(&self) -> usize {self.stk.current_position()}
   fn current_line(&self) -> &str {self.stk.current_line()}
   fn get_line(&self,i:usize) -> Option<&str> {self.stk.get_line(i)}
   fn get_slice(&self,s:usize,l:usize) -> &str {self.stk.get_slice(s,l)}
   fn transform_wildcard(&self,t:TerminalToken<'input,RetTypeEnum<'input>>) -> TerminalToken<'input,RetTypeEnum<'input>> { TerminalToken::new(t.sym,RetTypeEnum::Enumvariant_2((self.stk.previous_position(),self.stk.current_position())),t.line,t.column) }
}//impl Tokenizer

fn load_extras<'input>(parser:&mut ZCParser<RetTypeEnum<'input>,()>)
{
}//end of load_extras: don't change this line as it affects augmentation