Probleme mit lex

O

odif

Aktives Mitglied
Thread Starter
Dabei seit
14.07.2005
Beiträge
417
Reaktionspunkte
1
Hi,

ich bin gerade dabei, mich in lex einzuarbeiten, habe aber gleich zu Beginn ein Problemm. Meine lex-Datei test.l sieht wir folgt aus:
Code:
%% 

.
\n

%%

Diese Datei lasse ich mittels lex test.l durch lex laufen. Herauskommt lex.yy.c. Diese will ich nun mit gcc kompilieren (Befehl: gcc lex.yy.c). Dabei treten jedoch sehr viele Fehler auf.
Hauptsächlich Fehler der folgenden Form:
Code:
lex.yy.c:640: error: dereferencing pointer to incomplete type
lex.yy.c:228: error: parse error before '*' token
lex.yy.c:530: error: 'stdin' undeclared (first use in this function)
lex.yy.c:530: error: (Each undeclared identifier is reported only once
lex.yy.c:530: error: for each function it appears in.)
lex.yy.c:533: error: 'stdout' undeclared (first use in this function)
lex.yy.c: In function 'yy_scan_bytes':
lex.yy.c:1328: error: dereferencing pointer to incomplete type
lex.yy.c: In function 'yy_fatal_error':
lex.yy.c:1398: warning: incompatible implicit declaration of built-in function 'fprintf'
lex.yy.c:1398: error: 'stderr' undeclared (first use in this function)
lex.yy.c:1399: warning: incompatible implicit declaration of built-in function 'exit'
lex.yy.c: In function 'yy_flex_alloc':
lex.yy.c:1462: warning: incompatible implicit declaration of built-in function 'malloc'

Was nun zu tun?

Grüße
odif
 
Bist Du sicher, dass Du da nicht einem Uralt-Tutorial erlegen bist? Den alten "lex" hat man schon lange gegen flex ausgetauscht und der taucht immer im Zusammenspiel mit bison (ehemals yacc) auf.
Übersetz` mal mit:
Code:
flex test.l
gcc lex.yy.c -lfl
libflex ist die Standard-(F)Lex(er)-Bibliothek. Das kompiliert dann. Aber das war dann auch schon alles... Wenn es unbedingt lex sein muss:
Code:
lex test.l
gcc lex.yy.c -ll

Das hier find ich sehr informativ: Lex and YACC primer/HOWTO
 
Wie wärs du schaust einfach mal in lex.yy.c ? Zum Beispiel die Probleme von wegen stdin und stdout sollten doch relativ einfach zu lösen sein?! Allerdings glaube ich nicht, dass irgendeine Version von lex solche Fehler produzieren sollte. Probier doch mal die zweiten %% wegzulassen, da du ja eh keine Subroutinen benutzt.
Und falls du kein C kannst probier doch lieber den Einstieg mit JLex (http://www.cs.princeton.edu/~appel/modern/java/JLex/) das ist genau die gleiche Syntax, es wird allerdings Java Code erzeugt. Zum Parserbauen kannst du dann BYacc/J benutzen.
 
der_Kay schrieb:
Code:
flex test.l
gcc lex.yy.c -lfl
Code:
lex test.l
gcc lex.yy.c -ll

Beides hat nicht funktioniert. Es kommen in beiden Fällen die oben genannten Fehlermeldungen.

Probier doch mal die zweiten %% wegzulassen, da du ja eh keine Subroutinen benutzt.

Das zweite %% gehört zu der Syntax.

Ich habe jetzt auch weitere Lex-Dateien ausprobiert , es kommt immer derselbe Mist.


Und Danke für den Hinweis auf JLex. Ich werde es mir mal anschauen.
odif
 
Der Fehler war sehr simpel.

Ich habe den Mac OS X SDK nicht installiert, sondern gedacht, dass der Compiler alleine reicht.

odif
 
Zurück
Oben Unten