summaryrefslogtreecommitdiffstats
path: root/src/solar.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-04-10 16:48:43 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-04-10 16:48:43 +0200
commit5a54699f18e3ac52fe18d854f6d57be6795ed8e5 (patch)
tree9c73cd95b8486e49b6258ff93ffbebed611dec02 /src/solar.cpp
parenta5d1689bc7e05983a44cef5310ae7c50e10fefce (diff)
downloadsolar-5a54699f18e3ac52fe18d854f6d57be6795ed8e5.tar
solar-5a54699f18e3ac52fe18d854f6d57be6795ed8e5.zip
Replace hand-written parser by one generated by solar itself :D
Diffstat (limited to 'src/solar.cpp')
-rw-r--r--src/solar.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/solar.cpp b/src/solar.cpp
index e7eb00b..c0491aa 100644
--- a/src/solar.cpp
+++ b/src/solar.cpp
@@ -25,18 +25,19 @@
#include "lex.hpp"
-#include "parser.hpp"
+#include "parse.hpp"
#include "generator_slr.hpp"
#include "output_slr.hpp"
-
#include <cstdio>
+#include <cstdlib>
+#include <iostream>
#include <memory>
namespace solar {
-bool read_grammar(const char *filename, parser_state_t *state) {
+bool read_grammar(const char *filename, grammar_t *grammar) {
FILE *file = fopen(filename, "r");
if (!file) {
std::fprintf(stderr, "unable to open file %s\n", filename);
@@ -44,21 +45,21 @@ bool read_grammar(const char *filename, parser_state_t *state) {
}
std::unique_ptr<lex_t> lexer(new lex_t(file));
- parser_t *parser = parser_alloc();
+ parse_context_t *parser = parse_alloc(std::malloc);
int ret;
do {
int token;
- parser_value_t value;
+ parse_token_value_t value;
token = lexer->lex(&value);
if (token < 0) {
- std::fprintf(stderr, "error: %s at %s:%i:%i\n", value.error, filename,
+ std::fprintf(stderr, "error at %s:%i:%i\n", filename,
lexer->get_location().first_line, lexer->get_location().first_column);
return false;
}
- ret = parser_push(parser, token, &value, state);
+ ret = parse_push(parser, token, &value, grammar);
} while (ret > 0);
if (ret < 0) {
@@ -67,7 +68,7 @@ bool read_grammar(const char *filename, parser_state_t *state) {
return false;
}
- parser_free(parser);
+ parse_free(parser, std::free);
return true;
}
@@ -83,11 +84,11 @@ int main(int argc, char *argv[]) {
return 1;
}
- parser_state_t state;
- if (!read_grammar(argv[1], &state))
+ grammar_t grammar;
+ if (!read_grammar(argv[1], &grammar))
return 1;
- generator_slr_t generator(state.get_grammar());
+ generator_slr_t generator(grammar);
output_slr_t output(&generator, argv[3], argv[2]);
output.write();