2012-04-11 5 views
0

Ich versuche, einige Lex und Yacc Programme zu kompilieren. In der Schule verwenden wir Fedora Core 4. Ich benutze das gleiche Betriebssystem auf einer virtuellen Maschine zu Hause, aber ich kann das Programm nicht kompilieren. Im Folgenden sind die lex und yacc CodesLex und Yacc Programme können nicht kompiliert werden

LEX-Code

%{ 
#include "y.tab.h" 
%} 
%% 
[ \t]+ {;} 
\n {return;} 
[a-zA-Z][a-zA-Z0-9]* {return ID;} 
[0-9]+ {return NUMBER;} 
. {return yytext[0];} 
%% 

YACC-Code

%{ 
#include<stdio.h> 
%} 
%token NUMBER ID 
%left '+' '-' 
%left '*' '/' 
%% 
input:e'+'e 
|e'-'e 
|e'*'e 
|e'/'e 
|'('e')' 
; 
e:NUMBER 
|ID 
; 
%% 
int main() 
{ 
printf("\n\nEnter an expression"); 
yyparse(); 
printf("\n\nValid Expression\n\n"); 
} 
void yyerror() 
{ 
printf("\n\nInvalid Expression\n\n"); 
exit(0); 
} 

While executing the above code, I get the following linker error 

$ lex program_name.l      //executes without error 
$ yacc -d program_name.y     //executes without error 
$ cc lex.yy.c y.tab.c -ll -ly 
/usr/bin/ld: cannot find -ly 
collect2: ld returned 1 exit status 

Bitte helfen Sie mir diesen Fehler zu beheben. Vielen Dank im Voraus

Antwort

0

dies mit Ihrem yacc lib zu tun ... Sie das Verzeichnis mit der Option -L"/some/path/to/lib-directory"

oder möglicherweise Sie die entsprechende lib installieren müssen schließen müssen ...

1

This conversion umreißt Ihr Problem: Sie müssen liby installiert werden und der Compiler muss die richtige Bibliothek Pfad (zB -L/usr/lib) erzählt

die -ly Option, den Linker mit der liby Bibliothek zu verknüpfen gesetzt haben, aber nach zu dem Fehler kann es nicht finden diese Bibliothek

1

Es gibt keine solche Sache wie -ly. Lex- und Flex-generierte Scanner verwenden eine Laufzeitbibliothek. Ein yacc generierter Parser tut dies nicht. Nehmen Sie einfach die -ly und versuchen Sie es erneut.

Verwandte Themen