2013-12-15 14:41:51 -08:00
|
|
|
#ifndef __TreeSitter__parse_table_builder__
|
|
|
|
|
#define __TreeSitter__parse_table_builder__
|
|
|
|
|
|
|
|
|
|
#include <unordered_map>
|
|
|
|
|
#include "grammar.h"
|
|
|
|
|
#include "item_set.h"
|
|
|
|
|
#include "parse_table.h"
|
|
|
|
|
|
|
|
|
|
namespace tree_sitter {
|
|
|
|
|
namespace lr {
|
|
|
|
|
class ParseTableBuilder {
|
|
|
|
|
const Grammar grammar;
|
|
|
|
|
ParseTable table;
|
2013-12-17 19:54:16 -08:00
|
|
|
std::unordered_map<const ItemSet, size_t> state_indices;
|
2013-12-15 14:41:51 -08:00
|
|
|
|
|
|
|
|
long state_index_for_item_set(const ItemSet &item_set) const;
|
2013-12-18 08:25:50 -08:00
|
|
|
void add_shift_actions(const ItemSet &item_set, size_t state_index);
|
|
|
|
|
void add_reduce_actions(const ItemSet &item_set, size_t state_index);
|
|
|
|
|
size_t add_item_set(const ItemSet &item_set);
|
2013-12-15 14:41:51 -08:00
|
|
|
public:
|
|
|
|
|
ParseTableBuilder(const Grammar &grammar);
|
|
|
|
|
static ParseTable build_table(const Grammar &grammar);
|
|
|
|
|
void build();
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|