[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