+29
-22
@@ -7,7 +7,8 @@
|
||||
#include <iostream>
|
||||
|
||||
int main(void) {
|
||||
std::string programStr = R"(
|
||||
try {
|
||||
std::string programStr = R"(
|
||||
func main() {
|
||||
x = 5;
|
||||
x -= 3;
|
||||
@@ -21,30 +22,36 @@ int main(void) {
|
||||
z = x + y;
|
||||
}
|
||||
)";
|
||||
furc::front::parser parser("<TEMP>", programStr);
|
||||
furc::front::ir_generator generator;
|
||||
furc::front::parser parser("<TEMP>", programStr);
|
||||
furc::front::ir_generator generator;
|
||||
|
||||
auto program = parser.parse();
|
||||
if (program.has_error()) {
|
||||
std::cerr << program << '\n';
|
||||
}
|
||||
program->accept(generator);
|
||||
|
||||
auto module = std::move(generator.move_module());
|
||||
std::cout << "Generated IR:\n";
|
||||
for (const auto& function : module.functions()) {
|
||||
std::cout << function->name() << ":\n";
|
||||
furlang::ir::block_index blockIndex = 0;
|
||||
for (const auto& block : function->blocks()) {
|
||||
std::cout << " # block " << blockIndex++ << '\n';
|
||||
for (const auto& instruction : block->instructions()) {
|
||||
std::cout << " " << *instruction << '\n';
|
||||
}
|
||||
std::cout << " " << *block->exit() << '\n';
|
||||
auto programResult = parser.parse();
|
||||
if (programResult.has_error()) {
|
||||
std::cerr << programResult.error() << '\n';
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
const auto& program = *programResult;
|
||||
program->accept(generator);
|
||||
|
||||
return 0;
|
||||
auto module = std::move(generator.move_module());
|
||||
std::cout << "Generated IR:\n";
|
||||
for (const auto& function : module.functions()) {
|
||||
std::cout << function->name() << ":\n";
|
||||
furlang::ir::block_index blockIndex = 0;
|
||||
for (const auto& block : function->blocks()) {
|
||||
std::cout << " # block " << blockIndex++ << '\n';
|
||||
for (const auto& instruction : block->instructions()) {
|
||||
std::cout << " " << *instruction << '\n';
|
||||
}
|
||||
std::cout << " " << *block->exit() << '\n';
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
} catch (...) {
|
||||
std::cerr << "Caught an exception in main!\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
#endif // LIBFURC
|
||||
|
||||
Reference in New Issue
Block a user