Give better symbol names to generated tokens
This should make debugging easier
This commit is contained in:
parent
2226234924
commit
e1ac62edc5
14 changed files with 1017 additions and 842 deletions
|
|
@ -49,11 +49,16 @@ namespace tree_sitter {
|
|||
const string name;
|
||||
const ParseTable parse_table;
|
||||
const LexTable lex_table;
|
||||
const map<rules::Symbol, string> symbol_names;
|
||||
public:
|
||||
CCodeGenerator(string name, const ParseTable &parse_table, const LexTable &lex_table) :
|
||||
CCodeGenerator(string name,
|
||||
const ParseTable &parse_table,
|
||||
const LexTable &lex_table,
|
||||
const map<rules::Symbol, string> &symbol_names) :
|
||||
name(name),
|
||||
parse_table(parse_table),
|
||||
lex_table(lex_table)
|
||||
lex_table(lex_table),
|
||||
symbol_names(symbol_names)
|
||||
{}
|
||||
|
||||
string code() {
|
||||
|
|
@ -61,7 +66,7 @@ namespace tree_sitter {
|
|||
includes(),
|
||||
state_and_symbol_counts(),
|
||||
symbol_enum(),
|
||||
rule_names_list(),
|
||||
symbol_names_list(),
|
||||
hidden_symbols_list(),
|
||||
lex_function(),
|
||||
lex_states_list(),
|
||||
|
|
@ -83,21 +88,6 @@ namespace tree_sitter {
|
|||
}
|
||||
}
|
||||
|
||||
string character_code(char character) {
|
||||
switch (character) {
|
||||
case '\0':
|
||||
return "\\0";
|
||||
case '"':
|
||||
return "\\\"";
|
||||
case '\n':
|
||||
return "\\n";
|
||||
case '\\':
|
||||
return "\\\\";
|
||||
default:
|
||||
return string() + character;
|
||||
}
|
||||
}
|
||||
|
||||
string condition_for_character_range(const rules::CharacterRange &range) {
|
||||
string lookahead("lookahead");
|
||||
if (range.min == range.max) {
|
||||
|
|
@ -191,14 +181,14 @@ namespace tree_sitter {
|
|||
return result + "};";
|
||||
}
|
||||
|
||||
string rule_names_list() {
|
||||
string result = "SYMBOL_NAMES = {\n";
|
||||
result += indent(string("\"") + "error") + "\",\n";
|
||||
result += indent(string("\"") + "end") + "\",\n";
|
||||
string symbol_names_list() {
|
||||
set<rules::Symbol> symbols(parse_table.symbols);
|
||||
symbols.insert(rules::Symbol("end", rules::SymbolTypeBuiltIn));
|
||||
symbols.insert(rules::Symbol("error", rules::SymbolTypeBuiltIn));
|
||||
|
||||
string result = "SYMBOL_NAMES = {\n";
|
||||
for (auto symbol : parse_table.symbols)
|
||||
if (!symbol.is_built_in())
|
||||
result += indent(string("\"") + symbol.name) + "\",\n";
|
||||
result += indent("[" + symbol_id(symbol) + "] = \"" + symbol_names.find(symbol)->second) + "\",\n";
|
||||
return result + "};";
|
||||
}
|
||||
|
||||
|
|
@ -261,8 +251,11 @@ namespace tree_sitter {
|
|||
}
|
||||
};
|
||||
|
||||
string c_code(string name, const ParseTable &parse_table, const LexTable &lex_table) {
|
||||
return CCodeGenerator(name, parse_table, lex_table).code();
|
||||
string c_code(string name,
|
||||
const ParseTable &parse_table,
|
||||
const LexTable &lex_table,
|
||||
const map<rules::Symbol, string> &symbol_names) {
|
||||
return CCodeGenerator(name, parse_table, lex_table, symbol_names).code();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue