mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-18 16:53:02 +00:00
* src/reader.c (parse_union_decl): Output yystype/YYSTYPE as we do
with yyltype/YYLTYPE. This allows inclusion of the generated header within the parser if the compiler, such as GGC, accepts multiple equivalent #defines.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2001-11-05 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/reader.c (parse_union_decl): Output yystype/YYSTYPE as we do
|
||||||
|
with yyltype/YYLTYPE. This allows inclusion of the generated
|
||||||
|
header within the parser if the compiler, such as GGC, accepts
|
||||||
|
multiple equivalent #defines.
|
||||||
|
|
||||||
2001-11-04 Akim Demaille <akim@epita.fr>
|
2001-11-04 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/getargs.c (longopts): Support `--output'. getopt is now
|
* src/getargs.c (longopts): Support `--output'. getopt is now
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ File: bison.info, Node: Top, Next: Introduction, Up: (dir)
|
|||||||
Bison
|
Bison
|
||||||
*****
|
*****
|
||||||
|
|
||||||
This manual documents version 1.30a of Bison, updated 4 November
|
This manual documents version 1.30a of Bison, updated 5 November
|
||||||
2001.
|
2001.
|
||||||
|
|
||||||
* Menu:
|
* Menu:
|
||||||
|
|||||||
@@ -855,11 +855,12 @@ The C declarations section (@pxref{C Declarations, ,The C Declarations Section})
|
|||||||
preprocessor directives.
|
preprocessor directives.
|
||||||
|
|
||||||
The @code{#define} directive defines the macro @code{YYSTYPE}, thus
|
The @code{#define} directive defines the macro @code{YYSTYPE}, thus
|
||||||
specifying the C data type for semantic values of both tokens and groupings
|
specifying the C data type for semantic values of both tokens and
|
||||||
(@pxref{Value Type, ,Data Types of Semantic Values}). The Bison parser will use whatever type
|
groupings (@pxref{Value Type, ,Data Types of Semantic Values}). The
|
||||||
@code{YYSTYPE} is defined as; if you don't define it, @code{int} is the
|
Bison parser will use whatever type @code{YYSTYPE} is defined as; if you
|
||||||
default. Because we specify @code{double}, each token and each expression
|
don't define it, @code{int} is the default. Because we specify
|
||||||
has an associated value, which is a floating point number.
|
@code{double}, each token and each expression has an associated value,
|
||||||
|
which is a floating point number.
|
||||||
|
|
||||||
The @code{#include} directive is used to declare the exponentiation
|
The @code{#include} directive is used to declare the exponentiation
|
||||||
function @code{pow}.
|
function @code{pow}.
|
||||||
@@ -1066,10 +1067,11 @@ token type is an identifier, that identifier is defined by Bison as a C
|
|||||||
macro whose definition is the appropriate number. In this example,
|
macro whose definition is the appropriate number. In this example,
|
||||||
therefore, @code{NUM} becomes a macro for @code{yylex} to use.
|
therefore, @code{NUM} becomes a macro for @code{yylex} to use.
|
||||||
|
|
||||||
The semantic value of the token (if it has one) is stored into the global
|
The semantic value of the token (if it has one) is stored into the
|
||||||
variable @code{yylval}, which is where the Bison parser will look for it.
|
global variable @code{yylval}, which is where the Bison parser will look
|
||||||
(The C data type of @code{yylval} is @code{YYSTYPE}, which was defined
|
for it. (The C data type of @code{yylval} is @code{YYSTYPE}, which was
|
||||||
at the beginning of the grammar; @pxref{Rpcalc Decls, ,Declarations for @code{rpcalc}}.)
|
defined at the beginning of the grammar; @pxref{Rpcalc Decls,
|
||||||
|
,Declarations for @code{rpcalc}}.)
|
||||||
|
|
||||||
A token type code of zero is returned if the end-of-file is encountered.
|
A token type code of zero is returned if the end-of-file is encountered.
|
||||||
(Bison recognizes any nonpositive value as indicating the end of the
|
(Bison recognizes any nonpositive value as indicating the end of the
|
||||||
@@ -2374,7 +2376,8 @@ the numbers associated with @var{x} and @var{y}.
|
|||||||
|
|
||||||
In a simple program it may be sufficient to use the same data type for
|
In a simple program it may be sufficient to use the same data type for
|
||||||
the semantic values of all language constructs. This was true in the
|
the semantic values of all language constructs. This was true in the
|
||||||
RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish Notation Calculator}).
|
RPN and infix calculator examples (@pxref{RPN Calc, ,Reverse Polish
|
||||||
|
Notation Calculator}).
|
||||||
|
|
||||||
Bison's default is to use type @code{int} for all semantic values. To
|
Bison's default is to use type @code{int} for all semantic values. To
|
||||||
specify some other type, define @code{YYSTYPE} as a macro, like this:
|
specify some other type, define @code{YYSTYPE} as a macro, like this:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
@set UPDATED 4 November 2001
|
@set UPDATED 5 November 2001
|
||||||
@set UPDATED-MONTH November 2001
|
@set UPDATED-MONTH November 2001
|
||||||
@set EDITION 1.30a
|
@set EDITION 1.30a
|
||||||
@set VERSION 1.30a
|
@set VERSION 1.30a
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
@set UPDATED 4 November 2001
|
@set UPDATED 5 November 2001
|
||||||
@set UPDATED-MONTH November 2001
|
@set UPDATED-MONTH November 2001
|
||||||
@set EDITION 1.30a
|
@set EDITION 1.30a
|
||||||
@set VERSION 1.30a
|
@set VERSION 1.30a
|
||||||
|
|||||||
16
src/reader.c
16
src/reader.c
@@ -711,6 +711,13 @@ parse_union_decl (void)
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
const char *prologue = "\
|
||||||
|
#ifndef YYSTYPE\n\
|
||||||
|
typedef union";
|
||||||
|
const char *epilogue = "\
|
||||||
|
yystype;\n\
|
||||||
|
# define YYSTYPE yystype\n\
|
||||||
|
#endif\n";
|
||||||
|
|
||||||
if (typed)
|
if (typed)
|
||||||
complain (_("multiple %s declarations"), "%union");
|
complain (_("multiple %s declarations"), "%union");
|
||||||
@@ -723,9 +730,9 @@ parse_union_decl (void)
|
|||||||
else
|
else
|
||||||
obstack_1grow (&attrs_obstack, '\n');
|
obstack_1grow (&attrs_obstack, '\n');
|
||||||
|
|
||||||
obstack_sgrow (&attrs_obstack, "typedef union");
|
obstack_sgrow (&attrs_obstack, prologue);
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_sgrow (&defines_obstack, "typedef union");
|
obstack_sgrow (&defines_obstack, prologue);
|
||||||
|
|
||||||
c = getc (finput);
|
c = getc (finput);
|
||||||
|
|
||||||
@@ -760,9 +767,9 @@ parse_union_decl (void)
|
|||||||
count--;
|
count--;
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
obstack_sgrow (&attrs_obstack, " YYSTYPE;\n");
|
obstack_sgrow (&attrs_obstack, epilogue);
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
|
obstack_sgrow (&defines_obstack, epilogue);
|
||||||
/* JF don't choke on trailing semi */
|
/* JF don't choke on trailing semi */
|
||||||
c = skip_white_space ();
|
c = skip_white_space ();
|
||||||
if (c != ';')
|
if (c != ';')
|
||||||
@@ -1955,7 +1962,6 @@ reader (void)
|
|||||||
/* Read the declaration section. Copy %{ ... %} groups to
|
/* Read the declaration section. Copy %{ ... %} groups to
|
||||||
TABLE_OBSTACK and FDEFINES file. Also notice any %token, %left,
|
TABLE_OBSTACK and FDEFINES file. Also notice any %token, %left,
|
||||||
etc. found there. */
|
etc. found there. */
|
||||||
obstack_1grow (&table_obstack, '\n');
|
|
||||||
obstack_fgrow3 (&table_obstack, "\
|
obstack_fgrow3 (&table_obstack, "\
|
||||||
/* %s, made from %s\n\
|
/* %s, made from %s\n\
|
||||||
by GNU bison %s. */\n\
|
by GNU bison %s. */\n\
|
||||||
|
|||||||
Reference in New Issue
Block a user