#include "NewPlacement.hpp" #include "Testing.hpp" #include "Parser.hpp" using namespace tp; TEST_DEF(Simple) { String source = R"( Start Body Body : [ Function ] | List | &; List : [ LIST ]; )"; auto state = CfGrammar::initializeCfGrammarParser(); CfGrammar grammar; if (!grammar.parse(state, source)) { TEST(0 && "Parsing is failed\n"); CfGrammar::deinitializeCfGrammarParser(state); return; } if (!grammar.compile()) { TEST(0 && "Compilation is failed\n"); CfGrammar::deinitializeCfGrammarParser(state); return; } CfGrammar::deinitializeCfGrammarParser(state); printf("Grammar accepted.\n"); List sentences; grammar.generateSentences(sentences); TEST_ASSERT(sentences.length() == 3); TEST_ASSERT(sentences.first()->data.terms.length() == 1); TEST_ASSERT(sentences.last()->data.terms.length() == 1); TEST(sentences.first()->data.terms.first()->data.id == "Function"); TEST(sentences.last()->data.terms.first()->data.id == "LIST"); printf("Example sentences formed from grammar: \n"); for (auto sentence : sentences) tp::CfGrammar::printSentence(sentence.data()); } int main(int argc, const char* argv[]) { tp::ModuleManifest* deps[] = { &tp::gModuleParser, nullptr }; tp::ModuleManifest testModule("CommandLineTest", nullptr, nullptr, deps); if (!testModule.initialize()) { return 1; } testSimple(); testModule.deinitialize(); return 0; }