linux 卸载 bison,linux-无法编译Bison示例代码

我正在阅读LFS,并且遇到过野牛,在其他地方之前我都看过它,所以我认为我应该多了解一点.我发现this page from UC Riverside CS department,示例代码不起作用.有人知道怎么了吗?为了方便起见,我粘贴了代码:

calc.lex文件:

/* Mini Calculator */

/* calc.lex */

%{

#include "heading.h"

#include "tok.h"

int yyerror(char *s);

int yylineno = 1;

%}

digit [0-9]

int_const {digit}+

%%

{int_const} { yylval.int_val = atoi(yytext); return INTEGER_LITERAL; }

"+" { yylval.op_val = new std::string(yytext); return PLUS; }

"*" { yylval.op_val = new std::string(yytext); return MULT; }

[ \t]* {}

[\n] { yylineno++; }

. { std::cerr << "SCANNER "; yyerror(""); exit(1); }

calc.y文件:

/* Mini Calculator */

/* calc.y */

%{

#include "heading.h"

int yyerror(char *s);

int yylex(void);

%}

%union{

int int_val;

string* op_val;

}

%start input

%token INTEGER_LITERAL

%type exp

%left PLUS

%left MULT

%%

input: /* empty */

| exp { cout << "Result: " << $1 << endl; }

;

exp: INTEGER_LITERAL { $$= $1; }

| exp PLUS exp { $$= $1 + $3; }

| exp MULT exp { $$= $1 * $3; }

;

%%

int yyerror(string s)

{

extern int yylineno; // defined and maintained in lex.c

extern char *yytext; // defined and maintained in lex.c

cerr << "ERROR: " << s << " at symbol \"" << yytext;

cerr << "\" on line " << yylineno << endl;

exit(1);

}

int yyerror(char *s)

{

return yyerror(string(s));

}

这是错误消息:

$make

bison -d -v calc.y

cp calc.tab.c bison.c

cmp -s calc.tab.h tok.h || cp calc.tab.h tok.h

g++ -g -Wall -ansi -pedantic -c bison.c -o bison.o

calc.tab.c: In function ‘int yyparse()’:

calc.tab.c:1381: warning: deprecated conversion from string constant to ‘char*’

calc.tab.c:1524: warning: deprecated conversion from string constant to ‘char*’

flex calc.lex

cp lex.yy.c lex.c

g++ -g -Wall -ansi -pedantic -c lex.c -o lex.o

calc.lex:8: error: redefinition of ‘int yylineno’

lex.yy.c:349: error: ‘int yylineno’ previously defined here

calc.lex: In function ‘int yylex()’:

calc.lex:23: warning: deprecated conversion from string constant to ‘char*’

lex.yy.c: At global scope:

lex.yy.c:1105: warning: ‘void yyunput(int, char*)’ defined but not used

make: *** [lex.o] Error 1

解决方法:

问题在于您正在使用C编译器来编译C代码.如果您希望flex生成C,则可以使用命令行选项.

扫描仪生成的代码已经为yylineno提供了定义.

在C中,可以接受以下内容:

int yylineno; /* tentative definition */

int yylineno = 1; /* definition */

在C中,它不是:

int yylineno; /* definition */

int yylineno = 1; /* another definition: duplicate, error! */

另请注意,-ansi gcc选项适用于C语言.

关于字符串常量的警告也是由于C.在C中,字符串文字(如“ abc”)的计算结果为const char *,而不是char *.

最后,请注意,Flex生成的扫描程序不会自动包含更新yylineno的代码.这是通过%option yylineno打开的.查看Flex上的GNU Info手册.

标签:bison,compiler-errors,linux

来源: https://codeday.me/bug/20191122/2061532.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux系统上下载和安装Flex和Bison,可以使用以下步骤: 1. 打开终端窗口。 2. 运行以下命令来安装Flex: ``` sudo apt-get update sudo apt-get install flex ``` 3. 运行以下命令来安装Bison: ``` sudo apt-get install bison ``` 4. 系统会提示您输入管理员密码以确认安装。 5. 安装完成后,您可以通过运行以下命令来验证它们是否正常安装: ``` flex --version bison --version ``` 如果安装成功,将显示各自的版本号。 6. 现在,您可以开始使用Flex和Bison来编写和编译词法分析器和语法分析器了。 值得注意的是,上述步骤是基于Debian或Ubuntu等Debian系Linux发行版。对于其他Linux发行版,请根据其官方文档或相应的软件包管理器进行相应调整或搜索。 ### 回答2: Flex和Bison是在Linux系统中常用的词法分析器生成器和语法分析器生成器。 在Linux系统中,我们可以通过以下几种方式来下载并安装Flex和Bison: 1. 包管理器下载安装:Linux系统大多都提供了包管理器,如Debian系列的apt,Red Hat系列的yum等。我们可以使用包管理器来下载并安装Flex和Bison。在终端中输入相应的命令即可完成安装。例如,在Debian系列系统中,我们可以使用以下命令来安装Flex和Bison: ``` sudo apt-get install flex bison ``` 2. 源代码编译安装:如果系统没有提供包管理器,或者我们想要获取最新版本的Flex和Bison,我们可以从官方网站上下载源代码进行编译安装。首先,我们需要访问Flex和Bison的官方网站,下载最新的源代码包。然后,解压下载的源代码包,在终端中进入解压后的目录。接下来,执行以下命令来编译和安装Flex和Bison: ``` ./configure make sudo make install ``` 3. 使用软件包管理器下载安装:除了使用官方网站提供的源代码包外,我们还可以使用其他第三方软件包管理器来下载并安装Flex和Bison。例如,在Arch Linux系统中,我们可以使用pacman包管理器来安装: ``` sudo pacman -S flex bison ``` 无论使用哪种方式,下载并安装Flex和Bison后,我们就可以在Linux系统中使用它们来生成词法分析器和语法分析器,以开发自己的程序或者处理文本文件等任务。 ### 回答3: 要下载Linux上的Flex和Bison,可以按照以下步骤进行操作。 首先,打开终端窗口,可以通过按下Ctrl+Alt+T来快速打开终端。 接下来,使用以下命令下载Flex和Bison的安装包: ``` sudo apt-get update sudo apt-get install flex sudo apt-get install bison ``` 这些命令会从Linux软件仓库中下载并安装Flex和Bison。 下载完成后,您可以使用以下命令来验证安装是否成功: ``` flex --version bison --version ``` 这些命令将显示安装的Flex和Bison的版本信息。 如果您的系统上已经安装了Flex和Bison,那么可能会显示它们的版本号,否则会提示找不到命令。 通过执行以上步骤,您就可以成功下载和安装Linux上的Flex和Bison。这两个工具在软件开发中广泛被使用,特别是在编写编译器和解释器等相关工具时非常有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值