Related articles |
---|
Two pass compiler using YACC? wsineel@info.win.tue.nl (1990-08-22) |
Re: Two pass compiler using YACC? mkie@vlsivie.at (1990-08-23) |
Re: Two pass compiler using YACC? tbr@virgil.tfic.bc.ca (1990-08-24) |
Re: Two pass compiler using YACC? bart@videovax.tv.tek.com (Bart Massey) (1990-08-25) |
Re: Two pass compiler using YACC? sja@sirius.hut.fi (1990-08-25) |
Re: Two pass compiler using YACC? meissner@osf.org (1990-08-27) |
Two pass compiler using YACC? jar@florida.eng.ileaf.com (1990-09-02) |
Two pass compiler using YACC? meissner@osf.org (1990-09-06) |
Newsgroups: | comp.compilers |
From: | tbr@virgil.tfic.bc.ca (Tom Rushworth) |
Keywords: | yacc |
Organization: | Compilers Central |
Date: | Fri, 24 Aug 90 13:36:19 PDT |
In article <1364@svin02.info.win.tue.nl> wsineel@info.win.tue.nl (e.vriezekolk)
says:
>The problems come during link-time, for ld, obviously, complains about
>multiple defined symbols (such as yylval and yyparse).
I have a number of library routines that need to parse different forms of
input, and I ran into the same problem (multiple yacc parsers in one program).
The brute force solution I used was in my makefile :
#-------------------------------------------------------
parse.c: definition.y
yacc definition.y
sed -f Makestatic <y.tab.c >$@
rm y.tab.c
#-------------------------------------------------------
where Makestatic is:
#-------------------------------------------------------
/^extern int yychar/d
/^extern short yyerrflag/d
/^YYSTYPE/s//static &/
/^short yyexca/s//static &/
/^short yyact/s//static &/
/^short yypact/s//static &/
/^short yypgo/s//static &/
/^short yyr1/s//static &/
/^short yyr2/s//static &/
/^short yychk/s//static &/
/^short yydef/s//static &/
/^int yydebug/s//static &/
/^int yychar/s//static &/
/^int yynerrs/s//static &/
/^short yyerrflag/s//static &/
/^yyparse()/s//static &/
#-------------------------------------------------------
I then #include "parse.c" in the controlling code (instead of compiling it as
a separate module) and supply static versions of any of the externs deleted
in the script. This all works (at least on my Sun3s & 4s), the only price you
pay is two (or more) copies of the parsing code.
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.