1

いくつかの lex および yacc プログラムをコンパイルしようとしています。大学では Fedora Core 4 を使用しています。自宅の仮想マシンで同じ OS を使用していますが、プログラムをコンパイルできません。以下は、lex および yacc コードです。

LEXコード

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

YACCコード

%{
#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

このエラーの解決を手伝ってください。前もって感謝します

4

3 に答える 3

2

この変換は問題の概要を示しています。liby をインストールする必要があり、コンパイラには正しいライブラリ パスを設定する必要があります (例: -L/usr/lib)。

オプションは-lyリンカーにlibyライブラリとリンクするように指示しますが、エラーによると、そのライブラリが見つかりません

于 2012-04-11T17:24:21.983 に答える
1

-L"/some/path/to/lib-directory"これは yacc lib に関係しています...オプションでディレクトリを含める必要があります

または、適切なライブラリをインストールする必要があるかもしれません...

于 2012-04-11T17:23:10.867 に答える
1

なんてことはありません-ly。Lex および Flex で生成されたスキャナーは、ランタイム サポート ライブラリを使用します。yacc で生成されたパーサーはそうではありません。を取り出して-ly、もう一度試してください。

于 2012-04-12T01:43:41.440 に答える