tree-sitter/spec/compiler/generate_parsers.cpp
Max Brunsfeld 04d18b56ed Cleanup
2014-01-04 15:30:05 -08:00

26 lines
No EOL
897 B
C++

#include "spec_helper.h"
#include "table_builder.h"
#include "parse_table.h"
#include "prepare_grammar.h"
#include "c_code.h"
#include "../fixtures/grammars/arithmetic.h"
#include <fstream>
START_TEST
describe("code generation", []() {
string test_parser_dir = src_dir() + "/spec/fixtures/parsers";
it("works for the arithmetic grammar", [&]() {
Grammar grammar = test_grammars::arithmetic();
auto grammars = prepare_grammar(grammar);
auto tables = lr::build_tables(grammars.first, grammars.second);
auto rule_names = grammars.first.rule_names();
auto token_names = grammars.second.rule_names();
rule_names.insert(rule_names.end(), token_names.begin(), token_names.end());
auto code = code_gen::c_code(rule_names, tables.first, tables.second);
ofstream(test_parser_dir + "/arithmetic.c") << code;
});
});
END_TEST