diff options
Diffstat (limited to 'test-lexer.cpp')
-rw-r--r-- | test-lexer.cpp | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/test-lexer.cpp b/test-lexer.cpp index 735f670..a94e550 100644 --- a/test-lexer.cpp +++ b/test-lexer.cpp @@ -28,115 +28,5 @@ protected: }; TEST_F(Test, BNF) { - std::string LexTop{"preprocessing-token"}; - BNF LexBNF{ - {"preprocessing-token", {{"identifier"}, - {"preprocessing-op-or-punc"}, - {"pp-number"}}}, - - {"identifier", {{"identifier-nondigit"}, - {"identifier", "identifier-nondigit"}, - {"identifier", "digit"}}}, - {"digit", {{"0"}, {"1"}, {"2"}, {"3"}, {"4"}, {"5"}, {"6"}, {"7"}, {"8"}, {"9"} }}, - {"identifier-nondigit", - {{"a"}, {"b"}, {"c"}, {"d"}, {"e"}, {"f"}, {"g"}, {"h"}, {"i"}, {"j"}, {"k"}, {"l"}, {"m"}, - {"n"}, {"o"}, {"p"}, {"q"}, {"r"}, {"s"}, {"t"}, {"u"}, {"v"}, {"w"}, {"x"}, {"y"}, {"z"}, - {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"}, {"G"}, {"H"}, {"I"}, {"J"}, {"K"}, {"L"}, {"M"}, - {"N"}, {"O"}, {"P"}, {"Q"}, {"R"}, {"S"}, {"T"}, {"U"}, {"V"}, {"W"}, {"X"}, {"Y"}, {"Z"}, {"_"}}}, - {"preprocessing-op-or-punc", {{";"}, - {"="}}}, - {"pp-number", {{"digit"}, - {"pp-number", "digit"}}} - }; - - std::string Top{"program"}; - BNF bnf{ - {"program", {{"statement-list"}}}, - {"statement-list", { - {"statement"}, - {"statement-list", "statement"}, - }}, - {"statement", {{"assignment", ";"}}}, - {"assignment", {{"identifier", "=", "identifier"}, - {"identifier", "=", "pp-number"}}} - }; - - // implicit? - //std::set<std::string> Terminals{"identifier", "=", ";"}; - - std::string Code{"a = bc ; c = 123 ; esd = Ff ; "};//1 = XYZ ; "}; - std::vector<Token> tokens_reference{ - {"identifier", "a", { 1, 1} }, - {"preprocessing-op-or-punc", "=", { 1, 3}}, - {"identifier", "bc", { 1, 5}}, - {"preprocessing-op-or-punc", ";", { 1, 8}}, - {"identifier", "c", { 1, 10}}, - {"preprocessing-op-or-punc", "=", { 1, 12}}, - {"pp-number", "123", { 1, 14}}, - {"preprocessing-op-or-punc", ";", { 1, 18}}, - {"identifier", "esd", { 1, 20}}, - {"preprocessing-op-or-punc", "=", { 1, 24}}, - {"identifier", "Ff", { 1, 26}}, - {"preprocessing-op-or-punc", ";", { 1, 29}}, -#if 0 - {"pp-number", "1", { 1, 31}}, - {"preprocessing-op-or-punc", "=", { 1, 33}}, - {"identifier", "XYZ", { 1, 35}}, - {"preprocessing-op-or-punc", ";", { 1, 39}}, -#endif - }; - - Lex::Lexer lexer(LexBNF, LexTop); - auto tokens = lexer.Lex(Code); - - ASSERT_EQ(tokens, tokens_reference); -#if 0 // TODO: use Debug() interface - std::cout << "=== Tokens =================================" << std::endl; - for (const auto& i: tokens) { - std::cout << i.type << ": " << i.value << std::endl; - } -#endif - - CPP::PreprocessorTokensToTokens(tokens); - Gram::Compiler compiler(bnf, Top); - auto Tree = compiler.compile(tokens); - - compiler.DumpTree(); - - //---------------------------------------------------------------- - - std::string Code2{"a = bc ; c = 123 ; esd = Ff ; 1 = XYZ "}; - std::vector<Token> tokens_reference2{ - {"identifier", "a", { 1, 1} }, - {"preprocessing-op-or-punc", "=", { 1, 3}}, - {"identifier", "bc", { 1, 5}}, - {"preprocessing-op-or-punc", ";", { 1, 8}}, - {"identifier", "c", { 1, 10}}, - {"preprocessing-op-or-punc", "=", { 1, 12}}, - {"pp-number", "123", { 1, 14}}, - {"preprocessing-op-or-punc", ";", { 1, 18}}, - {"identifier", "esd", { 1, 20}}, - {"preprocessing-op-or-punc", "=", { 1, 24}}, - {"identifier", "Ff", { 1, 26}}, - {"preprocessing-op-or-punc", ";", { 1, 29}}, - {"pp-number", "1", { 1, 31}}, - {"preprocessing-op-or-punc", "=", { 1, 33}}, - {"identifier", "XYZ", { 1, 35}}, - //{"preprocessing-op-or-punc", ";", { 1, 39}}, - }; - - tokens = lexer.Lex(Code2); - ASSERT_EQ(tokens, tokens_reference2); - CPP::PreprocessorTokensToTokens(tokens); - try { - Tree = compiler.compile(tokens); - FAIL() << "compile() was expected to throw."s; - } catch (const std::runtime_error& ex) { - ASSERT_EQ(std::string{ex.what()}, "Compile error: Invalid program."); - } } -int main(int argc, char* argv[]) { - ::testing::InitGoogleMock(&argc, argv); - return RUN_ALL_TESTS(); -} |