mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-22 18:53:04 +00:00
skeletons: factor yacc.c and glr.c.
yacc.c and glr.c share common declarations. Their YYLTYPE are exactly equal, and their YYSTYPE are sufficiently alike to be fused (its declaration was protected by YYSTYPE_IS_DECLARED in yacc.c, but not in glr.c). Besides, yacc.c duplicated the definitions of YYLTYPE and YYSTYPE (*.h/*.c). * data/c.m4 (b4_declare_yylstype): New. * data/yacc.c, data/glr.c: Use it.
This commit is contained in:
37
data/c.m4
37
data/c.m4
@@ -530,3 +530,40 @@ b4_locations_if([, yylocationp])[]b4_user_args[);
|
|||||||
YYFPRINTF (yyoutput, ")");
|
YYFPRINTF (yyoutput, ")");
|
||||||
}]dnl
|
}]dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
## -------------- ##
|
||||||
|
## Declarations. ##
|
||||||
|
## -------------- ##
|
||||||
|
|
||||||
|
# b4_declare_yylstype
|
||||||
|
# ------------------
|
||||||
|
# Declaration that might either go into the header (if --defines)
|
||||||
|
# or open coded in the parser body. Declare YYSTYPE and YYLTYPE.
|
||||||
|
m4_define([b4_declare_yylstype],
|
||||||
|
[[#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||||
|
]m4_ifdef([b4_stype],
|
||||||
|
[[typedef union ]b4_union_name[
|
||||||
|
{
|
||||||
|
]b4_user_stype[
|
||||||
|
} YYSTYPE;
|
||||||
|
# define YYSTYPE_IS_TRIVIAL 1]],
|
||||||
|
[m4_if(b4_tag_seen_flag, 0,
|
||||||
|
[[typedef int YYSTYPE;
|
||||||
|
# define YYSTYPE_IS_TRIVIAL 1]])])[
|
||||||
|
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||||
|
# define YYSTYPE_IS_DECLARED 1
|
||||||
|
#endif]b4_locations_if([[
|
||||||
|
|
||||||
|
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
|
||||||
|
typedef struct YYLTYPE
|
||||||
|
{
|
||||||
|
int first_line;
|
||||||
|
int first_column;
|
||||||
|
int last_line;
|
||||||
|
int last_column;
|
||||||
|
} YYLTYPE;
|
||||||
|
# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
|
||||||
|
# define YYLTYPE_IS_DECLARED 1
|
||||||
|
# define YYLTYPE_IS_TRIVIAL 1
|
||||||
|
#endif]])
|
||||||
|
])
|
||||||
|
|||||||
31
data/glr.c
31
data/glr.c
@@ -163,34 +163,9 @@ m4_define([b4_rhs_location],
|
|||||||
# Declaration that might either go into the header (if --defines)
|
# Declaration that might either go into the header (if --defines)
|
||||||
# or open coded in the parser body.
|
# or open coded in the parser body.
|
||||||
m4_define([b4_shared_declarations],
|
m4_define([b4_shared_declarations],
|
||||||
[b4_percent_code_get([[requires]])[]dnl
|
[b4_percent_code_get([[requires]])[
|
||||||
|
]b4_token_enums(b4_tokens)[
|
||||||
b4_token_enums(b4_tokens)
|
]b4_declare_yylstype[
|
||||||
|
|
||||||
[#ifndef YYSTYPE
|
|
||||||
]m4_ifdef([b4_stype],
|
|
||||||
[[typedef union ]b4_union_name[
|
|
||||||
{
|
|
||||||
]b4_user_stype[
|
|
||||||
} YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1]],
|
|
||||||
[m4_if(b4_tag_seen_flag, 0,
|
|
||||||
[[typedef int YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1]])])[
|
|
||||||
#endif
|
|
||||||
]b4_locations_if([[
|
|
||||||
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
|
|
||||||
typedef struct YYLTYPE
|
|
||||||
{
|
|
||||||
int first_line;
|
|
||||||
int first_column;
|
|
||||||
int last_line;
|
|
||||||
int last_column;
|
|
||||||
} YYLTYPE;
|
|
||||||
# define YYLTYPE_IS_DECLARED 1
|
|
||||||
# define YYLTYPE_IS_TRIVIAL 1
|
|
||||||
#endif
|
|
||||||
]])[
|
|
||||||
]b4_percent_code_get([[provides]])[]dnl
|
]b4_percent_code_get([[provides]])[]dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|||||||
86
data/yacc.c
86
data/yacc.c
@@ -158,9 +158,9 @@ m4_define([b4_rhs_location],
|
|||||||
[(yylsp@{($2) - ($1)@})])
|
[(yylsp@{($2) - ($1)@})])
|
||||||
|
|
||||||
|
|
||||||
## ------------------ ##
|
## -------------- ##
|
||||||
## Parser variables. ##
|
## Declarations. ##
|
||||||
## ------------------ ##
|
## -------------- ##
|
||||||
|
|
||||||
# b4_declare_scanner_communication_variables
|
# b4_declare_scanner_communication_variables
|
||||||
# ------------------------------------------
|
# ------------------------------------------
|
||||||
@@ -224,10 +224,9 @@ m4_define([b4_declare_parser_state_variables], [b4_pure_if([[
|
|||||||
yytype_int16 *yyes;
|
yytype_int16 *yyes;
|
||||||
YYSIZE_T yyes_capacity;]])])
|
YYSIZE_T yyes_capacity;]])])
|
||||||
|
|
||||||
|
## -------------- ##
|
||||||
## --------------------------------------------------------- ##
|
## Output files. ##
|
||||||
## Defining symbol actions, e.g., printers and destructors. ##
|
## -------------- ##
|
||||||
## --------------------------------------------------------- ##
|
|
||||||
|
|
||||||
# We do want M4 expansion after # for CPP macros.
|
# We do want M4 expansion after # for CPP macros.
|
||||||
m4_changecom()
|
m4_changecom()
|
||||||
@@ -287,37 +286,10 @@ m4_if(b4_prefix, [yy], [],
|
|||||||
# define YYTOKEN_TABLE ]b4_token_table[
|
# define YYTOKEN_TABLE ]b4_token_table[
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
]b4_percent_code_get([[requires]])[]dnl
|
]b4_percent_code_get([[requires]])[
|
||||||
|
]b4_token_enums_defines(b4_tokens)[
|
||||||
b4_token_enums_defines(b4_tokens)[
|
]b4_declare_yylstype[
|
||||||
|
]b4_push_if([[
|
||||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
|
||||||
]m4_ifdef([b4_stype],
|
|
||||||
[[typedef union ]b4_union_name[
|
|
||||||
{
|
|
||||||
]b4_user_stype[
|
|
||||||
} YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1]],
|
|
||||||
[m4_if(b4_tag_seen_flag, 0,
|
|
||||||
[[typedef int YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1]])])[
|
|
||||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
|
||||||
# define YYSTYPE_IS_DECLARED 1
|
|
||||||
#endif]b4_locations_if([[
|
|
||||||
|
|
||||||
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
|
|
||||||
typedef struct YYLTYPE
|
|
||||||
{
|
|
||||||
int first_line;
|
|
||||||
int first_column;
|
|
||||||
int last_line;
|
|
||||||
int last_column;
|
|
||||||
} YYLTYPE;
|
|
||||||
# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
|
|
||||||
# define YYLTYPE_IS_DECLARED 1
|
|
||||||
# define YYLTYPE_IS_TRIVIAL 1
|
|
||||||
#endif]])b4_push_if([[
|
|
||||||
|
|
||||||
#ifndef YYPUSH_DECLS
|
#ifndef YYPUSH_DECLS
|
||||||
# define YYPUSH_DECLS
|
# define YYPUSH_DECLS
|
||||||
struct yypstate;
|
struct yypstate;
|
||||||
@@ -2076,40 +2048,10 @@ b4_copyright([Bison interface for Yacc-like parsers in C],
|
|||||||
|
|
||||||
b4_percent_code_get([[requires]])[]dnl
|
b4_percent_code_get([[requires]])[]dnl
|
||||||
|
|
||||||
b4_token_enums_defines(b4_tokens)
|
b4_token_enums_defines(b4_tokens)[
|
||||||
|
]b4_declare_yylstype[
|
||||||
[#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
]b4_pure_if([], [[extern YYSTYPE ]b4_prefix[lval;
|
||||||
]m4_ifdef([b4_stype],
|
]b4_locations_if([[extern YYLTYPE ]b4_prefix[lloc;]])])dnl
|
||||||
[[typedef union ]b4_union_name[
|
|
||||||
{
|
|
||||||
]b4_user_stype[
|
|
||||||
} YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1]],
|
|
||||||
[m4_if(b4_tag_seen_flag, 0,
|
|
||||||
[[typedef int YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1]])])[
|
|
||||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
|
||||||
# define YYSTYPE_IS_DECLARED 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
]b4_pure_if([], [[extern YYSTYPE ]b4_prefix[lval;]])
|
|
||||||
|
|
||||||
b4_locations_if(
|
|
||||||
[#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
|
|
||||||
typedef struct YYLTYPE
|
|
||||||
{
|
|
||||||
int first_line;
|
|
||||||
int first_column;
|
|
||||||
int last_line;
|
|
||||||
int last_column;
|
|
||||||
} YYLTYPE;
|
|
||||||
# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
|
|
||||||
# define YYLTYPE_IS_DECLARED 1
|
|
||||||
# define YYLTYPE_IS_TRIVIAL 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
]b4_pure_if([], [[extern YYLTYPE ]b4_prefix[lloc;]])
|
|
||||||
)dnl b4_locations_if
|
|
||||||
b4_push_if([[
|
b4_push_if([[
|
||||||
#ifndef YYPUSH_DECLS
|
#ifndef YYPUSH_DECLS
|
||||||
# define YYPUSH_DECLS
|
# define YYPUSH_DECLS
|
||||||
|
|||||||
Reference in New Issue
Block a user