Make separate Item classes for parsing and lexing
This commit is contained in:
parent
d015d57a53
commit
289992344e
10 changed files with 132 additions and 117 deletions
|
|
@ -8,23 +8,27 @@ using std::vector;
|
|||
|
||||
namespace tree_sitter {
|
||||
namespace build_tables {
|
||||
static bool contains(ItemSet items, Item item) {
|
||||
static bool contains(ParseItemSet items, ParseItem item) {
|
||||
return (std::find(items.begin(), items.end(), item) != items.end());
|
||||
}
|
||||
|
||||
static void add_item(ItemSet &item_set, const Item &item, const Grammar &grammar) {
|
||||
ParseItem parse_item_at_beginning_of_rule(const rules::Symbol &symbol, const Grammar &grammar) {
|
||||
return ParseItem(symbol.name, grammar.rule(symbol.name), 0);
|
||||
}
|
||||
|
||||
static void add_item(ParseItemSet &item_set, const ParseItem &item, const Grammar &grammar) {
|
||||
if (!contains(item_set, item)) {
|
||||
item_set.insert(item);
|
||||
for (rules::Symbol rule : next_non_terminals(item, grammar)) {
|
||||
Item next_item = Item::at_beginning_of_rule(rule.name, grammar);
|
||||
auto next_item = parse_item_at_beginning_of_rule(rule, grammar);
|
||||
add_item(item_set, next_item, grammar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const ItemSet item_set_closure(const ItemSet &item_set, const Grammar &grammar) {
|
||||
ItemSet result;
|
||||
for (Item item : item_set)
|
||||
|
||||
const ParseItemSet item_set_closure(const ParseItemSet &item_set, const Grammar &grammar) {
|
||||
ParseItemSet result;
|
||||
for (ParseItem item : item_set)
|
||||
add_item(result, item, grammar);
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue