title: How do I use C++ in flex and bison?
body: <p>I have a project for school where we need to use flex and bison. I want to use C++ so that I have access to STL and my own classes that I wrote. We were provided with the following Makefile:</p>
  
  <pre><code>CC = gcc 
  CFLAGS = -g 
  
  OBJs = parse.tab.o symtab.o attr.o lex.yy.o 
  
  default: parser
  
  parser: ${OBJs}
      ${CC} ${CFLAGS} ${OBJs} -o parser -lfl
  
  lex.yy.c: scan.l parse.tab.h attr.h
      flex -i scan.l
  
  parse.tab.c: parse.y attr.h symtab.h
      bison -dv parse.y
  
  parse.tab.h: parse.tab.c
  
  clean:
      rm -f parser lex.yy.c *.o parse.tab.[ch] parse.output
  
  depend:
      makedepend -I. *.c
  </code></pre>
  
  <p>scan.l and parse.y have some initial flex/bison stuff to generate the scanner and parser. I need to add my own stuff to those files. symtab.{h, c} is supposed to be a implementation of a symbol table. attr.{h, c} are for some attribute magic. I want to make symtab.c a .cc file so I can use STL. I also have other reasons for wanting to use C++.</p>
  
  <p>I tried to use a parse.ypp file, so that a .cpp file would be generated. But the problem is that I'm not getting the right .h file. I changed the Makefile to look like this:</p>
  
  <pre><code>CC = g++          # Change gcc to g++
  CFLAGS = -g 
  
  OBJs = lex.yy.o parse.tab.o symtab.o attr.o
  
  default: lex.yy.c parser    # added lex.yy.c so I could just keep lex stuff in C since I don't really need C++ there
  
  parser: ${OBJs}
      ${CC} ${CFLAGS} ${OBJs} -o parser -lfl
  
  lex.yy.o: scan.l parse.tab.h attr.h      # added this rule to use gcc instead of g++
      gcc -c -o lex.yy.o lex.yy.c
  
  lex.yy.c: scan.l parse.tab.h attr.h
      flex -i scan.l
  
  parse.tab.cpp: parse.ypp attr.h symtab.h
      bison -dv parse.ypp
  
  parse.tab.h: parse.tab.cpp      # I want a parse.tab.h but I get parse.tab.hpp
  
  clean:
      rm -f parser lex.yy.c *.o parse.tab.cpp parse.tab.h parse.output
  
  depend:
      makedepend -I. *.c
  </code></pre>
  
  <p>Can someone tell me what I need to add or do to get C++ working? It should be noted I added some stuff in the .y (or .ypp) file to deal with moving from C to C++. In particular, I had to declare some stuff as extern. My main problem is that when I run make, scan.l has a bunch of syntax errors, and they seem to be because it cannot include parse.tab.h (because it is never generated).</p>