diff options
Diffstat (limited to 'src/solar.cpp')
-rw-r--r-- | src/solar.cpp | 23 |
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(); |