#pragma once #include #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::ostringstream string_stream; yy::location location; size_t file_offset; std::vector line_offsets; definition_group global_defs; std::string file_contents; parse_driver(const std::string& file) : file_name(file), file_offset(0) {} bool run_parse(); void write(const char* buff, size_t len); void mark_line(); size_t get_index(int line, int column); size_t get_line_end(int line); void print_highlighted_location(std::ostream& stream, const yy::location& loc); }; #define YY_DECL yy::parser::symbol_type yylex(yyscan_t yyscanner, parse_driver& drv) YY_DECL;