rustlr 0.2.93

LR(1)/LALR(1) parser generator for rust
Documentation
//Parser generated by rustlr for grammar re
    
#![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::marker::PhantomData;
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::re_ast;
use crate::re_ast::*;

static SYMBOLS:[&'static str;15] = ["_WILDCARD_TOKEN_","ID","VAL","#",";",",","HASH","E","SEQNT_1_1","NEWNTSEQNT_1_1_2","SEQNT_4_3","NEWNTSEQNT_4_3_5","NEWNTVAL_7","START","EOF"];

static TABLE:[u64;31] = [30064967681,4295098368,34360000513,38654771201,281535106580482,281509336842241,281483566972930,281479271809024,281522221678593,562967133749248,844485059674115,1125960036515842,1125908496908290,1125904201940994,1407383474077696,1407435013554178,1407417833750529,1407426423816193,1688854155427842,1688858450395138,1688909990002690,1970384966582274,1970329132007426,1970333426974722,2251808404013058,2251859943620610,2533334920462338,2533296265953280,2814809897238530,3096233334013954,3096284873621506,];


fn _semaction_rule_0_(parser:&mut ZCParser<RetTypeEnum,()>) -> HASH {
let mut _item0_ = if let RetTypeEnum::Enumvariant_1(_x_1)=parser.popstack().value { _x_1 } else {<()>::default()}; HASH {} }

fn _semaction_rule_1_(parser:&mut ZCParser<RetTypeEnum,()>) -> String {
let mut _item1_ = if let RetTypeEnum::Enumvariant_1(_x_1)=parser.popstack().value { _x_1 } else {<()>::default()}; let mut _item0_ = if let RetTypeEnum::Enumvariant_2(_x_2)=parser.popstack().value { _x_2 } else {<String>::default()};  _item0_ }

fn _semaction_rule_2_(parser:&mut ZCParser<RetTypeEnum,()>) -> Vec<LBox<String>> {
let mut _item0_ = if let RetTypeEnum::Enumvariant_2(_x_2)=parser.popstack().value { _x_2 } else {<String>::default()};  vec![parser.lbx(0,_item0_)] }

fn _semaction_rule_3_(parser:&mut ZCParser<RetTypeEnum,()>) -> Vec<LBox<String>> {
let mut _item1_ = if let RetTypeEnum::Enumvariant_2(_x_2)=parser.popstack().value { _x_2 } else {<String>::default()}; let mut _item0_ = if let RetTypeEnum::Enumvariant_6(_x_6)=parser.popstack().value { _x_6 } else {<Vec<LBox<String>>>::default()};  _item0_.push(parser.lbx(1,_item1_)); _item0_ }

fn _semaction_rule_4_(parser:&mut ZCParser<RetTypeEnum,()>) -> i64 {
let mut _item1_ = if let RetTypeEnum::Enumvariant_1(_x_1)=parser.popstack().value { _x_1 } else {<()>::default()}; let mut _item0_ = if let RetTypeEnum::Enumvariant_3(_x_3)=parser.popstack().value { _x_3 } else {<i64>::default()};  _item0_ }

fn _semaction_rule_5_(parser:&mut ZCParser<RetTypeEnum,()>) -> Vec<LBox<i64>> {
 Vec::new() }

fn _semaction_rule_6_(parser:&mut ZCParser<RetTypeEnum,()>) -> Vec<LBox<i64>> {
let mut _item1_ = if let RetTypeEnum::Enumvariant_3(_x_3)=parser.popstack().value { _x_3 } else {<i64>::default()}; let mut _item0_ = if let RetTypeEnum::Enumvariant_7(_x_7)=parser.popstack().value { _x_7 } else {<Vec<LBox<i64>>>::default()};  _item0_.push(parser.lbx(1,_item1_)); _item0_ }

fn _semaction_rule_7_(parser:&mut ZCParser<RetTypeEnum,()>) -> Option<LBox<i64>> {
 None }

fn _semaction_rule_8_(parser:&mut ZCParser<RetTypeEnum,()>) -> Option<LBox<i64>> {
let mut _item0_ = if let RetTypeEnum::Enumvariant_3(_x_3)=parser.popstack().value { _x_3 } else {<i64>::default()};  Some(parser.lbx(0,_item0_)) }

fn _semaction_rule_9_(parser:&mut ZCParser<RetTypeEnum,()>) -> E {
let mut c = if let RetTypeEnum::Enumvariant_8(_x_8)=parser.popstack().value { _x_8 } else {<Option<LBox<i64>>>::default()}; let mut b = if let RetTypeEnum::Enumvariant_7(_x_7)=parser.popstack().value { _x_7 } else {<Vec<LBox<i64>>>::default()}; let mut a = if let RetTypeEnum::Enumvariant_6(_x_6)=parser.popstack().value { _x_6 } else {<Vec<LBox<String>>>::default()}; E {a,b,c,} }

fn _semaction_rule_10_(parser:&mut ZCParser<RetTypeEnum,()>) -> E {
let mut _item0_ = if let RetTypeEnum::Enumvariant_0(_x_0)=parser.popstack().value { _x_0 } else {<E>::default()}; <E>::default()}

pub fn make_parser() -> ZCParser<RetTypeEnum,()>
{
 let mut parser1:ZCParser<RetTypeEnum,()> = ZCParser::new(11,12);
 let mut rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("start");
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("HASH");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_4(_semaction_rule_0_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("SEQNT_1_1");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_2(_semaction_rule_1_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("NEWNTSEQNT_1_1_2");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_6(_semaction_rule_2_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("NEWNTSEQNT_1_1_2");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_6(_semaction_rule_3_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("SEQNT_4_3");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_3(_semaction_rule_4_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("NEWNTSEQNT_4_3_5");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_7(_semaction_rule_5_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("NEWNTSEQNT_4_3_5");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_7(_semaction_rule_6_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("NEWNTVAL_7");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_8(_semaction_rule_7_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("NEWNTVAL_7");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_8(_semaction_rule_8_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("E");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_0(_semaction_rule_9_(parser)) };
 parser1.Rules.push(rule);
 rule = ZCRProduction::<RetTypeEnum,()>::new_skeleton("START");
 rule.Ruleaction = |parser|{  RetTypeEnum::Enumvariant_0(_semaction_rule_10_(parser)) };
 parser1.Rules.push(rule);
 parser1.Errsym = "";

 for i in 0..31 {
   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<'t>(parser:&mut ZCParser<RetTypeEnum,()>, lexer:&mut relexer<'t>) -> Result<E,E>
{
  if let RetTypeEnum::Enumvariant_0(_xres_) = parser.parse(lexer) {
     if !parser.error_occurred() {Ok(_xres_)} else {Err(_xres_)}
  } else { Err(<E>::default())}
}//parse_with public function

pub fn parse_train_with<'t>(parser:&mut ZCParser<RetTypeEnum,()>, lexer:&mut relexer<'t>, parserpath:&str) -> Result<E,E>
{
  if let RetTypeEnum::Enumvariant_0(_xres_) = parser.parse_train(lexer,parserpath) {
     if !parser.error_occurred() {Ok(_xres_)} else {Err(_xres_)}
  } else { Err(<E>::default())}
}//parse_train_with public function

//Enum for return values 
pub enum RetTypeEnum {
  Enumvariant_2(String),
  Enumvariant_4(HASH),
  Enumvariant_0(E),
  Enumvariant_7(Vec<LBox<i64>>),
  Enumvariant_3(i64),
  Enumvariant_6(Vec<LBox<String>>),
  Enumvariant_1(()),
  Enumvariant_8(Option<LBox<i64>>),
}
impl Default for RetTypeEnum { fn default()->Self {RetTypeEnum::Enumvariant_0(<E>::default())} }


// Lexical Scanner using RawToken and StrTokenizer
pub struct relexer<'t> {
   stk: StrTokenizer<'t>,
   keywords: HashSet<&'static str>,
   lexnames: HashMap<&'static str,&'static str>,
}
impl<'t> relexer<'t> 
{
  pub fn from_str(s:&'t str) -> relexer<'t>  {
    Self::new(StrTokenizer::from_str(s))
  }
  pub fn from_source(s:&'t LexSource<'t>) -> relexer<'t>  {
    Self::new(StrTokenizer::from_source(s))
  }
  pub fn new(mut stk:StrTokenizer<'t>) -> relexer<'t> {
    let mut lexnames = HashMap::with_capacity(64);
    let mut keywords = HashSet::with_capacity(64);
    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 [] {lexnames.insert(k,v);}
    relexer {stk,keywords,lexnames}
  }
}
impl<'t> Tokenizer<'t,RetTypeEnum> for relexer<'t>
{
   fn nextsym(&mut self) -> Option<TerminalToken<'t,RetTypeEnum>> {
    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>::default()))
      },
      RawToken::Num(n) => Some(TerminalToken::from_raw(token,"VAL",RetTypeEnum::Enumvariant_3(n))),
      RawToken::Alphanum(s) => Some(TerminalToken::from_raw(token,"ID",RetTypeEnum::Enumvariant_2(s.to_owned()))),
      RawToken::Symbol(s) if self.lexnames.contains_key(s) => {
        let tname = self.lexnames.get(s).unwrap();
        Some(TerminalToken::from_raw(token,tname,<RetTypeEnum>::default()))
      },
      RawToken::Symbol(s) => Some(TerminalToken::from_raw(token,s,<RetTypeEnum>::default())),
      RawToken::Alphanum(s) => Some(TerminalToken::from_raw(token,s,<RetTypeEnum>::default())),
      _ => Some(TerminalToken::from_raw(token,"<LexicalError>",<RetTypeEnum>::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)}
}//impl Tokenizer

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