49 lines
No EOL
1.1 KiB
C++
49 lines
No EOL
1.1 KiB
C++
|
|
#include "NewPlacement.hpp"
|
|
#include "Parser.hpp"
|
|
#include "Testing.hpp"
|
|
|
|
using namespace tp;
|
|
|
|
TEST_DEF(Grammar) {
|
|
|
|
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<CfGrammar::Sentence> 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());
|
|
} |