#include #include "elna/source/semantic.h" #include "parser.hh" #include constexpr std::size_t pointer_size = 4; int main() { elna::source::driver driver{ "-" }; std::istringstream inp(R"( proc f(); begin end; var x: Int; begin x := 4 + 2 end. )"); elna::source::lexer lexer(inp); yy::parser parser(lexer, driver); if (auto result = parser()) { for (const auto& error : driver.errors()) { std::cerr << error->path << ':' << error->line() << ':' << error->column() << ": error: " << error->what() << '.' << std::endl; } return result; } auto symbol_table = elna::source::add_builtin_symbols(); elna::source::name_analysis_visitor name_analysis_visitor{ symbol_table, "-", pointer_size }; elna::source::type_analysis_visitor type_analysis_visitor{ symbol_table, "-", pointer_size }; name_analysis_visitor.visit(driver.tree.get()); for (auto& definition : driver.tree->definitions()) { std::cout << "Definition identifier: " << definition->identifier() << std::endl; } return 0; }