Add code for setting parse states’ corresponding lex states
This commit is contained in:
parent
a5e39d2512
commit
29a9b4643d
6 changed files with 33 additions and 36 deletions
|
|
@ -116,12 +116,14 @@ namespace tree_sitter {
|
|||
}
|
||||
}
|
||||
|
||||
string switch_on_lookahead_sym(const ParseState &parse_state) {
|
||||
string code_for_parse_state(const ParseState &parse_state) {
|
||||
string body = "";
|
||||
for (auto pair : parse_state.actions)
|
||||
body += _case(symbol_id(pair.first), code_for_parse_actions(pair.second));
|
||||
body += _default(code_for_parse_actions(parse_state.default_actions));
|
||||
return _switch("LOOKAHEAD_SYM()", body);
|
||||
return
|
||||
string("SET_LEX_STATE(") + to_string(parse_state.lex_state_index) + ");\n" +
|
||||
_switch("LOOKAHEAD_SYM()", body);
|
||||
}
|
||||
|
||||
string switch_on_lookahead_char(const LexState &parse_state) {
|
||||
|
|
@ -135,7 +137,7 @@ namespace tree_sitter {
|
|||
string switch_on_parse_state() {
|
||||
string body = "";
|
||||
for (int i = 0; i < parse_table.states.size(); i++)
|
||||
body += _case(std::to_string(i), switch_on_lookahead_sym(parse_table.states[i]));
|
||||
body += _case(std::to_string(i), code_for_parse_state(parse_table.states[i]));
|
||||
body += _default("PARSE_ERROR();");
|
||||
return _switch("PARSE_STATE()", body);
|
||||
}
|
||||
|
|
@ -154,13 +156,12 @@ namespace tree_sitter {
|
|||
result += indent(symbol_id(rule_name)) + ",\n";
|
||||
result += indent(symbol_id(ParseTable::END_OF_INPUT));
|
||||
return result + "\n"
|
||||
"} ts_symbol;\n";
|
||||
"} ts_symbol;";
|
||||
}
|
||||
|
||||
string includes() {
|
||||
return string(
|
||||
"#include \"runtime.h\"\n"
|
||||
"#include <stdlib.h>\n"
|
||||
"#include <ctype.h>");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ namespace tree_sitter {
|
|||
}
|
||||
|
||||
#pragma mark - container
|
||||
|
||||
ItemSet::const_iterator ItemSet::begin() const {
|
||||
return contents.begin();
|
||||
}
|
||||
|
|
@ -74,6 +75,7 @@ namespace tree_sitter {
|
|||
}
|
||||
|
||||
#pragma mark - printing
|
||||
|
||||
ostream& operator<<(ostream &stream, const ItemSet &item_set) {
|
||||
stream << string("(item_set ");
|
||||
for (Item item : item_set) {
|
||||
|
|
|
|||
|
|
@ -43,3 +43,7 @@ TSState TSParserParseState(const TSParser *parser) {
|
|||
TSState TSParserLexState(const TSParser *parser) {
|
||||
return 5;
|
||||
}
|
||||
|
||||
void TSParserSetLexState(const TSParser *parser, TSState lex_state) {
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue