gpt4 book ai didi

c++ - 编译flex/bison程序报错

转载 作者:行者123 更新时间:2023-11-28 07:17:51 25 4
gpt4 key购买 nike

我得到了以下要编译和运行的 flex 和 bison 代码:

unari.lex:

%{
#include "unari.tab.h"
using namespace std;
%}
%option noyywrap

%%

a {yylval=1; return TOK_A;}
\n return '\n';
\+ return '+';
. /*ignore all rest*/

%%

unari.y:

%{
#include <iostream>
using namespace std;
void yyerror(const char *errorinfo);
int yylex();
%}

%left TOK_A
%left '+'

%%
line: exp '\n' {cout<<$1<<endl; return 0;}
;
exp: exp exp {$$=$1+$2;}
| exp '+' exp {$$=$1+$3;}
| TOK_A {$$=yylval;}
;
%%
void yyerror(const char *errorinfo) {
cout<<"problem"<<endl;
}


int main() {
while(yyparse()==0);
return 0;
}

生成文件:

calc: lex.yy.o unari.tab.o
g++ unari.tab.o lex.yy.o -o calc.exe

unari.tab.o: unari.tab.c
g++ -c unari.tab.c

lex.yy.o: lex.yy.c
g++ -c lex.yy.c

lex.yy.c: unari.lex unari.tab.h
flex unari.lex

unari.tab.c unari.tab.h: unari.y
bison -d unari.y

clean:
rm *.h *.c *.o *.exe

问题是,在 Windows 上编译时出现以下错误:

makefile1:: *** multiple target patterns. Stop.

有没有人认识到这个问题?我已经为此烦恼了 3 个多小时,尝试在网上搜索但没有发现任何有用的东西......

最佳答案

代替

unari.tab.c unari.tab.h: unari.y
bison -d unari.y

尝试

unari.tab.h: unari.y
bison -d unari.y

unari.tab.c: unari.y
bison unari.y

可能还有其他方法可以做到这一点,但我很确定这对你有用。


奇怪。我复制了你的文件,一旦我在 Makefile 中解决了所有空格/制表符问题,它似乎工作正常。

[Charlies-MacBook-Pro:~/junk] crb% make clean
rm *.h *.c *.o *.exe
[Charlies-MacBook-Pro:~/junk] crb% make
bison -d unari.y
unari.y: conflicts: 2 shift/reduce
flex unari.lex
g++ -c lex.yy.c
g++ -c unari.tab.c
g++ unari.tab.o lex.yy.o -o calc.exe


[Charlies-MacBook-Pro:~/junk] crb% which make
/usr/bin/make
[Charlies-MacBook-Pro:~/junk] crb% make --version
GNU Make 3.81

可能是 Windows 上的 make 问题,我没有 Windows 机器。也许尝试谷歌搜索“多个目标模式”。停止。”

关于c++ - 编译flex/bison程序报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com