From e657f04b620b36a51bd7311dc94d4ea5a0895dea Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 6 Apr 2020 07:36:00 +0200 Subject: [PATCH] c: make the symbol kind definition nicer to read From enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, YYSYMBOL_YYERROR = 1, YYSYMBOL_YYUNDEF = 2, to enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, /* "end of file" */ YYSYMBOL_YYERROR = 1, /* error */ YYSYMBOL_YYUNDEF = 2, /* $undefined */ * data/skeletons/bison.m4 (b4_last_symbol): New. (b4_symbol_enum, b4_symbol_enums): Reformat the output. * data/skeletons/c.m4 --- data/skeletons/bison.m4 | 5 +- data/skeletons/c++.m4 | 10 +- data/skeletons/c.m4 | 17 ++-- src/parse-gram.c | 207 ++++++++++++++++++++-------------------- 4 files changed, 120 insertions(+), 119 deletions(-) diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4 index 5681058d..ce68e184 100644 --- a/data/skeletons/bison.m4 +++ b/data/skeletons/bison.m4 @@ -565,7 +565,10 @@ m4_define([_b4_last_enum_token], [m4_define([b4_last_enum_token], [$1])])]) b4_symbol_foreach([_b4_last_enum_token]) - +# b4_last_symbol +# -------------- +# The code of the last symbol. +m4_define([b4_last_symbol], m4_eval(b4_tokens_number + b4_nterms_number - 1)) ## ------- ## ## Types. ## diff --git a/data/skeletons/c++.m4 b/data/skeletons/c++.m4 index 111a8aac..ffe0c91f 100644 --- a/data/skeletons/c++.m4 +++ b/data/skeletons/c++.m4 @@ -188,13 +188,11 @@ m4_define([b4_token_enums], m4_define([b4_declare_symbol_enum], [[enum symbol_kind_type { - ]m4_join([, - ], - ]b4_symbol_kind([-2])[ = -2, - b4_symbol_map([b4_symbol_enum]), - [YYNTOKENS = ]b4_tokens_number[ ///< Number of tokens.])[ + YYNTOKENS = ]b4_tokens_number[, ///< Number of tokens. + ]b4_symbol_kind([-2])[ = -2, +]b4_symbol_foreach([ b4_symbol_enum])[ }; -]])]) +]]) diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4 index a6f70c29..787ca000 100644 --- a/data/skeletons/c.m4 +++ b/data/skeletons/c.m4 @@ -494,15 +494,16 @@ m4_define([b4_symbol_translate], ## (Internal) symbol numbers. ## ## --------------------------- ## - # b4_symbol_enum(SYMBOL-NUM) # -------------------------- # Output the definition of this symbol as an enum. m4_define([b4_symbol_enum], -[m4_ifval(b4_symbol([$1], [kind]), - [m4_format([[%s = %s]], - b4_symbol([$1], [kind]), - b4_symbol([$1], [number]))])]) +[m4_format([ %-40s %s], + m4_format([[%s = %s%s%s]], + b4_symbol([$1], [kind]), + [$1], + m4_if([$1], b4_last_symbol, [], [[,]])), + [b4_symbol_tag_comment([$1])])]) # b4_declare_symbol_enum @@ -514,10 +515,8 @@ m4_define([b4_declare_symbol_enum], [[/* Symbol type. */ enum yysymbol_kind_t { - ]m4_join([, - ], - ]b4_symbol_kind([-2])[ = -2, - b4_symbol_map([b4_symbol_enum]))[ + ]b4_symbol_kind([-2])[ = -2, +]b4_symbol_foreach([b4_symbol_enum])[ }; typedef enum yysymbol_kind_t yysymbol_kind_t; ]])]) diff --git a/src/parse-gram.c b/src/parse-gram.c index 4dc22c41..5be2b1d9 100644 --- a/src/parse-gram.c +++ b/src/parse-gram.c @@ -104,109 +104,110 @@ enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, - YYSYMBOL_YYEOF = 0, - YYSYMBOL_YYERROR = 1, - YYSYMBOL_YYUNDEF = 2, - YYSYMBOL_STRING = 3, - YYSYMBOL_TSTRING = 4, - YYSYMBOL_PERCENT_TOKEN = 5, - YYSYMBOL_PERCENT_NTERM = 6, - YYSYMBOL_PERCENT_TYPE = 7, - YYSYMBOL_PERCENT_DESTRUCTOR = 8, - YYSYMBOL_PERCENT_PRINTER = 9, - YYSYMBOL_PERCENT_LEFT = 10, - YYSYMBOL_PERCENT_RIGHT = 11, - YYSYMBOL_PERCENT_NONASSOC = 12, - YYSYMBOL_PERCENT_PRECEDENCE = 13, - YYSYMBOL_PERCENT_PREC = 14, - YYSYMBOL_PERCENT_DPREC = 15, - YYSYMBOL_PERCENT_MERGE = 16, - YYSYMBOL_PERCENT_CODE = 17, - YYSYMBOL_PERCENT_DEFAULT_PREC = 18, - YYSYMBOL_PERCENT_DEFINE = 19, - YYSYMBOL_PERCENT_DEFINES = 20, - YYSYMBOL_PERCENT_ERROR_VERBOSE = 21, - YYSYMBOL_PERCENT_EXPECT = 22, - YYSYMBOL_PERCENT_EXPECT_RR = 23, - YYSYMBOL_PERCENT_FLAG = 24, - YYSYMBOL_PERCENT_FILE_PREFIX = 25, - YYSYMBOL_PERCENT_GLR_PARSER = 26, - YYSYMBOL_PERCENT_INITIAL_ACTION = 27, - YYSYMBOL_PERCENT_LANGUAGE = 28, - YYSYMBOL_PERCENT_NAME_PREFIX = 29, - YYSYMBOL_PERCENT_NO_DEFAULT_PREC = 30, - YYSYMBOL_PERCENT_NO_LINES = 31, - YYSYMBOL_PERCENT_NONDETERMINISTIC_PARSER = 32, - YYSYMBOL_PERCENT_OUTPUT = 33, - YYSYMBOL_PERCENT_PURE_PARSER = 34, - YYSYMBOL_PERCENT_REQUIRE = 35, - YYSYMBOL_PERCENT_SKELETON = 36, - YYSYMBOL_PERCENT_START = 37, - YYSYMBOL_PERCENT_TOKEN_TABLE = 38, - YYSYMBOL_PERCENT_VERBOSE = 39, - YYSYMBOL_PERCENT_YACC = 40, - YYSYMBOL_BRACED_CODE = 41, - YYSYMBOL_BRACED_PREDICATE = 42, - YYSYMBOL_BRACKETED_ID = 43, - YYSYMBOL_CHAR = 44, - YYSYMBOL_COLON = 45, - YYSYMBOL_EPILOGUE = 46, - YYSYMBOL_EQUAL = 47, - YYSYMBOL_ID = 48, - YYSYMBOL_ID_COLON = 49, - YYSYMBOL_PERCENT_PERCENT = 50, - YYSYMBOL_PIPE = 51, - YYSYMBOL_PROLOGUE = 52, - YYSYMBOL_SEMICOLON = 53, - YYSYMBOL_TAG = 54, - YYSYMBOL_TAG_ANY = 55, - YYSYMBOL_TAG_NONE = 56, - YYSYMBOL_INT = 57, - YYSYMBOL_PERCENT_PARAM = 58, - YYSYMBOL_PERCENT_UNION = 59, - YYSYMBOL_PERCENT_EMPTY = 60, - YYSYMBOL_YYACCEPT = 61, - YYSYMBOL_input = 62, - YYSYMBOL_prologue_declarations = 63, - YYSYMBOL_prologue_declaration = 64, - YYSYMBOL_65____1 = 65, - YYSYMBOL_params = 66, - YYSYMBOL_grammar_declaration = 67, - YYSYMBOL_code_props_type = 68, - YYSYMBOL_union_name = 69, - YYSYMBOL_symbol_declaration = 70, - YYSYMBOL_71____2 = 71, - YYSYMBOL_72____3 = 72, - YYSYMBOL_precedence_declarator = 73, - YYSYMBOL_74_tag_opt = 74, - YYSYMBOL_generic_symlist = 75, - YYSYMBOL_generic_symlist_item = 76, - YYSYMBOL_tag = 77, - YYSYMBOL_nterm_decls = 78, - YYSYMBOL_token_decls = 79, - YYSYMBOL_80_token_decl_1 = 80, - YYSYMBOL_token_decl = 81, - YYSYMBOL_82_int_opt = 82, - YYSYMBOL_alias = 83, - YYSYMBOL_token_decls_for_prec = 84, - YYSYMBOL_85_token_decl_for_prec_1 = 85, - YYSYMBOL_token_decl_for_prec = 86, - YYSYMBOL_symbol_decls = 87, - YYSYMBOL_88_symbol_decl_1 = 88, - YYSYMBOL_grammar = 89, - YYSYMBOL_rules_or_grammar_declaration = 90, - YYSYMBOL_rules = 91, - YYSYMBOL_92____4 = 92, - YYSYMBOL_93_rhses_1 = 93, - YYSYMBOL_rhs = 94, - YYSYMBOL_95_named_ref_opt = 95, - YYSYMBOL_variable = 96, - YYSYMBOL_value = 97, - YYSYMBOL_id = 98, - YYSYMBOL_id_colon = 99, - YYSYMBOL_symbol = 100, - YYSYMBOL_string_as_id = 101, - YYSYMBOL_102_epilogue_opt = 102 + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYERROR = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* $undefined */ + YYSYMBOL_STRING = 3, /* "string" */ + YYSYMBOL_TSTRING = 4, /* "translatable string" */ + YYSYMBOL_PERCENT_TOKEN = 5, /* "%token" */ + YYSYMBOL_PERCENT_NTERM = 6, /* "%nterm" */ + YYSYMBOL_PERCENT_TYPE = 7, /* "%type" */ + YYSYMBOL_PERCENT_DESTRUCTOR = 8, /* "%destructor" */ + YYSYMBOL_PERCENT_PRINTER = 9, /* "%printer" */ + YYSYMBOL_PERCENT_LEFT = 10, /* "%left" */ + YYSYMBOL_PERCENT_RIGHT = 11, /* "%right" */ + YYSYMBOL_PERCENT_NONASSOC = 12, /* "%nonassoc" */ + YYSYMBOL_PERCENT_PRECEDENCE = 13, /* "%precedence" */ + YYSYMBOL_PERCENT_PREC = 14, /* "%prec" */ + YYSYMBOL_PERCENT_DPREC = 15, /* "%dprec" */ + YYSYMBOL_PERCENT_MERGE = 16, /* "%merge" */ + YYSYMBOL_PERCENT_CODE = 17, /* "%code" */ + YYSYMBOL_PERCENT_DEFAULT_PREC = 18, /* "%default-prec" */ + YYSYMBOL_PERCENT_DEFINE = 19, /* "%define" */ + YYSYMBOL_PERCENT_DEFINES = 20, /* "%defines" */ + YYSYMBOL_PERCENT_ERROR_VERBOSE = 21, /* "%error-verbose" */ + YYSYMBOL_PERCENT_EXPECT = 22, /* "%expect" */ + YYSYMBOL_PERCENT_EXPECT_RR = 23, /* "%expect-rr" */ + YYSYMBOL_PERCENT_FLAG = 24, /* "%" */ + YYSYMBOL_PERCENT_FILE_PREFIX = 25, /* "%file-prefix" */ + YYSYMBOL_PERCENT_GLR_PARSER = 26, /* "%glr-parser" */ + YYSYMBOL_PERCENT_INITIAL_ACTION = 27, /* "%initial-action" */ + YYSYMBOL_PERCENT_LANGUAGE = 28, /* "%language" */ + YYSYMBOL_PERCENT_NAME_PREFIX = 29, /* "%name-prefix" */ + YYSYMBOL_PERCENT_NO_DEFAULT_PREC = 30, /* "%no-default-prec" */ + YYSYMBOL_PERCENT_NO_LINES = 31, /* "%no-lines" */ + YYSYMBOL_PERCENT_NONDETERMINISTIC_PARSER = 32, /* "%nondeterministic-parser" */ + YYSYMBOL_PERCENT_OUTPUT = 33, /* "%output" */ + YYSYMBOL_PERCENT_PURE_PARSER = 34, /* "%pure-parser" */ + YYSYMBOL_PERCENT_REQUIRE = 35, /* "%require" */ + YYSYMBOL_PERCENT_SKELETON = 36, /* "%skeleton" */ + YYSYMBOL_PERCENT_START = 37, /* "%start" */ + YYSYMBOL_PERCENT_TOKEN_TABLE = 38, /* "%token-table" */ + YYSYMBOL_PERCENT_VERBOSE = 39, /* "%verbose" */ + YYSYMBOL_PERCENT_YACC = 40, /* "%yacc" */ + YYSYMBOL_BRACED_CODE = 41, /* "{...}" */ + YYSYMBOL_BRACED_PREDICATE = 42, /* "%?{...}" */ + YYSYMBOL_BRACKETED_ID = 43, /* "[identifier]" */ + YYSYMBOL_CHAR = 44, /* "character literal" */ + YYSYMBOL_COLON = 45, /* ":" */ + YYSYMBOL_EPILOGUE = 46, /* "epilogue" */ + YYSYMBOL_EQUAL = 47, /* "=" */ + YYSYMBOL_ID = 48, /* "identifier" */ + YYSYMBOL_ID_COLON = 49, /* "identifier:" */ + YYSYMBOL_PERCENT_PERCENT = 50, /* "%%" */ + YYSYMBOL_PIPE = 51, /* "|" */ + YYSYMBOL_PROLOGUE = 52, /* "%{...%}" */ + YYSYMBOL_SEMICOLON = 53, /* ";" */ + YYSYMBOL_TAG = 54, /* "" */ + YYSYMBOL_TAG_ANY = 55, /* "<*>" */ + YYSYMBOL_TAG_NONE = 56, /* "<>" */ + YYSYMBOL_INT = 57, /* "integer literal" */ + YYSYMBOL_PERCENT_PARAM = 58, /* "%param" */ + YYSYMBOL_PERCENT_UNION = 59, /* "%union" */ + YYSYMBOL_PERCENT_EMPTY = 60, /* "%empty" */ + YYSYMBOL_YYACCEPT = 61, /* $accept */ + YYSYMBOL_input = 62, /* input */ + YYSYMBOL_prologue_declarations = 63, /* prologue_declarations */ + YYSYMBOL_prologue_declaration = 64, /* prologue_declaration */ + YYSYMBOL_65____1 = 65, /* $@1 */ + YYSYMBOL_params = 66, /* params */ + YYSYMBOL_grammar_declaration = 67, /* grammar_declaration */ + YYSYMBOL_code_props_type = 68, /* code_props_type */ + YYSYMBOL_union_name = 69, /* union_name */ + YYSYMBOL_symbol_declaration = 70, /* symbol_declaration */ + YYSYMBOL_71____2 = 71, /* $@2 */ + YYSYMBOL_72____3 = 72, /* $@3 */ + YYSYMBOL_precedence_declarator = 73, /* precedence_declarator */ + YYSYMBOL_74_tag_opt = 74, /* tag.opt */ + YYSYMBOL_generic_symlist = 75, /* generic_symlist */ + YYSYMBOL_generic_symlist_item = 76, /* generic_symlist_item */ + YYSYMBOL_tag = 77, /* tag */ + YYSYMBOL_nterm_decls = 78, /* nterm_decls */ + YYSYMBOL_token_decls = 79, /* token_decls */ + YYSYMBOL_80_token_decl_1 = 80, /* token_decl.1 */ + YYSYMBOL_token_decl = 81, /* token_decl */ + YYSYMBOL_82_int_opt = 82, /* int.opt */ + YYSYMBOL_alias = 83, /* alias */ + YYSYMBOL_token_decls_for_prec = 84, /* token_decls_for_prec */ + YYSYMBOL_85_token_decl_for_prec_1 = 85, /* token_decl_for_prec.1 */ + YYSYMBOL_token_decl_for_prec = 86, /* token_decl_for_prec */ + YYSYMBOL_symbol_decls = 87, /* symbol_decls */ + YYSYMBOL_88_symbol_decl_1 = 88, /* symbol_decl.1 */ + YYSYMBOL_grammar = 89, /* grammar */ + YYSYMBOL_rules_or_grammar_declaration = 90, /* rules_or_grammar_declaration */ + YYSYMBOL_rules = 91, /* rules */ + YYSYMBOL_92____4 = 92, /* $@4 */ + YYSYMBOL_93_rhses_1 = 93, /* rhses.1 */ + YYSYMBOL_rhs = 94, /* rhs */ + YYSYMBOL_95_named_ref_opt = 95, /* named_ref.opt */ + YYSYMBOL_variable = 96, /* variable */ + YYSYMBOL_value = 97, /* value */ + YYSYMBOL_id = 98, /* id */ + YYSYMBOL_id_colon = 99, /* id_colon */ + YYSYMBOL_symbol = 100, /* symbol */ + YYSYMBOL_string_as_id = 101, /* string_as_id */ + YYSYMBOL_102_epilogue_opt = 102, /* epilogue.opt */ + }; typedef enum yysymbol_kind_t yysymbol_kind_t;