elna/parser/main.cpp

47 lines
1.2 KiB
C++
Raw Permalink Normal View History

2024-07-07 18:50:15 +02:00
#include "parser.hpp"
#include <iostream>
#include <sstream>
int main()
{
std::istringstream inp(
"const world = 5, hello = 7;\n"
"var x: Int, y: ^Int;\n"
"begin\n"
"end.\n"
);
std::unique_ptr<elna::source::program> program;
int result{ 1 };
elna::syntax::FooLexer lexer(inp);
yy::parser parser(lexer, program);
try
{
result = parser();
}
catch (yy::parser::syntax_error& syntax_error)
{
std::cerr << syntax_error.location << ": " << syntax_error.what() << std::endl;
return result;
}
for (auto& definition : program->definitions())
{
auto const_definition = dynamic_cast<elna::source::constant_definition *>(definition.get());
std::cout << "const " << const_definition->identifier() << " = "
<< const_definition->body().number() << std::endl;
}
for (auto& declaration : program->declarations())
{
std::cout << "var " << declaration->identifier() << ": ";
if (declaration->type().is_pointer())
{
std::cout << '^';
}
std::cout << declaration->type().base() << std::endl;
}
return result;
}