From: Matthias Kruk Date: Tue, 21 Jul 2020 15:57:09 +0000 (+0900) Subject: grammar: Remove unused syntax node types and add RULE_INVALID in order to distinguish... X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=6f3215b2dace2422f3554cba8f421925e3b9f5d3;p=ccc grammar: Remove unused syntax node types and add RULE_INVALID in order to distinguish the last NULL-rule in a production --- diff --git a/src/grammar.c b/src/grammar.c index e753a45..dc6a8a0 100644 --- a/src/grammar.c +++ b/src/grammar.c @@ -3322,7 +3322,7 @@ struct syntax_node *syntax_node_parse_production(syntax_node_type_t type, int pr origin = lex_getpos(); for(rule = _node_descriptors[type].productions[prod], match = 1; - rule && match; + rule->type != RULE_INVALID && match; rule++) { int pos; diff --git a/src/grammar.h b/src/grammar.h index 01c2234..4cd6ead 100644 --- a/src/grammar.h +++ b/src/grammar.h @@ -50,18 +50,8 @@ typedef enum { SYNTAX_NODE_COMPOUND_STATEMENT, SYNTAX_NODE_STATEMENT_LIST, SYNTAX_NODE_SELECTION_STATEMENT, - SYNTAX_NODE_IF_STATEMENT, - SYNTAX_NODE_IF_ELSE_STATEMENT, - SYNTAX_NODE_SWITCH_STATEMENT, SYNTAX_NODE_ITERATION_STATEMENT, - SYNTAX_NODE_WHILE_STATEMENT, - SYNTAX_NODE_DO_WHILE_STATEMENT, - SYNTAX_NODE_FOR_STATEMENT, SYNTAX_NODE_JUMP_STATEMENT, - SYNTAX_NODE_GOTO_STATEMENT, - SYNTAX_NODE_CONTINUE_STATEMENT, - SYNTAX_NODE_BREAK_STATEMENT, - SYNTAX_NODE_RETURN_STATEMENT, SYNTAX_NODE_EXPRESSION, SYNTAX_NODE_ASSIGNMENT_EXPRESSION, SYNTAX_NODE_ASSIGNMENT_OPERATOR, @@ -106,6 +96,7 @@ struct syntax_node { struct syntax_node *syntax_node_parse(syntax_node_type_t); enum rule_type { + RULE_INVALID, RULE_TERMINAL, RULE_NONTERMINAL };