#pragma once #include #include #include "definition.hpp" #include "location.hh" #include "parser.hpp" struct parse_driver; void scanner_init(parse_driver* d, yyscan_t* scanner); void scanner_destroy(yyscan_t* scanner); struct parse_driver { std::string file_name; std::ifstream file_stream; yy::location location; size_t file_offset; std::vector line_offsets; definition_group global_defs; parse_driver(const std::string& file) : file_name(file) {} void run_parse() { file_stream.open(file_name); if(!file_stream.good()) throw 0; yyscan_t scanner; scanner_init(this, &scanner); yy::parser parser(scanner, *this); parser(); scanner_destroy(&scanner); } int get() { return file_stream.get(); } }; #define YY_DECL yy::parser::symbol_type yylex(yyscan_t yyscanner, parse_driver& drv) YY_DECL;