bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

YYSTYPE needs to be defined and moved


From: Arthur Schwarz
Subject: YYSTYPE needs to be defined and moved
Date: Thu, 21 Nov 2013 06:01:21 -0800 (PST)


bison (GNU Bison) 2.7.1
flex 2.5.37


This has been filed in address@hidden as a question. On reflection, I think it 
is a bug. The rationale is that flex generates code which requires direct 
visibility to YYSTYPE. The bison generated code does two things:
1: If a %union is specified then YYSTYPE is undefined (see code fragment 
below), and
2: YYSTYPE is 'hidden' within a class definition which is incompatible with 
flex integration.

Most particularly, if the flex option %option bison-bridge is used and YY_DECL 
is not defined, then the following code is generated (using %option 
prefix="Slip"):
extern int Sliplex \
               (YYSTYPE * yylval_param );

which makes Sliplex available to yyparse but requires direct visibility to 
YYSTYPE.

My though is that the actual code generated by bison should be in the 
file/global scope of y.tab.hpp and not located in a class and that YYSTYPE 
should always be generated. As seen in the example below, it is not always 
generated.

In y.tab.hpp the definition of YYSTYPE is placed in the class parser as follows:

In the parser input file Slip.y the following appears:


 %file-prefix "Slip.bison"
 %language "C++"
 %name-prefix "Slip"
 %output "Slip.Bison.cpp"

 %union {
   int   everything;
 }


Which causes the generation of (without #lines) is:


namespace Slip {

  /// A Bison parser.
  class parser
  {
  public:
    /// Symbol semantic values.
#ifndef YYSTYPE
    union semantic_type
    {

   int   everything;
    };
#else
    typedef YYSTYPE semantic_type;
#endif 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]