parser error handling
This commit is contained in:
parent
d4c85a3d86
commit
2484ea9d9c
10 changed files with 119 additions and 72 deletions
|
|
@ -4,7 +4,41 @@
|
|||
#include <lalr/Parser.hpp>
|
||||
#include <lalr/string_literal.hpp>
|
||||
|
||||
typedef void* UserData;
|
||||
#include "compiler/statement.h"
|
||||
#include "compiler/expression.h"
|
||||
|
||||
#include "Tree.hpp"
|
||||
|
||||
struct UserNode {
|
||||
obj::BCgen::Expression* expression = nullptr;
|
||||
obj::BCgen::Statement* statement = nullptr;
|
||||
tp::Buffer<tp::String>* arguments = nullptr;
|
||||
|
||||
UserNode(obj::BCgen::Statement* stm) :
|
||||
statement(stm) {}
|
||||
|
||||
UserNode(obj::BCgen::Expression* expr) :
|
||||
expression(expr) {}
|
||||
|
||||
UserNode(tp::Buffer<tp::String>* argList) :
|
||||
arguments(argList) {}
|
||||
|
||||
UserNode() = default;
|
||||
|
||||
obj::BCgen::Statement* releaseStm() {
|
||||
auto out = statement;
|
||||
statement = nullptr;
|
||||
return out;
|
||||
}
|
||||
|
||||
void destroy() {
|
||||
delete statement;
|
||||
delete arguments;
|
||||
delete expression;
|
||||
}
|
||||
};
|
||||
|
||||
typedef UserNode UserData;
|
||||
typedef char SymbolType;
|
||||
|
||||
typedef std::basic_string<SymbolType>::iterator IteratorType;
|
||||
|
|
@ -13,4 +47,4 @@ extern const lalr::ParserStateMachine* oscript_parser_state_machine;
|
|||
|
||||
typedef lalr::Parser<IteratorType, UserData> LalrParser;
|
||||
|
||||
void bind(LalrParser& parser);
|
||||
void bind(LalrParser& parser);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue