From 6f3215b2dace2422f3554cba8f421925e3b9f5d3 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Wed, 22 Jul 2020 00:57:09 +0900 Subject: [PATCH] grammar: Remove unused syntax node types and add RULE_INVALID in order to distinguish the last NULL-rule in a production --- src/grammar.c | 2 +- src/grammar.h | 11 +---------- 2 files changed, 2 insertions(+), 11 deletions(-) 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 }; -- 2.47.3