C++, BISON, and M4

P

pendell

Okay.

So I've just installed Fedora core 7 fresh from my machine. It comes
with G++, and bison installed directly.

So I try to make a program that uses bison. C++ chokes with the
error:

dimensions_dat.cc:1: error: expected constructor, destructor, or type
conversion before '(' token

Looking at the first line of dimensions_dat.cc, I find the following:


b4_copyright(Skeleton parser CASA Grammar Parsing with Bison,
1984, 1989, 1990, 2000, 2001, 2002)

Commenting this line out, the error goes away.

So just comment it out and go merrily on my way, right? Nope! There
are several uses of macros very like this one, in very hard-to-reach
places in the code. Far better just to get the macros working in the
first place.

Macros -- right. Looking around, I found that these are m4 macros
(used with the m4 preprocessor) define in /usr/share/bison/c.m4 .

I think what is *supposed* to happen is that c++ is supposed to run
the m4 processor first before doing anything else. These macros are
replaced by standard code, which is then properly compiled.

However, for some reason m4 is not replacing the macro calls. Either
it doesn't know where the macros are, or the macros are mis-defined
and being rejected. Since these are standard Bison definitions which
I have not touched, I find that highly unlikely.


Suggestions? Insight? If you don't know, where would I ask to find
out?
 
R

red floyd

Okay.

So I've just installed Fedora core 7 fresh from my machine. It comes
with G++, and bison installed directly.

So I try to make a program that uses bison. C++ chokes with the
error:

dimensions_dat.cc:1: error: expected constructor, destructor, or type
conversion before '(' token

Looking at the first line of dimensions_dat.cc, I find the following:


b4_copyright(Skeleton parser CASA Grammar Parsing with Bison,
1984, 1989, 1990, 2000, 2001, 2002)

Commenting this line out, the error goes away.

So just comment it out and go merrily on my way, right? Nope! There
are several uses of macros very like this one, in very hard-to-reach
places in the code. Far better just to get the macros working in the
first place.

Macros -- right. Looking around, I found that these are m4 macros
(used with the m4 preprocessor) define in /usr/share/bison/c.m4 .

I think what is *supposed* to happen is that c++ is supposed to run
the m4 processor first before doing anything else. These macros are
replaced by standard code, which is then properly compiled.
No, g++ does not call m4. Check your makefile
Suggestions? Insight? If you don't know, where would I ask to find
out?

Suggestion: ask in a GNU newsgroup. Try gnu.g++.help
 
G

Guest

Okay.

So I've just installed Fedora core 7 fresh from my machine. It comes
with G++, and bison installed directly.

So I try to make a program that uses bison. C++ chokes with the
error:

If you have a problem with a specific program, post your problems in a
group/mailing-list discussing that program. Often the code comes with
files such as README or similar that will tell you how to configure and
build it, look for those files and read carefully.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,189
Members
46,734
Latest member
manin

Latest Threads

Top