diff options
author | Roland Reichwein <mail@reichwein.it> | 2020-02-15 15:42:20 +0100 |
---|---|---|
committer | Roland Reichwein <mail@reichwein.it> | 2020-02-15 15:42:20 +0100 |
commit | 0950c449066770292beae220ba4289ce124b4680 (patch) | |
tree | 49dc92b5890b3323dd092d1f68c4fdf9ae4e0ecb | |
parent | ed724a70c92560f13213d745409f45d8c60cf5e0 (diff) |
Bugfixing
-rw-r--r-- | grammer.cpp | 22 | ||||
-rw-r--r-- | test-lexer.cpp | 5 |
2 files changed, 13 insertions, 14 deletions
diff --git a/grammer.cpp b/grammer.cpp index bbaaa79..55e31c8 100644 --- a/grammer.cpp +++ b/grammer.cpp @@ -77,7 +77,7 @@ void Compiler::DumpTree() std::cout << "--- Nodes ------------------------------------" << std::endl; std::cout << "root_node_id=" << root_node_id << std::endl; for (const auto& node : nodes) { - std::cout << node.type << "(" << node.node_id << "): "; + std::cout << node.type << "(" << node.node_id << "):"; for (const auto& child : node.child_ids) { std::cout << " " << child; } @@ -382,26 +382,24 @@ index_t Compiler::AddNode(const std::string& child_type, index_t parent_index) index_t index = nodes.size(); parent.child_ids.push_back(index); - index_t variant; + index_t variant{}; std::deque<std::pair<std::string, index_t>> alternatives; - const auto& lists { bnf[parent.type] }; + const auto& variants { bnf[child_type] }; bool found{false}; - for (int i = 0; i < lists.size(); i++) { // variants - if (lists[i].size() > 0 && lists[i][0] == child_type) { - if (!found) { // use first match - variant = i; - found = true; - } else { // defer all others - alternatives.emplace_back(child_type, i); - } + for (int i = 0; i < variants.size(); i++) { // variants + if (!found) { // use first match + variant = i; + found = true; + } else { // defer all others + alternatives.emplace_back(child_type, i); } } nodes.emplace_back(TreeNode{parent_index, index, child_type, variant, alternatives, std::vector<int32_t>{}}); //root stays, tokens_used stays - std::cout << "AddNode(): " << index << std::endl; + std::cout << "AddNode(): " << parent.type << "->" << child_type << ": "<< index << std::endl; DumpTree(); return index; diff --git a/test-lexer.cpp b/test-lexer.cpp index 6733081..0449af9 100644 --- a/test-lexer.cpp +++ b/test-lexer.cpp @@ -61,7 +61,7 @@ TEST_F(Test, BNF) { // implicit? //std::set<std::string> Terminals{"identifier", "=", ";"}; - std::string Code{"a = bc ; c = 123 ; esd = Ff ; 1 = XYZ"}; + 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}}, @@ -77,7 +77,8 @@ TEST_F(Test, BNF) { {"preprocessing-op-or-punc", ";", { 1, 29}}, {"pp-number", "1", { 1, 31}}, {"preprocessing-op-or-punc", "=", { 1, 33}}, - {"identifier", "XYZ", { 1, 34}}, + {"identifier", "XYZ", { 1, 35}}, + {"preprocessing-op-or-punc", ";", { 1, 38}}, }; Lex::Lexer lexer(LexBNF, LexTop); |