summaryrefslogtreecommitdiffhomepage
path: root/grammer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'grammer.cpp')
-rw-r--r--grammer.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/grammer.cpp b/grammer.cpp
index 8f2b42b..8a4f6b7 100644
--- a/grammer.cpp
+++ b/grammer.cpp
@@ -58,20 +58,20 @@ bool Compiler::RootIsStartSymbol() const
namespace {
-bool ChildIdIsToken(int32_t child_id)
-{
- return child_i < 0;
-}
+ bool ChildIdIsToken(int32_t child_id)
+ {
+ return child_id < 0;
+ }
-index_t TokenIdFromChildId(int32_t child_id)
-{
- return index_t(-child_id) - 1;
-}
+ index_t TokenIdFromChildId(int32_t child_id)
+ {
+ return index_t(-child_id) - 1;
+ }
-int32_t ChildIdFromTokenId(index_t token_id)
-{
- return -1 - int32_t(token_id);
-}
+ int32_t ChildIdFromTokenId(index_t token_id)
+ {
+ return -1 - int32_t(token_id);
+ }
} // namespace
@@ -123,7 +123,7 @@ void Compiler::AddFirstNode()
const std::string& child_type = tokens[0].type;
auto it = ReverseBNF.find(child_type);
if (it == ReverseBNF.end())
- throw std::runtime_error("Type not found: "s + child_type + " ("s + tokens[0].value + ")"s);
+ throw std::runtime_error("Illegal first token: "s + child_type + " ("s + tokens[0].value + ")"s);
std::set<std::string>& alternatives_set {it->second};
@@ -150,7 +150,7 @@ void Compiler::AddFirstNode()
}
if (node_type == "") // no matching type found
- throw std::runtime_error("No matching first node found.");
+ throw std::runtime_error("Syntax error on first token: "s + child_type + " ("s + tokens[0].value + ")"s);
nodes.emplace_back({0, 0, node_type, node_variant, alternatives, child_ids});
@@ -169,14 +169,13 @@ bool Compiler::AddRootNode()
index_t old_root_node_id {root_node_id};
index_t new_root_node_id {nodes.size()};
- nodes[root_node_id].parent_node_id = new_root_node_id;
std::set<std::string>& alternatives_set {it->second};
std::string node_type;
index_t node_variant;
std::deque<std::pair<std::string, index_t>> alternatives; // only for valid elements from alternatives_set
- std::vector<index_t> child_ids{1, old_root_node_id};
+ std::vector<index_t> child_ids{size_t(1), old_root_node_id};
for (const auto& type : alternatives_set) {
const auto& variants{bnf[type]};
@@ -196,6 +195,7 @@ bool Compiler::AddRootNode()
return false;
// now add!
+ nodes[old_root_node_id].parent_node_id = new_root_node_id;
root_node_id = new_root_node_id;
nodes.emplace_back({root_node_id, root_node_id, node_type, node_variant, alternatives, child_ids});
// keep tokens_used as is