LR(1) Parser Initial

This commit is contained in:
IlushaShurupov 2023-08-12 11:37:41 +03:00
parent 616441e049
commit 01b6f9099c
8 changed files with 161 additions and 46 deletions

10
Parser/tests/CLRTests.cpp Normal file
View file

@ -0,0 +1,10 @@
#include "NewPlacement.hpp"
#include "Testing.hpp"
#include "Parser.hpp"
using namespace tp;
TEST_DEF(CLR) {
TEST(false);
}

View file

@ -0,0 +1,48 @@
#include "NewPlacement.hpp"
#include "Testing.hpp"
#include "Parser.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());
}

View file

@ -5,47 +5,8 @@
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<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());
}
void testGrammar();
void testCLR();
int main(int argc, const char* argv[]) {
tp::ModuleManifest* deps[] = { &tp::gModuleParser, nullptr };
@ -55,7 +16,8 @@ int main(int argc, const char* argv[]) {
return 1;
}
testSimple();
testGrammar();
testCLR();
testModule.deinitialize();
return 0;