summaryrefslogtreecommitdiffstats
path: root/src/output.hpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-04-10 03:18:56 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-04-10 03:22:57 +0200
commit7a14a8ec2fd45a496bcaa15c13a7904ba09c4c95 (patch)
treeddf18d1df1a1b90e101aeb6eac999bd5efb3bfa7 /src/output.hpp
parent8feccee75dadbf970b2fb402a8c624ed9b25f041 (diff)
downloadsolar-7a14a8ec2fd45a496bcaa15c13a7904ba09c4c95.tar
solar-7a14a8ec2fd45a496bcaa15c13a7904ba09c4c95.zip
Split output_lr0_t out of output_t
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();
};