From 83c7854b3f6e60d6e3c430b9c3dd59b3773c4ef2 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Tue, 29 Nov 2022 19:02:10 +0200 Subject: Added a somewhat working version of the parser --- src/PolishNotationParser.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/PolishNotationParser.h (limited to 'src/PolishNotationParser.h') diff --git a/src/PolishNotationParser.h b/src/PolishNotationParser.h new file mode 100644 index 0000000..1de6f26 --- /dev/null +++ b/src/PolishNotationParser.h @@ -0,0 +1,40 @@ +#ifndef ARZU_INTERPRETER_PARSER +#define ARZU_INTERPRETER_PARSER + +#include +#include +#include +#include +#include "Memory.h" +using namespace std; + +struct Instruction { + string name; + unsigned argc; + void (*exec)(Memory&); + + Instruction(const char* str, unsigned argc, void (*exec)(Memory&)); +}; + +struct Atom { + bool (*isAtomChar)(char); + MemoryData* (*absorb)(ifstream&); + + Atom(bool (*isAtomChar)(char), MemoryData* (*absorb)(ifstream&)); +}; + +class PNParser { + deque instr; + list atoms; + + void evaluateFunction(Memory& mem, Function* func, ifstream& inFile); + void pushToWork(Memory& mem, MemoryData* data, ifstream& inFile); + void parseScope(ifstream& inFile, Memory& mem, int start, int end); +public: + PNParser() = default; + void addInstr(Instruction); + void addAtom(Atom); + void parse(ifstream&, Memory&); +}; + +#endif -- cgit v1.2.3