Additional data point. Manually editing y.tab.c and y.tab.h to change the '#line...' directives to all begin on a new line makes it work.
-- steve On Sun, Sep 28, 2014 at 8:43 PM, Stephen Cameron <stephenmcame...@gmail.com> wrote: > 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 > > >