Fixed the generated parser

This commit is contained in:
Robin Jadoul 2017-01-27 16:11:33 +01:00
parent d2b106e6e5
commit 4b14e6ac37
10 changed files with 282 additions and 178 deletions

View File

@ -4,6 +4,7 @@
#include "Parsodus/util/firstset.h"
#include "Parsodus/util/followset.h"
#include <deque>
#include <map>
#include <memory>
#include <set>
@ -26,7 +27,6 @@ namespace pds {
std::vector<std::string> tail; ///< The replacement rule
const std::string name; ///< An optional name for this rule, if it's empty, there's no name
std::pair<bool, std::pair<int, PrecedenceType>> precedence; ///< precedence for this rule, the bool indicates whether it's valid (invalid if there is no rightmost terminal and no explicit precedence)
bool operator<(const Rule& other) const {
if(head != other.head){
return head < other.head;
@ -50,7 +50,7 @@ namespace pds {
std::string start; ///< the starting variable
std::set<std::string> variables; ///< the variables
std::set<std::string> terminals; ///< the terminals
std::vector<std::shared_ptr<Rule>> rules; ///< the replacement rules
std::deque<std::shared_ptr<Rule>> rules; ///< the replacement rules
std::map<std::string, std::pair<int, PrecedenceType> > precedence; ///< lower value -> higher precedence
std::unique_ptr<util::FirstSet> first;

View File

@ -3,7 +3,7 @@
#define PARSODUS_PARSER_H
#include "ParsodusLexer.h"
#include "parsodusParser.h"
#include "Parsodus/parsodusParser.h"
#include "config.h"
#include <deque>
@ -39,6 +39,9 @@ class Parser : public parsodusParser<std::unique_ptr<Config>> {
std::unique_ptr<Config> reduce_21(std::deque<Token> subparts) override;
std::unique_ptr<Config> reduce_22(std::deque<Token> subparts) override;
std::unique_ptr<Config> reduce_23(std::deque<Token> subparts) override;
std::unique_ptr<Config> reduce_24(std::deque<Token> subparts) override;
std::unique_ptr<Config> reduce_25(std::deque<Token> subparts) override;
std::unique_ptr<Config> reduce_26(std::deque<Token> subparts) override;
private:
ParsodusLexer m_lex;

View File

@ -16,15 +16,19 @@ enum class parsodusParser_Symbol : std::uint64_t {
T_EOF,
T_ARROW,
T_COLON,
T_COMMA,
T_GRAMMAR,
T_LBRACKET,
T_LEFT,
T_LEXESIS,
T_LEXESISNAME,
T_NONASSOC,
T_NUM,
T_PARSER,
T_PARSERTYPE,
T_PIPE,
T_PRECEDENCE,
T_RBRACKET,
T_RIGHT,
T_RULENAME,
T_SEMICOLON,
@ -35,6 +39,7 @@ enum class parsodusParser_Symbol : std::uint64_t {
V_bodies,
V_body,
V_error,
V_opt_prec,
V_precedence,
V_precedences,
V_rule,
@ -111,6 +116,9 @@ class parsodusParser {
virtual Value reduce_21(std::deque<Token> subparts) = 0;
virtual Value reduce_22(std::deque<Token> subparts) = 0;
virtual Value reduce_23(std::deque<Token> subparts) = 0;
virtual Value reduce_24(std::deque<Token> subparts) = 0;
virtual Value reduce_25(std::deque<Token> subparts) = 0;
virtual Value reduce_26(std::deque<Token> subparts) = 0;
virtual Value reduce_3(std::deque<Token> subparts) = 0;
virtual Value reduce_4(std::deque<Token> subparts) = 0;
virtual Value reduce_5(std::deque<Token> subparts) = 0;
@ -147,8 +155,8 @@ class parsodusParser<bool> {
#define TABLE parsodusParser___Table___parsodusParser
#define REDUCE_COUNT parsodusParser___Num_Reduces___parsodusParser
// Not a static member because the table should not be replicated for different instantiations of the parser
extern const std::uint64_t TABLE[43][30];
extern const unsigned char REDUCE_COUNT[24];
extern const std::uint64_t TABLE[49][35];
extern const unsigned char REDUCE_COUNT[27];
enum Action {
ERROR = 0,
@ -169,8 +177,12 @@ inline std::string to_string(parsodusParser_Symbol s) {
return "T_ARROW";
case parsodusParser_Symbol::T_COLON:
return "T_COLON";
case parsodusParser_Symbol::T_COMMA:
return "T_COMMA";
case parsodusParser_Symbol::T_GRAMMAR:
return "T_GRAMMAR";
case parsodusParser_Symbol::T_LBRACKET:
return "T_LBRACKET";
case parsodusParser_Symbol::T_LEFT:
return "T_LEFT";
case parsodusParser_Symbol::T_LEXESIS:
@ -179,6 +191,8 @@ inline std::string to_string(parsodusParser_Symbol s) {
return "T_LEXESISNAME";
case parsodusParser_Symbol::T_NONASSOC:
return "T_NONASSOC";
case parsodusParser_Symbol::T_NUM:
return "T_NUM";
case parsodusParser_Symbol::T_PARSER:
return "T_PARSER";
case parsodusParser_Symbol::T_PARSERTYPE:
@ -187,6 +201,8 @@ inline std::string to_string(parsodusParser_Symbol s) {
return "T_PIPE";
case parsodusParser_Symbol::T_PRECEDENCE:
return "T_PRECEDENCE";
case parsodusParser_Symbol::T_RBRACKET:
return "T_RBRACKET";
case parsodusParser_Symbol::T_RIGHT:
return "T_RIGHT";
case parsodusParser_Symbol::T_RULENAME:
@ -207,6 +223,8 @@ inline std::string to_string(parsodusParser_Symbol s) {
return "V_body";
case parsodusParser_Symbol::V_error:
return "V_error";
case parsodusParser_Symbol::V_opt_prec:
return "V_opt_prec";
case parsodusParser_Symbol::V_precedence:
return "V_precedence";
case parsodusParser_Symbol::V_precedences:
@ -401,6 +419,18 @@ Value parsodusParser<Value>::parse() {
valueStack.emplace(symbol, reduce_23(std::move(dq)));
break;
case 24:
valueStack.emplace(symbol, reduce_24(std::move(dq)));
break;
case 25:
valueStack.emplace(symbol, reduce_25(std::move(dq)));
break;
case 26:
valueStack.emplace(symbol, reduce_26(std::move(dq)));
break;
default:
assert(false); //There should be no such rule
break;

View File

@ -11,7 +11,7 @@ precedence:
right "C"
start: <start>
grammar:
<start> ::= <x> <x> [startrule];
<x> ::= "A" <x> [xA]
| "B" [xB]
<start> ::= <x> <x> [startrule];
<x> ::= "A" <x> [a, nonassoc 42]
| "B"
;

View File

@ -33,6 +33,8 @@ add_library(pds
driver.cpp
inputparser.cpp
backendmanager.cpp
parsodusParser.cpp
parser.cpp
"${CMAKE_CURRENT_BINARY_DIR}/ParsodusLexer.cpp"
)
add_dependencies(pds mstch::mstch)

View File

@ -12,6 +12,8 @@ namespace pds {
Config InputParser::parseInput(std::istream& is) {
ParsodusLexer lex(is);
Parser parser(lex);
//TODO: collect terminals from lexesis (if lexesisFile set)
//TODO: check all rules for exisiting terminals/variables
return *parser.parse();
}
}

View File

@ -35,30 +35,31 @@ Parser::Token Parser::lex() {
case ParsodusLexer::PARSERTYPE:
cnf = std::make_unique<Config>();
cnf->parserType = orig.content;
return Token{ parsodusParser_Symbol::T_PARSERTYPE, cnf };
return Token{ parsodusParser_Symbol::T_PARSERTYPE, std::move(cnf) };
case ParsodusLexer::LEFT:
cnf = std::make_unique<Config>();
cnf->grammar.precedence["type"] = std::make_pair(0, PrecedenceType::LEFT);
return Token{ parsodusParser_Symbol::T_LEFT, cnf };
return Token{ parsodusParser_Symbol::T_LEFT, std::move(cnf) };
case ParsodusLexer::RIGHT:
cnf = std::make_unique<Config>();
cnf->grammar.precedence["type"] = std::make_pair(2, PrecedenceType::RIGHT);
return Token{ parsodusParser_Symbol::T_RIGHT, cnf };
return Token{ parsodusParser_Symbol::T_RIGHT, std::move(cnf) };
case ParsodusLexer::NONASSOC:
cnf = std::make_unique<Config>();
cnf->grammar.precedence["type"] = std::make_pair(1, PrecedenceType::NONASSOC);
return Token{ parsodusParser_Symbol::T_NONASSOC, cnf };
return Token{ parsodusParser_Symbol::T_NONASSOC, std::move(cnf) };
case ParsodusLexer::LEXESISNAME:
s = parsodusParser_Symbol::T_LEXESISNAME;
break;
cnf = std::make_unique<Config>();
cnf->lexesisFile = orig.content;
return Token{ parsodusParser_Symbol::T_LEXESISNAME, std::move(cnf) };
case ParsodusLexer::TERMINAL:
cnf = std::make_unique<Config>();
cnf->grammar.terminals.insert(orig.content);
return { parsodusParser_Symbol::T_TERMINAL, cnf };
cnf->grammar.terminals.insert(orig.content.substr(1, orig.content.length() - 2));
return { parsodusParser_Symbol::T_TERMINAL, std::move(cnf) };
case ParsodusLexer::VARIABLE:
cnf = std::make_unique<Config>();
cnf->grammar.variables.insert(orig.content);
return { parsodusParser_Symbol::T_VARIABLE, cnf };
cnf->grammar.variables.insert(orig.content.substr(1, orig.content.length() - 2));
return { parsodusParser_Symbol::T_VARIABLE, std::move(cnf) };
case ParsodusLexer::ARROW:
s = parsodusParser_Symbol::T_ARROW;
break;
@ -74,10 +75,23 @@ Parser::Token Parser::lex() {
case ParsodusLexer::RULENAME:
cnf = std::make_unique<Config>();
cnf->grammar.rules.emplace_back(std::make_shared<Rule>("", std::vector<std::string>{}, orig.content));
return { parsodusParser_Symbol::T_RULENAME, cnf };
default:
break;
return { parsodusParser_Symbol::T_RULENAME, std::move(cnf) };
case ParsodusLexer::NUM:
cnf = std::make_unique<Config>();
cnf->grammar.precedence["num"] = {std::stoi(orig.content), PrecedenceType::RIGHT};
return { parsodusParser_Symbol::T_NUM, std::move(cnf) };
case ParsodusLexer::LBRACKET:
s = parsodusParser_Symbol::T_LBRACKET;
break;
case ParsodusLexer::RBRACKET:
s = parsodusParser_Symbol::T_RBRACKET;
break;
case ParsodusLexer::COMMA:
s = parsodusParser_Symbol::T_COMMA;
break;
case ParsodusLexer::nonmatching:
//ignore
break;
}
return Token{ s, nullptr };
@ -94,14 +108,14 @@ std::unique_ptr<Config> Parser::reduce_0(std::deque<Token> subparts) {
subparts[0].value->parserType = subparts[1].value->parserType;
else if (!subparts[1].value->parserType.empty() &&
subparts[1].value->parserType != subparts[0].value->parserType)
throw "Found more than 1 different parser types"; // MODIFY EXCEPTION
throw SyntaxError("Found more than 1 different parser types");
// Check whether there are no different lexesisFile's given
if (subparts[0].value->lexesisFile.empty())
subparts[0].value->lexesisFile = subparts[1].value->lexesisFile;
else if (!subparts[1].value->lexesisFile.empty() &&
subparts[1].value->lexesisFile != subparts[0].value->lexesisFile)
throw "Found more than 1 different lexesis files"; // MODIFY EXCEPTION
throw SyntaxError("Found more than 1 different lexesis files");
// Check whether there are no different grammar's given
// Check whether there are no different start terminals given
@ -109,169 +123,196 @@ std::unique_ptr<Config> Parser::reduce_0(std::deque<Token> subparts) {
subparts[0].value->grammar.start = subparts[1].value->grammar.start;
else if (!subparts[1].value->grammar.start.empty() &&
subparts[1].value->grammar.start != subparts[0].value->grammar.start)
throw "Found more than 1 different start terminals"; // MODIFY EXCEPTION
throw SyntaxError("Found more than 1 different start terminals");
// Check whether there are no different variable sets given
if (subparts[0].value->grammar.variables.empty())
subparts[0].value->grammar.variables = subparts[1].value->grammar.variables;
else if (!subparts[1].value->grammar.variables.empty() &&
subparts[1].value->grammar.variables != subparts[0].value->grammar.variables)
throw "Found more than 1 different variable sets"; // MODIFY EXCEPTION
throw SyntaxError("Found more than 1 different variable sets");
// Check whether there are no different terminal sets given
if (subparts[0].value->grammar.terminals.empty())
subparts[0].value->grammar.terminals = subparts[1].value->grammar.terminals;
else if (!subparts[1].value->grammar.terminals.empty() &&
subparts[1].value->grammar.terminals != subparts[0].value->grammar.terminals)
throw "Found more than 1 different terminal sets"; // MODIFY EXCEPTION
throw SyntaxError("Found more than 1 different terminal sets");
// Check whether there are no different rule sets given
if (subparts[0].value->grammar.rules.empty())
subparts[0].value->grammar.rules = subparts[1].value->grammar.rules;
else if (!subparts[1].value->grammar.rules.empty() &&
subparts[1].value->grammar.rules != subparts[0].value->grammar.rules)
throw "Found more than 1 different rule sets"; // MODIFY EXCEPTION
else if (!subparts[1].value->grammar.rules.empty())
throw SyntaxError("Found more than 1 different rule sets");
// Check whether there are no different precedence sets given
if (subparts[0].value->grammar.precedence.empty())
subparts[0].value->grammar.precedence = subparts[1].value->grammar.precedence;
else if (!subparts[1].value->grammar.precedence.empty() &&
subparts[1].value->grammar.precedence != subparts[0].value->grammar.precedence)
throw "Found more than 1 different precedence sets"; // MODIFY EXCEPTION
throw SyntaxError("Found more than 1 different precedence sets");
// REMARK: Everything is now put into subparts[0]
// Set precedence of each rule
for(std::shared_ptr<Rule>& rule : subparts[0].value->grammar.rules) {
if (rule->precedence.first) continue;
if (rule->tail.size() == 0)
rule->precedence = std::make_pair(false,std::make_pair(-1,PrecedenceType::LEFT));
auto prec = subparts[0].value->grammar.precedence.find(rule->tail.back());
rule->precedence = {false,{0,PrecedenceType::RIGHT}};
std::string rightmostTerm;
for (const std::string& term : rule->tail) {
if (subparts[0].value->grammar.terminals.count(term)) {
rightmostTerm = term;
}
}
auto prec = subparts[0].value->grammar.precedence.find(rightmostTerm);
if (prec != subparts[0].value->grammar.precedence.end())
rule->precedence = std::make_pair(true,prec);
else rule->precedence = std::make_pair(false,prec);
rule->precedence = {true,prec->second};
else rule->precedence = {false,{0, PrecedenceType::RIGHT}};
}
// REMARK: No option yet for explicit rule precedence
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_1(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_1(std::deque<Token>) {
return std::make_unique<Config>();
}
std::unique_ptr<Config> Parser::reduce_2(std::deque<Token> subparts) {
// "PARSER" "COLON" "PARSERTYPE"
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_2(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_3(std::deque<Token> subparts) {
// "LEXESIS" "COLON" "LEXESISNAME"
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_3(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_4(std::deque<Token> subparts) {
// "TERMINALS" "COLON" <terminals>
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_4(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_5(std::deque<Token> subparts) {
// "PRECEDENCE" "COLON" <precedences>
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_5(std::deque<Token> subparts) {
// "START" "COLON" "TERMINAL"
auto cnf = std::make_unique<Config>();
cnf->grammar.start = *subparts[2].value->terminals.begin();
return std::move(cnf);
}
std::unique_ptr<Config> Parser::reduce_6(std::deque<Token> subparts) {
// "START" "COLON" "VARIABLE"
auto cnf = std::make_unique<Config>();
cnf->grammar.start = *subparts[2].value->grammar.variables.begin();
return cnf;
}
std::unique_ptr<Config> Parser::reduce_7(std::deque<Token> subparts) {
// "GRAMMAR" "COLON" <rules>
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_7(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_8(std::deque<Token> subparts) {
// "TERMINAL" <terminals>
subparts[1].value->grammar.terminals.insert(*subparts[0].value->grammar.terminals.begin());
return std::move(subparts[1].value);
}
std::unique_ptr<Config> Parser::reduce_8(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_9(std::deque<Token>) {
// ""
return std::make_unique<Config>();
}
std::unique_ptr<Config> Parser::reduce_9(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_10(std::deque<Token> subparts) {
// <precedence> <terminals> <precedences>
auto other = std::move(subparts[2].value);
subparts.pop_back();
std::unique_ptr<Config> cfg = reduce_10(std::move(subparts));
std::unique_ptr<Config> cfg = reduce_11(std::move(subparts));
for(auto& p : cfg->grammar.precedence)
other->grammar.precedence.insert(p);
return std::move(other);
return other;
}
std::unique_ptr<Config> Parser::reduce_10(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_11(std::deque<Token> subparts) {
// <precedence> <terminals>
PrecedenceType typ = subparts[0].value->grammar.precedence["type"].second;
for (std::string t : subparts[1].value->grammar.terminals) {
subparts[1].value->grammar.precedence[t] = {m_precedenceCounter, typ};
}
subparts[1].value->grammar.terminals.clear();
m_precedenceCounter++;
return std::move(subparts[1].value);
}
std::unique_ptr<Config> Parser::reduce_11(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_12(std::deque<Token> subparts) {
//"LEFT"
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_12(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_13(std::deque<Token> subparts) {
// "RIGHT"
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_13(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_14(std::deque<Token> subparts) {
// "NONASSOC"
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_14(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_15(std::deque<Token> subparts) {
// <rule> <rules>
subparts[1].value->grammar.rules.emplace_back(std::move(subparts[0].value->grammar.rules[0]));
for (auto it = subparts[0].value->grammar.rules.rbegin(); it != subparts[0].value->grammar.rules.rend(); it++) {
subparts[1].value->grammar.rules.emplace_front(std::move(*it));
}
for (auto& v : subparts[0].value->grammar.variables) {
subparts[1].value->grammar.variables.insert(v);
}
return std::move(subparts[1].value);
}
std::unique_ptr<Config> Parser::reduce_15(std::deque<Token> subparts) {
std::unique_ptr<Config> Parser::reduce_16(std::deque<Token> subparts) {
// <rule>
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_16(std::deque<Token> subparts) {
//"VARIABLE" "ARROW" <bodies>
std::string head = subparts[0].value->grammar.rules[0]->head;
subparts[0].value->grammar.rules.clear();
for(std::shared_ptr<Rule> rule : subparts[2].value->grammar.rules)
subparts[0].value->grammar.rules.push_back(std::make_shared(Rule(head, rule->tail, rule->name))); // SOMETHING WRONG WITH THIS STATEMENT
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_17(std::deque<Token> subparts) {
// <body> "PIPE" <bodies>
for(auto rule : subparts[2].value->grammar.rules)
subparts[0].value->grammar.rules.push_back(rule);
return std::move(subparts[0].value);
//"VARIABLE" "ARROW" <bodies>
std::string head = *subparts[0].value->grammar.variables.begin();
for (auto& rule : subparts[2].value->grammar.rules)
rule->head = head;
subparts[2].value->grammar.variables.insert(head);
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_18(std::deque<Token> subparts) {
// <body> "PIPE" <bodies>
subparts[2].value->grammar.rules.emplace_front(std::move(subparts[0].value->grammar.rules[0]));
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_19(std::deque<Token> subparts) {
// <body>
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_19(std::deque<Token> subparts) {
// <term_var> "RULENAME"
subparts[0].value->grammar.rules[0]->name = subparts[1].value->grammar.rules[0]->name;
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_20(std::deque<Token> subparts) {
// <term_var> "LBRACKET" "RULENAME" <opt_prec> "LBRACKET"
subparts[2].value->grammar.rules[0]->tail = std::move(subparts[0].value->grammar.rules[0]->tail);
if (subparts[3].value) {
subparts[2].value->grammar.rules[0]->precedence = {true, subparts[3].value->grammar.precedence["rule"]};
}
return std::move(subparts[2].value);
}
std::unique_ptr<Config> Parser::reduce_21(std::deque<Token> subparts) {
// <term_var>
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_21(std::deque<Token> subparts) {
// <term_var> "VARIABLE"
subparts[0].value->grammar.rules[0]->tail.push_back(subparts[1].value->grammar.rules[0]->tail[0]);
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_22(std::deque<Token> subparts) {
// <term_var> "TERMINAL"
subparts[0].value->grammar.rules[0]->tail.push_back(subparts[1].value->grammar.rules[0]->tail[0]);
return std::move(subparts[0].value);
// <term_var> "VARIABLE"
subparts[0].value->grammar.rules[0]->tail.emplace_back(*subparts[1].value->grammar.variables.begin());
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_23(std::deque<Token> subparts) {
// <term_var> "TERMINAL"
subparts[0].value->grammar.rules[0]->tail.emplace_back(*subparts[1].value->grammar.terminals.begin());
return std::move(subparts[0].value);
}
std::unique_ptr<Config> Parser::reduce_24(std::deque<Token>) {
// ""
auto cnf = std::make_unique<Config>();
cnf->grammar.rules.emplace_back(std::make_shared<Rule>("", {}));
return std::move(subparts[0].value);
cnf->grammar.rules.emplace_back(std::make_shared<Rule>("", std::vector<std::string>{}));
return cnf;
}
std::unique_ptr<Config> Parser::reduce_25(std::deque<Token> subparts) {
// <opt_prec> ::= "COMMA" <precedence> "NUM"
subparts[1].value->grammar.precedence["rule"] = {subparts[2].value->grammar.precedence["num"].first, subparts[1].value->grammar.precedence["type"].second};
return std::move(subparts[1].value);
}
std::unique_ptr<Config> Parser::reduce_26(std::deque<Token>) {
// <opt_prec> ::=
return nullptr;
}
} //namespace pds

View File

@ -8,7 +8,7 @@ PARSERTYPE = [_a-zA-Z]+(\([0-9][0-9]*\))
LEFT = left
RIGHT = right
NONASSOC = nonassoc
NUM = [1-9][0-9]*
NUM = [0-9]*
LEXESISNAME = [_a-zA-Z]+\.lxs
TERMINAL = "[_a-zA-Z]+"
VARIABLE = <[_a-zA-Z]+>
@ -16,5 +16,8 @@ ARROW = ::=
SEMICOLON = ;
COLON = :
PIPE = \|
RULENAME = \[[_a-zA-Z][_a-zA-Z0-9]*\]
RULENAME = [_a-zA-Z][_a-zA-Z0-9]*
LBRACKET = \[
RBRACKET = \]
COMMA = ,
ignore = \t| |\n|\r

View File

@ -1,98 +1,110 @@
#include "parsodusParser.h"
#include "Parsodus/parsodusParser.h"
#define TABLE parsodusParser___Table___parsodusParser
#define REDUCE_COUNT parsodusParser___Num_Reduces___parsodusParser
const std::uint64_t TABLE[43][30] = {
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (1) << 2),(ERROR | (0) << 2),(SHIFT | (2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (5) << 2),(ERROR | (0) << 2),(SHIFT | (6) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((7) << 2),((8) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (11) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (1) << 2),(ERROR | (0) << 2),(SHIFT | (2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (5) << 2),(ERROR | (0) << 2),(SHIFT | (6) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((7) << 2),((15) << 2),((0) << 2),((0) << 2), },
{ (ACCEPT | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (16) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((17) << 2),((18) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (19) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (20) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (21) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (22) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((24) << 2),((25) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (26) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(SHIFT | (27) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((28) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_sections) << 31 | 0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(SHIFT | (29) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(SHIFT | (16) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((17) << 2),((30) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 1) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 1) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 1) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 11) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(SHIFT | (27) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((31) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(SHIFT | (27) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((32) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),
((33) << 2),((34) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((35) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 14) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 14) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 14) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(SHIFT | (21) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(SHIFT | (22) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(SHIFT | (23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((24) << 2),((36) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 7) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (37) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (38) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_bodies) << 31 | 18) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 20) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (39) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 20) << 2),(ERROR | (0) << 2),(SHIFT | (40) << 2),(ERROR | (0) << 2),(SHIFT | (41) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 9) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 16) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),
((42) << 2),((34) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((35) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 19) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 19) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 21) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 21) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 21) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 21) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 21) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_bodies) << 31 | 17) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
const std::uint64_t TABLE[49][35] = {
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_sections) << 31 | 1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (5) << 2),(ERROR | (0) << 2),(SHIFT | (6) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((7) << 2),((8) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (11) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_sections) << 31 | 1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (1) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (5) << 2),(ERROR | (0) << 2),(SHIFT | (6) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((7) << 2),((15) << 2),((0) << 2),((0) << 2), },
{ (ACCEPT | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (16) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((17) << 2),((18) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (19) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (20) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (21) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (22) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((24) << 2),((25) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (26) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(SHIFT | (27) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((28) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_sections) << 31 | 0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(SHIFT | (29) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 16) << 2),(SHIFT | (16) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((17) << 2),((30) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 7) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 3) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 2) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 12) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 14) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedence) << 31 | 13) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(SHIFT | (27) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((31) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 5) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 6) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(SHIFT | (27) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 9) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((32) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_section) << 31 | 4) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),
((33) << 2),((34) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((35) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rules) << 31 | 15) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),(SHIFT | (21) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),(SHIFT | (22) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),(SHIFT | (23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 11) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((24) << 2),((36) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_terminals) << 31 | 8) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (37) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (38) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_bodies) << 31 | 19) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (39) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 21) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 21) << 2),(ERROR | (0) << 2),(SHIFT | (40) << 2),(ERROR | (0) << 2),(SHIFT | (41) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_precedences) << 31 | 10) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_rule) << 31 | 17) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 24) << 2),
((42) << 2),((34) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((35) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (43) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 23) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_term_var) << 31 | 22) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_bodies) << 31 | 18) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (44) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_opt_prec) << 31 | 26) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((45) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (21) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (22) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (23) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((46) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (47) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(SHIFT | (48) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 20) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_body) << 31 | 20) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
{ (ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(REDUCE | (static_cast<std::uint64_t>(parsodusParser_Symbol::V_opt_prec) << 31 | 25) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),(ERROR | (0) << 2),
((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2),((0) << 2), },
};
const unsigned char REDUCE_COUNT[24] = { 2,3,3,3,3,3,3,2,0,3,2,1,1,1,2,1,4,3,1,2,1,2,2,0, };
const unsigned char REDUCE_COUNT[27] = { 2,0,3,3,3,3,3,3,2,0,3,2,1,1,1,2,1,4,3,1,5,1,2,2,0,3,0, };
bool parsodusParser<bool>::parse() {

View File

@ -18,18 +18,25 @@ terminals:
"SEMICOLON"
"COLON"
"PIPE"
"NUM"
"RULENAME"
"LBRACKET"
"RBRACKET"
"COMMA"
start:
<sections>
grammar:
<sections> ::= <section> <sections>;
<sections> ::= <section> <sections>
|
;
<section> ::= "PARSER" "COLON" "PARSERTYPE"
| "LEXESIS" "COLON" "LEXESISNAME"
| "TERMINALS" "COLON" <terminals>
| "PRECEDENCE" "COLON" <precedences>
| "START" "COLON" "TERMINAL"
| "START" "COLON" "VARIABLE"
| "GRAMMAR" "COLON" <rules>
;
@ -56,7 +63,7 @@ grammar:
| <body>
;
<body> ::= <term_var> "RULENAME"
<body> ::= <term_var> "LBRACKET" "RULENAME" <opt_prec> "RBRACKET"
| <term_var>
;
@ -64,3 +71,7 @@ grammar:
| <term_var> "TERMINAL"
|
;
<opt_prec> ::= "COMMA" <precedence> "NUM"
|
;