summaryrefslogtreecommitdiff
path: root/src/PolishNotationParser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/PolishNotationParser.h')
-rw-r--r--src/PolishNotationParser.h40
1 files changed, 40 insertions, 0 deletions
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 <list>
+#include <deque>
+#include <string>
+#include <fstream>
+#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<Instruction> instr;
+ list<Atom> 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