summaryrefslogtreecommitdiffstats
path: root/src/solar.cpp
diff options
context:
space:
mode:
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();