[linux-l] flex
Axel Weiß
aweiss at informatik.hu-berlin.de
Mi Jun 30 09:56:33 CEST 2004
Peter Ross schrieb:
> On Wed, 30 Jun 2004, Axel [iso-8859-15] Weiß wrote:
> > Ich bin mir ncht sicher, ob lex verschiedene Parser zusammenlinken
> > können soll (er tut es offensichtlich nicht).
>
> Zumindest gibt es die Option -Pprefix nicht.
>
> > Mit flex funktioniert es prächtig.
>
> Mit -Pprefix oder hast Du es nun ohne tun koennen, nachdem Du lex
> rausgeschmissen hast?
Im ersten Abschnitt von foo.l setze ich die
%option prefix=foo
Das hat die gleichen Auswirkungen wie -Pfoo als flex-Argument, d.h.
o innerhalb von foo.l sind (die meisten) lex-Symbole sowohl als yy<sym> als
auch als foo<sym> ansprechbar
o alle lex-Symbole werden als foo<sym> exportiert.
Man muß noch beachten, daß die Symbole yywrap und yylval nicht von %option
prefix angefasst werden, d.h man muß am Anfang von foo.l noch
#define foowrap yywrap
#define yylval foolval
sagen, damit Compiler und Linker zufrieden sind.
> Neugierig
lex verarbeitet jedenfalls die erwähnte %option prefix, benennt auch brav die
Symbole um, aber yytextptr eben nicht.
BTW: Kennt jemand einen Weg, wie man ld den Export eines Symbols ausredet?
Beispiel:
foo.o und bar.o enthalten beide das Symbol 'horst'. Unglücklicherweise wird es
exportiert, d.h. in foo.c und bar.c als extern deklariert. In Wirklichkeit
werden sowohl in foo.o als auch in bar.o 'horst' nur lokal benutzt. (Warum
wird es dann extern deklariert? Es gibt heutzutage C-Quellen, die automatisch
erzeugt werden, und nicht ohne solche Fehlerchen sind ;). Gibt es eine
Chance, dem ld zu sagen, daß er das Symbol 'horst' vergessen soll? ld soll
natürlich alle anderen Symbole normal behandeln.
Gruß,
Axel
--
Humboldt-Universität zu Berlin
Institut für Informatik
Signalverarbeitung und Mustererkennung
Dipl.-Inf. Axel Weiß
Rudower Chaussee 25
12489 Berlin-Adlershof
+49-30-2093-3050
** www.freesp.de **
Mehr Informationen über die Mailingliste linux-l