parser error handling

This commit is contained in:
IlyaShurupov 2024-03-06 17:31:17 +03:00 committed by Ilya Shurupov
parent d4c85a3d86
commit 2484ea9d9c
10 changed files with 119 additions and 72 deletions

View file

@ -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);