1

我正在尝试编译一些 lex 和 yacc 程序。在大学里,我们使用 Fedora Core 4。我在家里的虚拟机上使用相同的操作系统,但我无法编译该程序。以下是lex和yacc代码

莱克斯代码

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

没有这样的事情-ly。Lex 和 flex 生成的扫描器使用运行时支持库。yacc 生成的解析器不会。只需取出并重-ly试。

于 2012-04-12T01:43:41.440 回答
1

这与您的 yacc 库有关...您需要将目录包含在-L"/some/path/to/lib-directory"选项中

或者您可能需要安装适当的库...

于 2012-04-11T17:23:10.867 回答