Add keyword helper for making higher-priority string tokens
This commit is contained in:
parent
60e2728acc
commit
93620b3ed1
13 changed files with 54 additions and 27 deletions
|
|
@ -81,7 +81,7 @@ namespace tree_sitter {
|
|||
for (LexItem item : item_set) {
|
||||
if (item.is_done()) {
|
||||
auto current_action = lex_table.state(state_id).default_action;
|
||||
auto new_action = LexAction::Accept(item.lhs);
|
||||
auto new_action = LexAction::Accept(item.lhs, item.precedence());
|
||||
if (conflict_manager.resolve_lex_action(current_action, new_action))
|
||||
lex_table.add_default_action(state_id, new_action);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -76,7 +76,11 @@ namespace tree_sitter {
|
|||
case LexActionTypeError:
|
||||
return true;
|
||||
case LexActionTypeAccept:
|
||||
if (new_action.type == LexActionTypeAccept) {
|
||||
if (new_action.precedence > old_action.precedence) {
|
||||
return true;
|
||||
} else if (new_action.precedence < old_action.precedence) {
|
||||
return false;
|
||||
} else {
|
||||
return new_action.symbol.index < old_action.symbol.index;
|
||||
}
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
#include "compiler/build_tables/item.h"
|
||||
#include "compiler/build_tables/rule_can_be_blank.h"
|
||||
#include "compiler/rules/metadata.h"
|
||||
#include "compiler/build_tables/get_metadata.h"
|
||||
#include "tree_sitter/compiler.h"
|
||||
|
||||
namespace tree_sitter {
|
||||
|
|
@ -11,6 +13,9 @@ namespace tree_sitter {
|
|||
bool Item::is_done() const {
|
||||
return rule_can_be_blank(rule);
|
||||
}
|
||||
|
||||
int Item::precedence() const {
|
||||
return get_metadata(rule, rules::PRECEDENCE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ namespace tree_sitter {
|
|||
public:
|
||||
Item(const rules::Symbol &lhs, rules::rule_ptr rule);
|
||||
bool is_done() const;
|
||||
int precedence() const;
|
||||
|
||||
rules::Symbol lhs;
|
||||
rules::rule_ptr rule;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
#include "compiler/build_tables/parse_item.h"
|
||||
#include "compiler/build_tables/get_metadata.h"
|
||||
#include "tree_sitter/compiler.h"
|
||||
|
||||
namespace tree_sitter {
|
||||
|
|
@ -24,10 +23,6 @@ namespace tree_sitter {
|
|||
(other.rule == rule || other.rule->operator==(*rule));
|
||||
}
|
||||
|
||||
int ParseItem::precedence() const {
|
||||
return get_metadata(rule, rules::PRECEDENCE);
|
||||
}
|
||||
|
||||
ostream& operator<<(ostream &stream, const ParseItem &item) {
|
||||
return stream <<
|
||||
string("#<item ") <<
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include <string>
|
||||
#include "compiler/rules/symbol.h"
|
||||
#include "compiler/build_tables/item.h"
|
||||
#include "compiler/rules/metadata.h"
|
||||
|
||||
namespace tree_sitter {
|
||||
namespace build_tables {
|
||||
|
|
@ -16,7 +15,6 @@ namespace tree_sitter {
|
|||
const size_t consumed_symbol_count,
|
||||
const rules::Symbol &lookahead_sym);
|
||||
bool operator==(const ParseItem &other) const;
|
||||
int precedence() const;
|
||||
|
||||
size_t consumed_symbol_count;
|
||||
rules::Symbol lookahead_sym;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue