#include #include #include #include #include "gen_parser.hpp" #include "gen_lexer.hpp" namespace pslang::parser { ast::statement_ptr parse(std::string_view path) { yyin = fopen(path.data(), "r"); if (!yyin) throw std::system_error(std::make_error_code(static_cast(errno))); ast::location location{.begin = {.filename = path}, .end = {.filename = path}}; indented_statement_list statements; context ctx{location, statements}; bison::parser parser(ctx); parser.parse(); fclose(yyin); // Add a fake AST node for the entry point return std::make_shared(ast::function_definition{ { "[entry point]", {}, std::make_shared(types::unit_type{}), {}, }, finalize(std::move(statements)), {}, }); } }