#![allow(clippy::enum_variant_names)]
#![allow(clippy::large_enum_variant)]
#![allow(clippy::upper_case_acronyms)]
#[allow(unused_imports)]
use anyhow::{anyhow, bail};
use parol_runtime::id_tree::Tree;
use parol_runtime::lexer::Token;
use parol_runtime::log::trace;
#[allow(unused_imports)]
use parol_runtime::parol_macros::{pop_and_reverse_item, pop_item};
use parol_runtime::parser::{ParseTreeStackEntry, ParseTreeType, UserActionsTrait};
use parol_runtime::ParserError;
use parol_runtime::{derive_builder::Builder, Result};
pub trait ParolGrammarTrait<'t> {
fn parol(&mut self, _arg: &Parol<'t>) -> Result<()> {
Ok(())
}
fn prolog(&mut self, _arg: &Prolog<'t>) -> Result<()> {
Ok(())
}
fn start_declaration(&mut self, _arg: &StartDeclaration<'t>) -> Result<()> {
Ok(())
}
fn declaration(&mut self, _arg: &Declaration<'t>) -> Result<()> {
Ok(())
}
fn scanner_directives(&mut self, _arg: &ScannerDirectives<'t>) -> Result<()> {
Ok(())
}
fn grammar_definition(&mut self, _arg: &GrammarDefinition<'t>) -> Result<()> {
Ok(())
}
fn double_colon(&mut self, _arg: &DoubleColon<'t>) -> Result<()> {
Ok(())
}
fn production(&mut self, _arg: &Production<'t>) -> Result<()> {
Ok(())
}
fn alternations(&mut self, _arg: &Alternations<'t>) -> Result<()> {
Ok(())
}
fn alternation(&mut self, _arg: &Alternation<'t>) -> Result<()> {
Ok(())
}
fn factor(&mut self, _arg: &Factor<'t>) -> Result<()> {
Ok(())
}
fn symbol(&mut self, _arg: &Symbol<'t>) -> Result<()> {
Ok(())
}
fn token_literal(&mut self, _arg: &TokenLiteral<'t>) -> Result<()> {
Ok(())
}
fn simple_token(&mut self, _arg: &SimpleToken<'t>) -> Result<()> {
Ok(())
}
fn token_with_states(&mut self, _arg: &TokenWithStates<'t>) -> Result<()> {
Ok(())
}
fn string(&mut self, _arg: &String<'t>) -> Result<()> {
Ok(())
}
fn raw_string(&mut self, _arg: &RawString<'t>) -> Result<()> {
Ok(())
}
fn regex(&mut self, _arg: &Regex<'t>) -> Result<()> {
Ok(())
}
fn group(&mut self, _arg: &Group<'t>) -> Result<()> {
Ok(())
}
fn optional(&mut self, _arg: &Optional<'t>) -> Result<()> {
Ok(())
}
fn repeat(&mut self, _arg: &Repeat<'t>) -> Result<()> {
Ok(())
}
fn non_terminal(&mut self, _arg: &NonTerminal<'t>) -> Result<()> {
Ok(())
}
fn identifier(&mut self, _arg: &Identifier<'t>) -> Result<()> {
Ok(())
}
fn scanner_state(&mut self, _arg: &ScannerState<'t>) -> Result<()> {
Ok(())
}
fn state_list(&mut self, _arg: &StateList<'t>) -> Result<()> {
Ok(())
}
fn scanner_switch(&mut self, _arg: &ScannerSwitch<'t>) -> Result<()> {
Ok(())
}
fn a_s_t_control(&mut self, _arg: &ASTControl) -> Result<()> {
Ok(())
}
fn cut_operator(&mut self, _arg: &CutOperator) -> Result<()> {
Ok(())
}
fn user_type_declaration(&mut self, _arg: &UserTypeDeclaration) -> Result<()> {
Ok(())
}
fn user_type_name(&mut self, _arg: &UserTypeName<'t>) -> Result<()> {
Ok(())
}
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DeclarationPercentTitleString<'t> {
pub string: Box<String<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DeclarationPercentCommentString<'t> {
pub string: Box<String<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DeclarationPercentUserUnderscoreTypeIdentifierEquUserTypeName<'t> {
pub identifier: Box<Identifier<'t>>,
pub user_type_name: crate::parser::parol_grammar::UserDefinedTypeName,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DeclarationScannerDirectives<'t> {
pub scanner_directives: Box<ScannerDirectives<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerDirectivesPercentLineUnderscoreCommentTokenLiteral<'t> {
pub token_literal: Box<TokenLiteral<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerDirectivesPercentBlockUnderscoreCommentTokenLiteralTokenLiteral<'t> {
pub token_literal: Box<TokenLiteral<'t>>,
pub token_literal0: Box<TokenLiteral<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerDirectivesPercentAutoUnderscoreNewlineUnderscoreOff {}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerDirectivesPercentAutoUnderscoreWsUnderscoreOff {}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorGroup<'t> {
pub group: Box<Group<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorRepeat<'t> {
pub repeat: Box<Repeat<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorOptional<'t> {
pub optional: Box<Optional<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct FactorSymbol<'t> {
pub symbol: Box<Symbol<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SymbolNonTerminal<'t> {
pub non_terminal: Box<NonTerminal<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SymbolSimpleToken<'t> {
pub simple_token: Box<SimpleToken<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SymbolTokenWithStates<'t> {
pub token_with_states: Box<TokenWithStates<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SymbolScannerSwitch<'t> {
pub scanner_switch: Box<ScannerSwitch<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TokenLiteralString<'t> {
pub string: Box<String<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TokenLiteralRawString<'t> {
pub raw_string: Box<RawString<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TokenLiteralRegex<'t> {
pub regex: Box<Regex<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerSwitchPercentScLParenScannerSwitchOptRParen<'t> {
pub scanner_switch_opt: Option<Box<ScannerSwitchOpt<'t>>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerSwitchPercentPushLParenIdentifierRParen<'t> {
pub identifier: Box<Identifier<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerSwitchPercentPopLParenRParen {}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ASTControlCutOperator {
pub cut_operator: Box<CutOperator>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ASTControlUserTypeDeclaration {
pub user_type_declaration: Box<UserTypeDeclaration>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ASTControl {
CutOperator(ASTControlCutOperator),
UserTypeDeclaration(ASTControlUserTypeDeclaration),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Alternation<'t> {
pub alternation_list: Vec<AlternationList<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlternationList<'t> {
pub factor: Box<Factor<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Alternations<'t> {
pub alternation: Box<Alternation<'t>>,
pub alternations_list: Vec<AlternationsList<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct AlternationsList<'t> {
pub alternation: Box<Alternation<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct CutOperator {}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Declaration<'t> {
PercentTitleString(DeclarationPercentTitleString<'t>),
PercentCommentString(DeclarationPercentCommentString<'t>),
PercentUserUnderscoreTypeIdentifierEquUserTypeName(
DeclarationPercentUserUnderscoreTypeIdentifierEquUserTypeName<'t>,
),
ScannerDirectives(DeclarationScannerDirectives<'t>),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct DoubleColon<'t> {
pub double_colon: Token<'t>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Factor<'t> {
Group(FactorGroup<'t>),
Repeat(FactorRepeat<'t>),
Optional(FactorOptional<'t>),
Symbol(FactorSymbol<'t>),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GrammarDefinition<'t> {
pub production: Box<Production<'t>>,
pub grammar_definition_list: Vec<GrammarDefinitionList<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct GrammarDefinitionList<'t> {
pub production: Box<Production<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Group<'t> {
pub alternations: Box<Alternations<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Identifier<'t> {
pub identifier: Token<'t>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct NonTerminal<'t> {
pub identifier: Box<Identifier<'t>>,
pub non_terminal_opt: Option<Box<NonTerminalOpt>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct NonTerminalOpt {
pub a_s_t_control: Box<ASTControl>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Optional<'t> {
pub alternations: Box<Alternations<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Parol<'t> {
pub prolog: Box<Prolog<'t>>,
pub grammar_definition: Box<GrammarDefinition<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Production<'t> {
pub identifier: Box<Identifier<'t>>,
pub alternations: Box<Alternations<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Prolog<'t> {
pub start_declaration: Box<StartDeclaration<'t>>,
pub prolog_list: Vec<PrologList<'t>>,
pub prolog_list0: Vec<PrologList0>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PrologList<'t> {
pub declaration: Box<Declaration<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct PrologList0 {
pub scanner_state: crate::parser::parol_grammar::ScannerConfig,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct RawString<'t> {
pub raw_string: Token<'t>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Regex<'t> {
pub regex: Token<'t>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct Repeat<'t> {
pub alternations: Box<Alternations<'t>>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ScannerDirectives<'t> {
PercentLineUnderscoreCommentTokenLiteral(
ScannerDirectivesPercentLineUnderscoreCommentTokenLiteral<'t>,
),
PercentBlockUnderscoreCommentTokenLiteralTokenLiteral(
ScannerDirectivesPercentBlockUnderscoreCommentTokenLiteralTokenLiteral<'t>,
),
PercentAutoUnderscoreNewlineUnderscoreOff(
ScannerDirectivesPercentAutoUnderscoreNewlineUnderscoreOff,
),
PercentAutoUnderscoreWsUnderscoreOff(ScannerDirectivesPercentAutoUnderscoreWsUnderscoreOff),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerState<'t> {
pub identifier: Box<Identifier<'t>>,
pub scanner_state_list: Vec<ScannerStateList<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerStateList<'t> {
pub scanner_directives: Box<ScannerDirectives<'t>>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ScannerSwitch<'t> {
PercentScLParenScannerSwitchOptRParen(ScannerSwitchPercentScLParenScannerSwitchOptRParen<'t>),
PercentPushLParenIdentifierRParen(ScannerSwitchPercentPushLParenIdentifierRParen<'t>),
PercentPopLParenRParen(ScannerSwitchPercentPopLParenRParen),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct ScannerSwitchOpt<'t> {
pub identifier: Box<Identifier<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SimpleToken<'t> {
pub token_literal: Box<TokenLiteral<'t>>,
pub simple_token_opt: Option<Box<SimpleTokenOpt>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct SimpleTokenOpt {
pub a_s_t_control: Box<ASTControl>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StartDeclaration<'t> {
pub identifier: Box<Identifier<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StateList<'t> {
pub identifier: Box<Identifier<'t>>,
pub state_list_list: Vec<StateListList<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct StateListList<'t> {
pub identifier: Box<Identifier<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct String<'t> {
pub string: Token<'t>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Symbol<'t> {
NonTerminal(SymbolNonTerminal<'t>),
SimpleToken(SymbolSimpleToken<'t>),
TokenWithStates(SymbolTokenWithStates<'t>),
ScannerSwitch(SymbolScannerSwitch<'t>),
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum TokenLiteral<'t> {
String(TokenLiteralString<'t>),
RawString(TokenLiteralRawString<'t>),
Regex(TokenLiteralRegex<'t>),
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TokenWithStates<'t> {
pub state_list: Box<StateList<'t>>,
pub token_literal: Box<TokenLiteral<'t>>,
pub token_with_states_opt: Option<Box<TokenWithStatesOpt>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct TokenWithStatesOpt {
pub a_s_t_control: Box<ASTControl>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UserTypeDeclaration {
pub user_type_name: crate::parser::parol_grammar::UserDefinedTypeName,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UserTypeName<'t> {
pub identifier: Box<Identifier<'t>>,
pub user_type_name_list: Vec<UserTypeNameList<'t>>,
}
#[allow(dead_code)]
#[derive(Builder, Debug, Clone)]
#[builder(crate = "parol_runtime::derive_builder")]
pub struct UserTypeNameList<'t> {
pub identifier: Box<Identifier<'t>>,
}
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub enum ASTType<'t> {
ASTControl(ASTControl),
Alternation(Alternation<'t>),
AlternationList(Vec<AlternationList<'t>>),
Alternations(Alternations<'t>),
AlternationsList(Vec<AlternationsList<'t>>),
CutOperator(CutOperator),
Declaration(Declaration<'t>),
DoubleColon(DoubleColon<'t>),
Factor(Factor<'t>),
GrammarDefinition(GrammarDefinition<'t>),
GrammarDefinitionList(Vec<GrammarDefinitionList<'t>>),
Group(Group<'t>),
Identifier(Identifier<'t>),
NonTerminal(NonTerminal<'t>),
NonTerminalOpt(Option<Box<NonTerminalOpt>>),
Optional(Optional<'t>),
Parol(Parol<'t>),
Production(Production<'t>),
Prolog(Prolog<'t>),
PrologList(Vec<PrologList<'t>>),
PrologList0(Vec<PrologList0>),
RawString(RawString<'t>),
Regex(Regex<'t>),
Repeat(Repeat<'t>),
ScannerDirectives(ScannerDirectives<'t>),
ScannerState(ScannerState<'t>),
ScannerStateList(Vec<ScannerStateList<'t>>),
ScannerSwitch(ScannerSwitch<'t>),
ScannerSwitchOpt(Option<Box<ScannerSwitchOpt<'t>>>),
SimpleToken(SimpleToken<'t>),
SimpleTokenOpt(Option<Box<SimpleTokenOpt>>),
StartDeclaration(StartDeclaration<'t>),
StateList(StateList<'t>),
StateListList(Vec<StateListList<'t>>),
String(String<'t>),
Symbol(Symbol<'t>),
TokenLiteral(TokenLiteral<'t>),
TokenWithStates(TokenWithStates<'t>),
TokenWithStatesOpt(Option<Box<TokenWithStatesOpt>>),
UserTypeDeclaration(UserTypeDeclaration),
UserTypeName(UserTypeName<'t>),
UserTypeNameList(Vec<UserTypeNameList<'t>>),
}
#[allow(dead_code)]
pub struct ParolGrammarAuto<'t, 'u>
where
't: 'u,
{
user_grammar: &'u mut dyn ParolGrammarTrait<'t>,
item_stack: Vec<ASTType<'t>>,
}
impl<'t, 'u> ParolGrammarAuto<'t, 'u> {
pub fn new(user_grammar: &'u mut dyn ParolGrammarTrait<'t>) -> Self {
Self {
user_grammar,
item_stack: Vec::new(),
}
}
#[allow(dead_code)]
fn push(&mut self, item: ASTType<'t>, context: &str) {
trace!("push {}: {:?}", context, item);
self.item_stack.push(item)
}
#[allow(dead_code)]
fn pop(&mut self, context: &str) -> Option<ASTType<'t>> {
if !self.item_stack.is_empty() {
let item = self.item_stack.pop();
if let Some(ref item) = item {
trace!("pop {}: {:?}", context, item);
}
item
} else {
None
}
}
#[allow(dead_code)]
fn trace_item_stack(&self, context: &str) -> std::string::String {
format!(
"Item stack at {}:\n{}",
context,
self.item_stack
.iter()
.rev()
.map(|s| format!(" {:?}", s))
.collect::<Vec<std::string::String>>()
.join("\n")
)
}
#[parol_runtime::function_name::named]
fn parol(
&mut self,
_prolog: &ParseTreeStackEntry<'t>,
_grammar_definition: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let grammar_definition = pop_item!(self, grammar_definition, GrammarDefinition, context);
let prolog = pop_item!(self, prolog, Prolog, context);
let parol_built = ParolBuilder::default()
.prolog(Box::new(prolog))
.grammar_definition(Box::new(grammar_definition))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.parol(&parol_built)?;
self.push(ASTType::Parol(parol_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn prolog(
&mut self,
_start_declaration: &ParseTreeStackEntry<'t>,
_prolog_list: &ParseTreeStackEntry<'t>,
_prolog_list0: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let prolog_list0 = pop_and_reverse_item!(self, prolog_list0, PrologList0, context);
let prolog_list = pop_and_reverse_item!(self, prolog_list, PrologList, context);
let start_declaration = pop_item!(self, start_declaration, StartDeclaration, context);
let prolog_built = PrologBuilder::default()
.start_declaration(Box::new(start_declaration))
.prolog_list(prolog_list)
.prolog_list0(prolog_list0)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.prolog(&prolog_built)?;
self.push(ASTType::Prolog(prolog_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn prolog_list0_0(
&mut self,
_scanner_state: &ParseTreeStackEntry<'t>,
_prolog_list0: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut prolog_list0 = pop_item!(self, prolog_list0, PrologList0, context);
let scanner_state = pop_item!(self, scanner_state, ScannerState, context);
let prolog_list0_0_built = PrologList0Builder::default()
.scanner_state(
(&scanner_state)
.try_into()
.map_err(|e| anyhow!("Conversion error!: {}", e))?,
)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
prolog_list0.push(prolog_list0_0_built);
self.push(ASTType::PrologList0(prolog_list0), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn prolog_list0_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let prolog_list0_1_built = Vec::new();
self.push(ASTType::PrologList0(prolog_list0_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn prolog_list_0(
&mut self,
_declaration: &ParseTreeStackEntry<'t>,
_prolog_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut prolog_list = pop_item!(self, prolog_list, PrologList, context);
let declaration = pop_item!(self, declaration, Declaration, context);
let prolog_list_0_built = PrologListBuilder::default()
.declaration(Box::new(declaration))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
prolog_list.push(prolog_list_0_built);
self.push(ASTType::PrologList(prolog_list), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn prolog_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let prolog_list_1_built = Vec::new();
self.push(ASTType::PrologList(prolog_list_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn start_declaration(
&mut self,
_percent_start: &ParseTreeStackEntry<'t>,
_identifier: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let identifier = pop_item!(self, identifier, Identifier, context);
let start_declaration_built = StartDeclarationBuilder::default()
.identifier(Box::new(identifier))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar
.start_declaration(&start_declaration_built)?;
self.push(ASTType::StartDeclaration(start_declaration_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn declaration_0(
&mut self,
_percent_title: &ParseTreeStackEntry<'t>,
_string: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let string = pop_item!(self, string, String, context);
let declaration_0_built = DeclarationPercentTitleStringBuilder::default()
.string(Box::new(string))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let declaration_0_built = Declaration::PercentTitleString(declaration_0_built);
self.user_grammar.declaration(&declaration_0_built)?;
self.push(ASTType::Declaration(declaration_0_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn declaration_1(
&mut self,
_percent_comment: &ParseTreeStackEntry<'t>,
_string: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let string = pop_item!(self, string, String, context);
let declaration_1_built = DeclarationPercentCommentStringBuilder::default()
.string(Box::new(string))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let declaration_1_built = Declaration::PercentCommentString(declaration_1_built);
self.user_grammar.declaration(&declaration_1_built)?;
self.push(ASTType::Declaration(declaration_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn declaration_2(
&mut self,
_percent_user_underscore_type: &ParseTreeStackEntry<'t>,
_identifier: &ParseTreeStackEntry<'t>,
_equ: &ParseTreeStackEntry<'t>,
_user_type_name: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let user_type_name = pop_item!(self, user_type_name, UserTypeName, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let declaration_2_built =
DeclarationPercentUserUnderscoreTypeIdentifierEquUserTypeNameBuilder::default()
.identifier(Box::new(identifier))
.user_type_name(
(&user_type_name)
.try_into()
.map_err(|e| anyhow!("Conversion error!: {}", e))?,
)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let declaration_2_built =
Declaration::PercentUserUnderscoreTypeIdentifierEquUserTypeName(declaration_2_built);
self.user_grammar.declaration(&declaration_2_built)?;
self.push(ASTType::Declaration(declaration_2_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn declaration_3(
&mut self,
_scanner_directives: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_directives = pop_item!(self, scanner_directives, ScannerDirectives, context);
let declaration_3_built = DeclarationScannerDirectivesBuilder::default()
.scanner_directives(Box::new(scanner_directives))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let declaration_3_built = Declaration::ScannerDirectives(declaration_3_built);
self.user_grammar.declaration(&declaration_3_built)?;
self.push(ASTType::Declaration(declaration_3_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_directives_0(
&mut self,
_percent_line_underscore_comment: &ParseTreeStackEntry<'t>,
_token_literal: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let token_literal = pop_item!(self, token_literal, TokenLiteral, context);
let scanner_directives_0_built =
ScannerDirectivesPercentLineUnderscoreCommentTokenLiteralBuilder::default()
.token_literal(Box::new(token_literal))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_directives_0_built =
ScannerDirectives::PercentLineUnderscoreCommentTokenLiteral(scanner_directives_0_built);
self.user_grammar
.scanner_directives(&scanner_directives_0_built)?;
self.push(
ASTType::ScannerDirectives(scanner_directives_0_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_directives_1(
&mut self,
_percent_block_underscore_comment: &ParseTreeStackEntry<'t>,
_token_literal: &ParseTreeStackEntry<'t>,
_token_literal0: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let token_literal0 = pop_item!(self, token_literal0, TokenLiteral, context);
let token_literal = pop_item!(self, token_literal, TokenLiteral, context);
let scanner_directives_1_built =
ScannerDirectivesPercentBlockUnderscoreCommentTokenLiteralTokenLiteralBuilder::default(
)
.token_literal(Box::new(token_literal))
.token_literal0(Box::new(token_literal0))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_directives_1_built =
ScannerDirectives::PercentBlockUnderscoreCommentTokenLiteralTokenLiteral(
scanner_directives_1_built,
);
self.user_grammar
.scanner_directives(&scanner_directives_1_built)?;
self.push(
ASTType::ScannerDirectives(scanner_directives_1_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_directives_2(
&mut self,
_percent_auto_underscore_newline_underscore_off: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_directives_2_built =
ScannerDirectivesPercentAutoUnderscoreNewlineUnderscoreOffBuilder::default()
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_directives_2_built =
ScannerDirectives::PercentAutoUnderscoreNewlineUnderscoreOff(
scanner_directives_2_built,
);
self.user_grammar
.scanner_directives(&scanner_directives_2_built)?;
self.push(
ASTType::ScannerDirectives(scanner_directives_2_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_directives_3(
&mut self,
_percent_auto_underscore_ws_underscore_off: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_directives_3_built =
ScannerDirectivesPercentAutoUnderscoreWsUnderscoreOffBuilder::default()
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_directives_3_built =
ScannerDirectives::PercentAutoUnderscoreWsUnderscoreOff(scanner_directives_3_built);
self.user_grammar
.scanner_directives(&scanner_directives_3_built)?;
self.push(
ASTType::ScannerDirectives(scanner_directives_3_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn grammar_definition(
&mut self,
_percent_percent: &ParseTreeStackEntry<'t>,
_production: &ParseTreeStackEntry<'t>,
_grammar_definition_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let grammar_definition_list = pop_and_reverse_item!(
self,
grammar_definition_list,
GrammarDefinitionList,
context
);
let production = pop_item!(self, production, Production, context);
let grammar_definition_built = GrammarDefinitionBuilder::default()
.production(Box::new(production))
.grammar_definition_list(grammar_definition_list)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar
.grammar_definition(&grammar_definition_built)?;
self.push(
ASTType::GrammarDefinition(grammar_definition_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn grammar_definition_list_0(
&mut self,
_production: &ParseTreeStackEntry<'t>,
_grammar_definition_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut grammar_definition_list = pop_item!(
self,
grammar_definition_list,
GrammarDefinitionList,
context
);
let production = pop_item!(self, production, Production, context);
let grammar_definition_list_0_built = GrammarDefinitionListBuilder::default()
.production(Box::new(production))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
grammar_definition_list.push(grammar_definition_list_0_built);
self.push(
ASTType::GrammarDefinitionList(grammar_definition_list),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn grammar_definition_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let grammar_definition_list_1_built = Vec::new();
self.push(
ASTType::GrammarDefinitionList(grammar_definition_list_1_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn double_colon(
&mut self,
double_colon: &ParseTreeStackEntry<'t>,
parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let double_colon = double_colon.token(parse_tree).unwrap().clone();
let double_colon_built = DoubleColonBuilder::default()
.double_colon(double_colon)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.double_colon(&double_colon_built)?;
self.push(ASTType::DoubleColon(double_colon_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn production(
&mut self,
_identifier: &ParseTreeStackEntry<'t>,
_colon: &ParseTreeStackEntry<'t>,
_alternations: &ParseTreeStackEntry<'t>,
_semicolon: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternations = pop_item!(self, alternations, Alternations, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let production_built = ProductionBuilder::default()
.identifier(Box::new(identifier))
.alternations(Box::new(alternations))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.production(&production_built)?;
self.push(ASTType::Production(production_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn alternations(
&mut self,
_alternation: &ParseTreeStackEntry<'t>,
_alternations_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternations_list =
pop_and_reverse_item!(self, alternations_list, AlternationsList, context);
let alternation = pop_item!(self, alternation, Alternation, context);
let alternations_built = AlternationsBuilder::default()
.alternation(Box::new(alternation))
.alternations_list(alternations_list)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.alternations(&alternations_built)?;
self.push(ASTType::Alternations(alternations_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn alternations_list_0(
&mut self,
_or: &ParseTreeStackEntry<'t>,
_alternation: &ParseTreeStackEntry<'t>,
_alternations_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut alternations_list = pop_item!(self, alternations_list, AlternationsList, context);
let alternation = pop_item!(self, alternation, Alternation, context);
let alternations_list_0_built = AlternationsListBuilder::default()
.alternation(Box::new(alternation))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
alternations_list.push(alternations_list_0_built);
self.push(ASTType::AlternationsList(alternations_list), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn alternations_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternations_list_1_built = Vec::new();
self.push(
ASTType::AlternationsList(alternations_list_1_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn alternation(
&mut self,
_alternation_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternation_list =
pop_and_reverse_item!(self, alternation_list, AlternationList, context);
let alternation_built = AlternationBuilder::default()
.alternation_list(alternation_list)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.alternation(&alternation_built)?;
self.push(ASTType::Alternation(alternation_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn alternation_list_0(
&mut self,
_factor: &ParseTreeStackEntry<'t>,
_alternation_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut alternation_list = pop_item!(self, alternation_list, AlternationList, context);
let factor = pop_item!(self, factor, Factor, context);
let alternation_list_0_built = AlternationListBuilder::default()
.factor(Box::new(factor))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
alternation_list.push(alternation_list_0_built);
self.push(ASTType::AlternationList(alternation_list), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn alternation_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternation_list_1_built = Vec::new();
self.push(ASTType::AlternationList(alternation_list_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn factor_0(
&mut self,
_group: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let group = pop_item!(self, group, Group, context);
let factor_0_built = FactorGroupBuilder::default()
.group(Box::new(group))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let factor_0_built = Factor::Group(factor_0_built);
self.user_grammar.factor(&factor_0_built)?;
self.push(ASTType::Factor(factor_0_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn factor_1(
&mut self,
_repeat: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let repeat = pop_item!(self, repeat, Repeat, context);
let factor_1_built = FactorRepeatBuilder::default()
.repeat(Box::new(repeat))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let factor_1_built = Factor::Repeat(factor_1_built);
self.user_grammar.factor(&factor_1_built)?;
self.push(ASTType::Factor(factor_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn factor_2(
&mut self,
_optional: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let optional = pop_item!(self, optional, Optional, context);
let factor_2_built = FactorOptionalBuilder::default()
.optional(Box::new(optional))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let factor_2_built = Factor::Optional(factor_2_built);
self.user_grammar.factor(&factor_2_built)?;
self.push(ASTType::Factor(factor_2_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn factor_3(
&mut self,
_symbol: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let symbol = pop_item!(self, symbol, Symbol, context);
let factor_3_built = FactorSymbolBuilder::default()
.symbol(Box::new(symbol))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let factor_3_built = Factor::Symbol(factor_3_built);
self.user_grammar.factor(&factor_3_built)?;
self.push(ASTType::Factor(factor_3_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn symbol_0(
&mut self,
_non_terminal: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let non_terminal = pop_item!(self, non_terminal, NonTerminal, context);
let symbol_0_built = SymbolNonTerminalBuilder::default()
.non_terminal(Box::new(non_terminal))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let symbol_0_built = Symbol::NonTerminal(symbol_0_built);
self.user_grammar.symbol(&symbol_0_built)?;
self.push(ASTType::Symbol(symbol_0_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn symbol_1(
&mut self,
_simple_token: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let simple_token = pop_item!(self, simple_token, SimpleToken, context);
let symbol_1_built = SymbolSimpleTokenBuilder::default()
.simple_token(Box::new(simple_token))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let symbol_1_built = Symbol::SimpleToken(symbol_1_built);
self.user_grammar.symbol(&symbol_1_built)?;
self.push(ASTType::Symbol(symbol_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn symbol_2(
&mut self,
_token_with_states: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let token_with_states = pop_item!(self, token_with_states, TokenWithStates, context);
let symbol_2_built = SymbolTokenWithStatesBuilder::default()
.token_with_states(Box::new(token_with_states))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let symbol_2_built = Symbol::TokenWithStates(symbol_2_built);
self.user_grammar.symbol(&symbol_2_built)?;
self.push(ASTType::Symbol(symbol_2_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn symbol_3(
&mut self,
_scanner_switch: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_switch = pop_item!(self, scanner_switch, ScannerSwitch, context);
let symbol_3_built = SymbolScannerSwitchBuilder::default()
.scanner_switch(Box::new(scanner_switch))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let symbol_3_built = Symbol::ScannerSwitch(symbol_3_built);
self.user_grammar.symbol(&symbol_3_built)?;
self.push(ASTType::Symbol(symbol_3_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn token_literal_0(
&mut self,
_string: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let string = pop_item!(self, string, String, context);
let token_literal_0_built = TokenLiteralStringBuilder::default()
.string(Box::new(string))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let token_literal_0_built = TokenLiteral::String(token_literal_0_built);
self.user_grammar.token_literal(&token_literal_0_built)?;
self.push(ASTType::TokenLiteral(token_literal_0_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn token_literal_1(
&mut self,
_raw_string: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let raw_string = pop_item!(self, raw_string, RawString, context);
let token_literal_1_built = TokenLiteralRawStringBuilder::default()
.raw_string(Box::new(raw_string))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let token_literal_1_built = TokenLiteral::RawString(token_literal_1_built);
self.user_grammar.token_literal(&token_literal_1_built)?;
self.push(ASTType::TokenLiteral(token_literal_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn token_literal_2(
&mut self,
_regex: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let regex = pop_item!(self, regex, Regex, context);
let token_literal_2_built = TokenLiteralRegexBuilder::default()
.regex(Box::new(regex))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let token_literal_2_built = TokenLiteral::Regex(token_literal_2_built);
self.user_grammar.token_literal(&token_literal_2_built)?;
self.push(ASTType::TokenLiteral(token_literal_2_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn simple_token(
&mut self,
_token_literal: &ParseTreeStackEntry<'t>,
_simple_token_opt: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let simple_token_opt = pop_item!(self, simple_token_opt, SimpleTokenOpt, context);
let token_literal = pop_item!(self, token_literal, TokenLiteral, context);
let simple_token_built = SimpleTokenBuilder::default()
.token_literal(Box::new(token_literal))
.simple_token_opt(simple_token_opt)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.simple_token(&simple_token_built)?;
self.push(ASTType::SimpleToken(simple_token_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn simple_token_opt_0(
&mut self,
_a_s_t_control: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let a_s_t_control = pop_item!(self, a_s_t_control, ASTControl, context);
let simple_token_opt_0_built = SimpleTokenOptBuilder::default()
.a_s_t_control(Box::new(a_s_t_control))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.push(
ASTType::SimpleTokenOpt(Some(Box::new(simple_token_opt_0_built))),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn simple_token_opt_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
self.push(ASTType::SimpleTokenOpt(None), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn token_with_states(
&mut self,
_l_t: &ParseTreeStackEntry<'t>,
_state_list: &ParseTreeStackEntry<'t>,
_g_t: &ParseTreeStackEntry<'t>,
_token_literal: &ParseTreeStackEntry<'t>,
_token_with_states_opt: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let token_with_states_opt =
pop_item!(self, token_with_states_opt, TokenWithStatesOpt, context);
let token_literal = pop_item!(self, token_literal, TokenLiteral, context);
let state_list = pop_item!(self, state_list, StateList, context);
let token_with_states_built = TokenWithStatesBuilder::default()
.state_list(Box::new(state_list))
.token_literal(Box::new(token_literal))
.token_with_states_opt(token_with_states_opt)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar
.token_with_states(&token_with_states_built)?;
self.push(ASTType::TokenWithStates(token_with_states_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn token_with_states_opt_0(
&mut self,
_a_s_t_control: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let a_s_t_control = pop_item!(self, a_s_t_control, ASTControl, context);
let token_with_states_opt_0_built = TokenWithStatesOptBuilder::default()
.a_s_t_control(Box::new(a_s_t_control))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.push(
ASTType::TokenWithStatesOpt(Some(Box::new(token_with_states_opt_0_built))),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn token_with_states_opt_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
self.push(ASTType::TokenWithStatesOpt(None), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn string(
&mut self,
string: &ParseTreeStackEntry<'t>,
parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let string = string.token(parse_tree).unwrap().clone();
let string_built = StringBuilder::default()
.string(string)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.string(&string_built)?;
self.push(ASTType::String(string_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn raw_string(
&mut self,
raw_string: &ParseTreeStackEntry<'t>,
parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let raw_string = raw_string.token(parse_tree).unwrap().clone();
let raw_string_built = RawStringBuilder::default()
.raw_string(raw_string)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.raw_string(&raw_string_built)?;
self.push(ASTType::RawString(raw_string_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn regex(
&mut self,
regex: &ParseTreeStackEntry<'t>,
parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let regex = regex.token(parse_tree).unwrap().clone();
let regex_built = RegexBuilder::default()
.regex(regex)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.regex(®ex_built)?;
self.push(ASTType::Regex(regex_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn group(
&mut self,
_l_paren: &ParseTreeStackEntry<'t>,
_alternations: &ParseTreeStackEntry<'t>,
_r_paren: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternations = pop_item!(self, alternations, Alternations, context);
let group_built = GroupBuilder::default()
.alternations(Box::new(alternations))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.group(&group_built)?;
self.push(ASTType::Group(group_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn optional(
&mut self,
_l_bracket: &ParseTreeStackEntry<'t>,
_alternations: &ParseTreeStackEntry<'t>,
_r_bracket: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternations = pop_item!(self, alternations, Alternations, context);
let optional_built = OptionalBuilder::default()
.alternations(Box::new(alternations))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.optional(&optional_built)?;
self.push(ASTType::Optional(optional_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn repeat(
&mut self,
_l_brace: &ParseTreeStackEntry<'t>,
_alternations: &ParseTreeStackEntry<'t>,
_r_brace: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let alternations = pop_item!(self, alternations, Alternations, context);
let repeat_built = RepeatBuilder::default()
.alternations(Box::new(alternations))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.repeat(&repeat_built)?;
self.push(ASTType::Repeat(repeat_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn non_terminal(
&mut self,
_identifier: &ParseTreeStackEntry<'t>,
_non_terminal_opt: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let non_terminal_opt = pop_item!(self, non_terminal_opt, NonTerminalOpt, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let non_terminal_built = NonTerminalBuilder::default()
.identifier(Box::new(identifier))
.non_terminal_opt(non_terminal_opt)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.non_terminal(&non_terminal_built)?;
self.push(ASTType::NonTerminal(non_terminal_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn non_terminal_opt_0(
&mut self,
_a_s_t_control: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let a_s_t_control = pop_item!(self, a_s_t_control, ASTControl, context);
let non_terminal_opt_0_built = NonTerminalOptBuilder::default()
.a_s_t_control(Box::new(a_s_t_control))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.push(
ASTType::NonTerminalOpt(Some(Box::new(non_terminal_opt_0_built))),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn non_terminal_opt_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
self.push(ASTType::NonTerminalOpt(None), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn identifier(
&mut self,
identifier: &ParseTreeStackEntry<'t>,
parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let identifier = identifier.token(parse_tree).unwrap().clone();
let identifier_built = IdentifierBuilder::default()
.identifier(identifier)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.identifier(&identifier_built)?;
self.push(ASTType::Identifier(identifier_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_state(
&mut self,
_percent_scanner: &ParseTreeStackEntry<'t>,
_identifier: &ParseTreeStackEntry<'t>,
_l_brace: &ParseTreeStackEntry<'t>,
_scanner_state_list: &ParseTreeStackEntry<'t>,
_r_brace: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_state_list =
pop_and_reverse_item!(self, scanner_state_list, ScannerStateList, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let scanner_state_built = ScannerStateBuilder::default()
.identifier(Box::new(identifier))
.scanner_state_list(scanner_state_list)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.scanner_state(&scanner_state_built)?;
self.push(ASTType::ScannerState(scanner_state_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_state_list_0(
&mut self,
_scanner_directives: &ParseTreeStackEntry<'t>,
_scanner_state_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut scanner_state_list = pop_item!(self, scanner_state_list, ScannerStateList, context);
let scanner_directives = pop_item!(self, scanner_directives, ScannerDirectives, context);
let scanner_state_list_0_built = ScannerStateListBuilder::default()
.scanner_directives(Box::new(scanner_directives))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
scanner_state_list.push(scanner_state_list_0_built);
self.push(ASTType::ScannerStateList(scanner_state_list), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_state_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_state_list_1_built = Vec::new();
self.push(
ASTType::ScannerStateList(scanner_state_list_1_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn state_list(
&mut self,
_identifier: &ParseTreeStackEntry<'t>,
_state_list_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let state_list_list = pop_and_reverse_item!(self, state_list_list, StateListList, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let state_list_built = StateListBuilder::default()
.identifier(Box::new(identifier))
.state_list_list(state_list_list)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.state_list(&state_list_built)?;
self.push(ASTType::StateList(state_list_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn state_list_list_0(
&mut self,
_comma: &ParseTreeStackEntry<'t>,
_identifier: &ParseTreeStackEntry<'t>,
_state_list_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut state_list_list = pop_item!(self, state_list_list, StateListList, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let state_list_list_0_built = StateListListBuilder::default()
.identifier(Box::new(identifier))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
state_list_list.push(state_list_list_0_built);
self.push(ASTType::StateListList(state_list_list), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn state_list_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let state_list_list_1_built = Vec::new();
self.push(ASTType::StateListList(state_list_list_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_switch_0(
&mut self,
_percent_sc: &ParseTreeStackEntry<'t>,
_l_paren: &ParseTreeStackEntry<'t>,
_scanner_switch_opt: &ParseTreeStackEntry<'t>,
_r_paren: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_switch_opt = pop_item!(self, scanner_switch_opt, ScannerSwitchOpt, context);
let scanner_switch_0_built =
ScannerSwitchPercentScLParenScannerSwitchOptRParenBuilder::default()
.scanner_switch_opt(scanner_switch_opt)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_switch_0_built =
ScannerSwitch::PercentScLParenScannerSwitchOptRParen(scanner_switch_0_built);
self.user_grammar.scanner_switch(&scanner_switch_0_built)?;
self.push(ASTType::ScannerSwitch(scanner_switch_0_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_switch_1(
&mut self,
_percent_push: &ParseTreeStackEntry<'t>,
_l_paren: &ParseTreeStackEntry<'t>,
_identifier: &ParseTreeStackEntry<'t>,
_r_paren: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let identifier = pop_item!(self, identifier, Identifier, context);
let scanner_switch_1_built =
ScannerSwitchPercentPushLParenIdentifierRParenBuilder::default()
.identifier(Box::new(identifier))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_switch_1_built =
ScannerSwitch::PercentPushLParenIdentifierRParen(scanner_switch_1_built);
self.user_grammar.scanner_switch(&scanner_switch_1_built)?;
self.push(ASTType::ScannerSwitch(scanner_switch_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_switch_2(
&mut self,
_percent_pop: &ParseTreeStackEntry<'t>,
_l_paren: &ParseTreeStackEntry<'t>,
_r_paren: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let scanner_switch_2_built = ScannerSwitchPercentPopLParenRParenBuilder::default()
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let scanner_switch_2_built = ScannerSwitch::PercentPopLParenRParen(scanner_switch_2_built);
self.user_grammar.scanner_switch(&scanner_switch_2_built)?;
self.push(ASTType::ScannerSwitch(scanner_switch_2_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_switch_opt_0(
&mut self,
_identifier: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let identifier = pop_item!(self, identifier, Identifier, context);
let scanner_switch_opt_0_built = ScannerSwitchOptBuilder::default()
.identifier(Box::new(identifier))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.push(
ASTType::ScannerSwitchOpt(Some(Box::new(scanner_switch_opt_0_built))),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn scanner_switch_opt_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
self.push(ASTType::ScannerSwitchOpt(None), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn a_s_t_control_0(
&mut self,
_cut_operator: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let cut_operator = pop_item!(self, cut_operator, CutOperator, context);
let a_s_t_control_0_built = ASTControlCutOperatorBuilder::default()
.cut_operator(Box::new(cut_operator))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let a_s_t_control_0_built = ASTControl::CutOperator(a_s_t_control_0_built);
self.user_grammar.a_s_t_control(&a_s_t_control_0_built)?;
self.push(ASTType::ASTControl(a_s_t_control_0_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn a_s_t_control_1(
&mut self,
_user_type_declaration: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let user_type_declaration =
pop_item!(self, user_type_declaration, UserTypeDeclaration, context);
let a_s_t_control_1_built = ASTControlUserTypeDeclarationBuilder::default()
.user_type_declaration(Box::new(user_type_declaration))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
let a_s_t_control_1_built = ASTControl::UserTypeDeclaration(a_s_t_control_1_built);
self.user_grammar.a_s_t_control(&a_s_t_control_1_built)?;
self.push(ASTType::ASTControl(a_s_t_control_1_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn cut_operator(
&mut self,
_cut_operator: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let cut_operator_built = CutOperatorBuilder::default()
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.cut_operator(&cut_operator_built)?;
self.push(ASTType::CutOperator(cut_operator_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn user_type_declaration(
&mut self,
_colon: &ParseTreeStackEntry<'t>,
_user_type_name: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let user_type_name = pop_item!(self, user_type_name, UserTypeName, context);
let user_type_declaration_built = UserTypeDeclarationBuilder::default()
.user_type_name(
(&user_type_name)
.try_into()
.map_err(|e| anyhow!("Conversion error!: {}", e))?,
)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar
.user_type_declaration(&user_type_declaration_built)?;
self.push(
ASTType::UserTypeDeclaration(user_type_declaration_built),
context,
);
Ok(())
}
#[parol_runtime::function_name::named]
fn user_type_name(
&mut self,
_identifier: &ParseTreeStackEntry<'t>,
_user_type_name_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let user_type_name_list =
pop_and_reverse_item!(self, user_type_name_list, UserTypeNameList, context);
let identifier = pop_item!(self, identifier, Identifier, context);
let user_type_name_built = UserTypeNameBuilder::default()
.identifier(Box::new(identifier))
.user_type_name_list(user_type_name_list)
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
self.user_grammar.user_type_name(&user_type_name_built)?;
self.push(ASTType::UserTypeName(user_type_name_built), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn user_type_name_list_0(
&mut self,
_double_colon: &ParseTreeStackEntry<'t>,
_identifier: &ParseTreeStackEntry<'t>,
_user_type_name_list: &ParseTreeStackEntry<'t>,
_parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let mut user_type_name_list =
pop_item!(self, user_type_name_list, UserTypeNameList, context);
let identifier = pop_item!(self, identifier, Identifier, context);
self.pop(context);
let user_type_name_list_0_built = UserTypeNameListBuilder::default()
.identifier(Box::new(identifier))
.build()
.map_err(|e| anyhow!("Builder error!: {}", e))?;
user_type_name_list.push(user_type_name_list_0_built);
self.push(ASTType::UserTypeNameList(user_type_name_list), context);
Ok(())
}
#[parol_runtime::function_name::named]
fn user_type_name_list_1(&mut self, _parse_tree: &Tree<ParseTreeType<'t>>) -> Result<()> {
let context = function_name!();
trace!("{}", self.trace_item_stack(context));
let user_type_name_list_1_built = Vec::new();
self.push(
ASTType::UserTypeNameList(user_type_name_list_1_built),
context,
);
Ok(())
}
}
impl<'t> UserActionsTrait<'t> for ParolGrammarAuto<'t, '_> {
fn call_semantic_action_for_production_number(
&mut self,
prod_num: usize,
children: &[ParseTreeStackEntry<'t>],
parse_tree: &Tree<ParseTreeType<'t>>,
) -> Result<()> {
match prod_num {
0 => self.parol(&children[0], &children[1], parse_tree),
1 => self.prolog(&children[0], &children[1], &children[2], parse_tree),
2 => self.prolog_list0_0(&children[0], &children[1], parse_tree),
3 => self.prolog_list0_1(parse_tree),
4 => self.prolog_list_0(&children[0], &children[1], parse_tree),
5 => self.prolog_list_1(parse_tree),
6 => self.start_declaration(&children[0], &children[1], parse_tree),
7 => self.declaration_0(&children[0], &children[1], parse_tree),
8 => self.declaration_1(&children[0], &children[1], parse_tree),
9 => self.declaration_2(
&children[0],
&children[1],
&children[2],
&children[3],
parse_tree,
),
10 => self.declaration_3(&children[0], parse_tree),
11 => self.scanner_directives_0(&children[0], &children[1], parse_tree),
12 => self.scanner_directives_1(&children[0], &children[1], &children[2], parse_tree),
13 => self.scanner_directives_2(&children[0], parse_tree),
14 => self.scanner_directives_3(&children[0], parse_tree),
15 => self.grammar_definition(&children[0], &children[1], &children[2], parse_tree),
16 => self.grammar_definition_list_0(&children[0], &children[1], parse_tree),
17 => self.grammar_definition_list_1(parse_tree),
18 => self.double_colon(&children[0], parse_tree),
19 => self.production(
&children[0],
&children[1],
&children[2],
&children[3],
parse_tree,
),
20 => self.alternations(&children[0], &children[1], parse_tree),
21 => self.alternations_list_0(&children[0], &children[1], &children[2], parse_tree),
22 => self.alternations_list_1(parse_tree),
23 => self.alternation(&children[0], parse_tree),
24 => self.alternation_list_0(&children[0], &children[1], parse_tree),
25 => self.alternation_list_1(parse_tree),
26 => self.factor_0(&children[0], parse_tree),
27 => self.factor_1(&children[0], parse_tree),
28 => self.factor_2(&children[0], parse_tree),
29 => self.factor_3(&children[0], parse_tree),
30 => self.symbol_0(&children[0], parse_tree),
31 => self.symbol_1(&children[0], parse_tree),
32 => self.symbol_2(&children[0], parse_tree),
33 => self.symbol_3(&children[0], parse_tree),
34 => self.token_literal_0(&children[0], parse_tree),
35 => self.token_literal_1(&children[0], parse_tree),
36 => self.token_literal_2(&children[0], parse_tree),
37 => self.simple_token(&children[0], &children[1], parse_tree),
38 => self.simple_token_opt_0(&children[0], parse_tree),
39 => self.simple_token_opt_1(parse_tree),
40 => self.token_with_states(
&children[0],
&children[1],
&children[2],
&children[3],
&children[4],
parse_tree,
),
41 => self.token_with_states_opt_0(&children[0], parse_tree),
42 => self.token_with_states_opt_1(parse_tree),
43 => self.string(&children[0], parse_tree),
44 => self.raw_string(&children[0], parse_tree),
45 => self.regex(&children[0], parse_tree),
46 => self.group(&children[0], &children[1], &children[2], parse_tree),
47 => self.optional(&children[0], &children[1], &children[2], parse_tree),
48 => self.repeat(&children[0], &children[1], &children[2], parse_tree),
49 => self.non_terminal(&children[0], &children[1], parse_tree),
50 => self.non_terminal_opt_0(&children[0], parse_tree),
51 => self.non_terminal_opt_1(parse_tree),
52 => self.identifier(&children[0], parse_tree),
53 => self.scanner_state(
&children[0],
&children[1],
&children[2],
&children[3],
&children[4],
parse_tree,
),
54 => self.scanner_state_list_0(&children[0], &children[1], parse_tree),
55 => self.scanner_state_list_1(parse_tree),
56 => self.state_list(&children[0], &children[1], parse_tree),
57 => self.state_list_list_0(&children[0], &children[1], &children[2], parse_tree),
58 => self.state_list_list_1(parse_tree),
59 => self.scanner_switch_0(
&children[0],
&children[1],
&children[2],
&children[3],
parse_tree,
),
60 => self.scanner_switch_1(
&children[0],
&children[1],
&children[2],
&children[3],
parse_tree,
),
61 => self.scanner_switch_2(&children[0], &children[1], &children[2], parse_tree),
62 => self.scanner_switch_opt_0(&children[0], parse_tree),
63 => self.scanner_switch_opt_1(parse_tree),
64 => self.a_s_t_control_0(&children[0], parse_tree),
65 => self.a_s_t_control_1(&children[0], parse_tree),
66 => self.cut_operator(&children[0], parse_tree),
67 => self.user_type_declaration(&children[0], &children[1], parse_tree),
68 => self.user_type_name(&children[0], &children[1], parse_tree),
69 => self.user_type_name_list_0(&children[0], &children[1], &children[2], parse_tree),
70 => self.user_type_name_list_1(parse_tree),
_ => Err(ParserError::InternalError(format!(
"Unhandled production number: {}",
prod_num
))
.into()),
}
}
}