summaryrefslogtreecommitdiffstats
path: root/src/output.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/output.hpp')
-rw-r--r--src/output.hpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/output.hpp b/src/output.hpp
index 0bff7d3..8c457dd 100644
--- a/src/output.hpp
+++ b/src/output.hpp
@@ -26,7 +26,7 @@
#pragma once
-#include "generator_lr0.hpp"
+#include "generator_slr.hpp"
#include <cstdio>
@@ -34,13 +34,11 @@
namespace solar {
class output_t {
-private:
+protected:
std::string prefix_str;
std::string token_prefix_str;
unsigned stack_size;
- const generator_lr0_t *generator;
-
std::string header_filename;
std::FILE *header_file;
@@ -65,16 +63,19 @@ private:
void emit_reduction(unsigned rule_id);
void emit_reductions();
- void emit_state_shift(unsigned i);
- void emit_state_reduce(const item_t &item, int rule_id);
- void emit_state(unsigned i);
void emit_states();
void emit_header_include();
void emit_source();
+ void initialize();
+
+ virtual const generator_t * get_generator() = 0;
+ virtual void emit_state(unsigned i) = 0;
+
+ output_t(const char *header, const char *source);
+
public:
- output_t(const generator_lr0_t *generator0, const char *header, const char *source);
- ~output_t();
+ virtual ~output_t();
void write();
};