47 lines
1.2 KiB
C++
47 lines
1.2 KiB
C++
#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;
|
|
}
|