diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 16:48:43 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 16:48:43 +0200 |
commit | 5a54699f18e3ac52fe18d854f6d57be6795ed8e5 (patch) | |
tree | 9c73cd95b8486e49b6258ff93ffbebed611dec02 /src/solar.cpp | |
parent | a5d1689bc7e05983a44cef5310ae7c50e10fefce (diff) | |
download | solar-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.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(); |