Sha256: 549afbb8236edd5de7d0f976bf0c96d63925ea4a9780fe05b404daf65539e8af
Contents?: true
Size: 1.65 KB
Versions: 1
Compression:
Stored size: 1.65 KB
Contents
#include "compiler/build_tables/lex_conflict_manager.h" #include <utility> #include "compiler/parse_table.h" #include "compiler/rules/built_in_symbols.h" #include "compiler/build_tables/lex_item.h" namespace tree_sitter { namespace build_tables { bool LexConflictManager::resolve(const LexItemSet &item_set, const AdvanceAction &new_action, const AcceptTokenAction &old_action) { if (!old_action.is_present()) return true; if (new_action.precedence_range.max >= old_action.precedence) { for (const LexItem &item : item_set.entries) possible_extensions[old_action.symbol.index].insert(item.lhs.index); return true; } else { return false; } } bool LexConflictManager::resolve(const AcceptTokenAction &new_action, const AcceptTokenAction &old_action) { if (!old_action.is_present()) return true; int old_precedence = old_action.precedence; int new_precedence = new_action.precedence; bool result; if (new_precedence > old_precedence) result = true; else if (new_precedence < old_precedence) result = false; else if (new_action.is_string && !old_action.is_string) result = true; else if (old_action.is_string && !new_action.is_string) result = false; else if (new_action.symbol.index < old_action.symbol.index) result = true; else result = false; if (result) possible_homonyms[old_action.symbol.index].insert(new_action.symbol.index); else possible_homonyms[new_action.symbol.index].insert(old_action.symbol.index); return result; } } // namespace build_tables } // namespace tree_sitter
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
tree-sitter-0.0.1 | ext/tree-sitter/tree-sitter/src/compiler/build_tables/lex_conflict_manager.cc |