Hi,

I think I have found a bug in bison v. 3.0.2.

scameron@spacenerd ~/github/simple-expression-parser $ yacc --version
bison (GNU Bison) 3.0.2
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
scameron@spacenerd ~/github/simple-expression-parser $

Note that is the version of bison shipped with e.g. Linux Mint 17.

Below is some output (y.tab.h) of yacc (bison) v 3.0.2

Notice the '#line' directive which does not start at the beginning of a
line:

"union #line 49 "expression-parser.y" /* yacc.c:1909  */"

gcc will not compile this.  I think that means it's a bug in bison.
Earlier versions of bison produce correct output (e.g. v. 2.5 works
correctly, and the '#line' directive begins on a new line.)

-------8<--------8<-------8<-------8<--------8<-------8<-------8<--------8<-------8<
[...]
/* Value type.  */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union #line 49 "expression-parser.y" /* yacc.c:1909  */
valtype
 YYSTYPE;
union #line 49 "expression-parser.y" /* yacc.c:1909  */
valtype

{
#line 49 "expression-parser.y" /* yacc.c:1909  */

        struct parser_value_type {
                double dval;
                long long ival;
                int has_dval;
                int has_error;
        } v;

#line 77 "y.tab.h" /* yacc.c:1909  */
};
# define YYSTYPE_IS_TRIVIAL 1
[...]
-------8<--------8<-------8<-------8<--------8<-------8<-------8<--------8<-------8<

The program which caused this is a simple arithmetic expression parser
(basic yacc 101 stuff).  It is here:
https://github.com/smcameron/simple-expression-parser

Thank you.

-- steve

Reply via email to