From 10e61eec6d0b3c8144258c8b097d2ce3be751ffa Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 6 Apr 2020 07:17:42 +0200 Subject: [PATCH] c: make the token kind definition nicer to read From enum gram_tokentype { GRAM_EOF = 0, STRING = 3, TSTRING = 4, PERCENT_TOKEN = 5, To enum gram_tokentype { GRAM_EOF = 0, /* "end of file" */ STRING = 3, /* "string" */ TSTRING = 4, /* "translatable string" */ PERCENT_TOKEN = 5, /* "%token" */ * data/skeletons/bison.m4 (b4_last_enum_token): New. * data/skeletons/c.m4 (b4_token_enum, b4_token_enums): Show the corresponding symbol. --- data/skeletons/bison.m4 | 14 ++++- data/skeletons/c++.m4 | 4 +- data/skeletons/c.m4 | 12 ++-- src/parse-gram.h | 119 ++++++++++++++++++++-------------------- 4 files changed, 81 insertions(+), 68 deletions(-) diff --git a/data/skeletons/bison.m4 b/data/skeletons/bison.m4 index 30168007..5681058d 100644 --- a/data/skeletons/bison.m4 +++ b/data/skeletons/bison.m4 @@ -553,8 +553,18 @@ m4_define([b4_any_token_visible_if], m4_define([b4_token_format], [b4_token_visible_if([$2], [m4_format([[$1]], - m4_quote(b4_symbol([$2], [id])), - m4_quote(b4_symbol([$2], b4_api_token_raw_if([[number]], [[user_number]]))))])]) + m4_expand(b4_symbol([$2], [id])), + m4_expand(b4_symbol([$2], b4_api_token_raw_if([[number]], [[user_number]]))))])]) + + +# b4_last_enum_token +# ------------------ +# The code of the last token visible token. +m4_define([_b4_last_enum_token], +[b4_token_visible_if([$1], + [m4_define([b4_last_enum_token], [$1])])]) +b4_symbol_foreach([_b4_last_enum_token]) + ## ------- ## diff --git a/data/skeletons/c++.m4 b/data/skeletons/c++.m4 index f844ef66..111a8aac 100644 --- a/data/skeletons/c++.m4 +++ b/data/skeletons/c++.m4 @@ -170,9 +170,7 @@ m4_bpatsubst(m4_dquote(m4_bpatsubst(m4_dquote(b4_namespace_ref[ ]), m4_define([b4_token_enums], [[enum yytokentype { - ]m4_join([, - ], - b4_symbol_map([b4_token_enum]))[ +]b4_symbol_foreach([b4_token_enum])[ };]dnl ]) diff --git a/data/skeletons/c.m4 b/data/skeletons/c.m4 index 22b02444..a6f70c29 100644 --- a/data/skeletons/c.m4 +++ b/data/skeletons/c.m4 @@ -449,7 +449,13 @@ m4_join([ # ------------------------ # Output the definition of this token as an enum. m4_define([b4_token_enum], -[b4_token_format([%s = %s], [$1])]) +[b4_token_visible_if([$1], + [m4_format([ %-30s %s], + m4_format([[%s = %s%s%s]], + [b4_symbol([$1], [id])], + [b4_symbol([$1], b4_api_token_raw_if([[number]], [[user_number]]))], + m4_if([$1], b4_last_enum_token, [], [[,]])), + [b4_symbol_tag_comment([$1])])])]) # b4_token_enums @@ -461,9 +467,7 @@ m4_define([b4_token_enums], # define ]b4_api_PREFIX[TOKENTYPE enum ]b4_api_prefix[tokentype { - ]m4_join([, - ], - b4_symbol_map([b4_token_enum]))[ +]b4_symbol_foreach([b4_token_enum])[ }; #endif ]])]) diff --git a/src/parse-gram.h b/src/parse-gram.h index 473dc30e..a7c63cea 100644 --- a/src/parse-gram.h +++ b/src/parse-gram.h @@ -77,65 +77,66 @@ extern int gram_debug; # define GRAM_TOKENTYPE enum gram_tokentype { - GRAM_EOF = 0, - STRING = 3, - TSTRING = 4, - PERCENT_TOKEN = 5, - PERCENT_NTERM = 6, - PERCENT_TYPE = 7, - PERCENT_DESTRUCTOR = 8, - PERCENT_PRINTER = 9, - PERCENT_LEFT = 10, - PERCENT_RIGHT = 11, - PERCENT_NONASSOC = 12, - PERCENT_PRECEDENCE = 13, - PERCENT_PREC = 14, - PERCENT_DPREC = 15, - PERCENT_MERGE = 16, - PERCENT_CODE = 17, - PERCENT_DEFAULT_PREC = 18, - PERCENT_DEFINE = 19, - PERCENT_DEFINES = 20, - PERCENT_ERROR_VERBOSE = 21, - PERCENT_EXPECT = 22, - PERCENT_EXPECT_RR = 23, - PERCENT_FLAG = 24, - PERCENT_FILE_PREFIX = 25, - PERCENT_GLR_PARSER = 26, - PERCENT_INITIAL_ACTION = 27, - PERCENT_LANGUAGE = 28, - PERCENT_NAME_PREFIX = 29, - PERCENT_NO_DEFAULT_PREC = 30, - PERCENT_NO_LINES = 31, - PERCENT_NONDETERMINISTIC_PARSER = 32, - PERCENT_OUTPUT = 33, - PERCENT_PURE_PARSER = 34, - PERCENT_REQUIRE = 35, - PERCENT_SKELETON = 36, - PERCENT_START = 37, - PERCENT_TOKEN_TABLE = 38, - PERCENT_VERBOSE = 39, - PERCENT_YACC = 40, - BRACED_CODE = 41, - BRACED_PREDICATE = 42, - BRACKETED_ID = 43, - CHAR = 44, - COLON = 45, - EPILOGUE = 46, - EQUAL = 47, - ID = 48, - ID_COLON = 49, - PERCENT_PERCENT = 50, - PIPE = 51, - PROLOGUE = 52, - SEMICOLON = 53, - TAG = 54, - TAG_ANY = 55, - TAG_NONE = 56, - INT = 57, - PERCENT_PARAM = 58, - PERCENT_UNION = 59, - PERCENT_EMPTY = 60 + GRAM_EOF = 0, /* "end of file" */ + STRING = 3, /* "string" */ + TSTRING = 4, /* "translatable string" */ + PERCENT_TOKEN = 5, /* "%token" */ + PERCENT_NTERM = 6, /* "%nterm" */ + PERCENT_TYPE = 7, /* "%type" */ + PERCENT_DESTRUCTOR = 8, /* "%destructor" */ + PERCENT_PRINTER = 9, /* "%printer" */ + PERCENT_LEFT = 10, /* "%left" */ + PERCENT_RIGHT = 11, /* "%right" */ + PERCENT_NONASSOC = 12, /* "%nonassoc" */ + PERCENT_PRECEDENCE = 13, /* "%precedence" */ + PERCENT_PREC = 14, /* "%prec" */ + PERCENT_DPREC = 15, /* "%dprec" */ + PERCENT_MERGE = 16, /* "%merge" */ + PERCENT_CODE = 17, /* "%code" */ + PERCENT_DEFAULT_PREC = 18, /* "%default-prec" */ + PERCENT_DEFINE = 19, /* "%define" */ + PERCENT_DEFINES = 20, /* "%defines" */ + PERCENT_ERROR_VERBOSE = 21, /* "%error-verbose" */ + PERCENT_EXPECT = 22, /* "%expect" */ + PERCENT_EXPECT_RR = 23, /* "%expect-rr" */ + PERCENT_FLAG = 24, /* "%" */ + PERCENT_FILE_PREFIX = 25, /* "%file-prefix" */ + PERCENT_GLR_PARSER = 26, /* "%glr-parser" */ + PERCENT_INITIAL_ACTION = 27, /* "%initial-action" */ + PERCENT_LANGUAGE = 28, /* "%language" */ + PERCENT_NAME_PREFIX = 29, /* "%name-prefix" */ + PERCENT_NO_DEFAULT_PREC = 30, /* "%no-default-prec" */ + PERCENT_NO_LINES = 31, /* "%no-lines" */ + PERCENT_NONDETERMINISTIC_PARSER = 32, /* "%nondeterministic-parser" */ + PERCENT_OUTPUT = 33, /* "%output" */ + PERCENT_PURE_PARSER = 34, /* "%pure-parser" */ + PERCENT_REQUIRE = 35, /* "%require" */ + PERCENT_SKELETON = 36, /* "%skeleton" */ + PERCENT_START = 37, /* "%start" */ + PERCENT_TOKEN_TABLE = 38, /* "%token-table" */ + PERCENT_VERBOSE = 39, /* "%verbose" */ + PERCENT_YACC = 40, /* "%yacc" */ + BRACED_CODE = 41, /* "{...}" */ + BRACED_PREDICATE = 42, /* "%?{...}" */ + BRACKETED_ID = 43, /* "[identifier]" */ + CHAR = 44, /* "character literal" */ + COLON = 45, /* ":" */ + EPILOGUE = 46, /* "epilogue" */ + EQUAL = 47, /* "=" */ + ID = 48, /* "identifier" */ + ID_COLON = 49, /* "identifier:" */ + PERCENT_PERCENT = 50, /* "%%" */ + PIPE = 51, /* "|" */ + PROLOGUE = 52, /* "%{...%}" */ + SEMICOLON = 53, /* ";" */ + TAG = 54, /* "" */ + TAG_ANY = 55, /* "<*>" */ + TAG_NONE = 56, /* "<>" */ + INT = 57, /* "integer literal" */ + PERCENT_PARAM = 58, /* "%param" */ + PERCENT_UNION = 59, /* "%union" */ + PERCENT_EMPTY = 60 /* "%empty" */ + }; #endif