Bison 警告:赋值从整数生成指针,但不强制转换yylval=atoi(yytext);
我正在尝试使用可重入的lex和yacc编写一个简单的计算器应用程序。这里我希望创建两个线程(解析器),它们应该解析输入文件中提供的输入。要在输入文件中解析的行被划分为两个线程 我的简单计算器的lex代码是Bison 警告:赋值从整数生成指针,但不强制转换yylval=atoi(yytext);,bison,flex-lexer,yacc,lex,bisonc++,Bison,Flex Lexer,Yacc,Lex,Bisonc++,我正在尝试使用可重入的lex和yacc编写一个简单的计算器应用程序。这里我希望创建两个线程(解析器),它们应该解析输入文件中提供的输入。要在输入文件中解析的行被划分为两个线程 我的简单计算器的lex代码是 %option reentrant bison-bridge %option noyywrap %{ #include<stdio.h> void yyerror(char *); #include "y.tab.h" %} %% [0-9]+ { yylval
%option reentrant bison-bridge
%option noyywrap
%{
#include<stdio.h>
void yyerror(char *);
#include "y.tab.h"
%}
%%
[0-9]+ {
yylval=atoi(yytext);
return INTEGER;
}
[-+\n] return *yytext;
[ \t] ;/* Skip whitespaces*/
. ;
%%
当我编译并运行这个程序时,我得到以下输出
File pointer set
Starting thread 0...
Starting thread 0...
Done scanner init
Thread with id 0 obtained lock
Done scanner init
Thread with id 1 obtained lock
Segmentation fault (core dumped)
当我用gdb调试这个程序时,它说程序收到了信号SIGSEGV,在下面的行中出现了分段错误
yyparse(scanner);
我找不到如何调试这个程序。
在这方面的帮助是感激的。
谢谢
yyin
必须是文件*
,而不是int
。在需要文件*
的地方传递int
不会有令人愉快的结果;故障并非意外
我很惊讶你在编译代码时没有收到一堆警告。解决了警告的问题:赋值从整数生成指针,但没有强制转换yylval=atoi(yytext)强> 参考了这篇文章,了解到我必须对代码进行以下更改,以消除警告
*yylval=atoi(yytex)
谢谢你我根据你的建议对我的文件做了必要的更改。现在我得到所有的零值作为输出。我期望输入文件中提供的算术表达式的结果作为输出。当我编译时,我得到以下警告:赋值从整数生成指针,而不使用强制转换[默认启用]yylval=atoi(yytext)代码>我还想限制第一个线程验证第一个6行,第二个线程处理接下来的6行,而这现在还没有发生。我将以上程序编译为$lex purelex.l**后跟**$yacc pureyacc.y和$gcc-o purecalc lex.yy.c y.tab.c-lpthread
yyparse(scanner);
*yylval=atoi(yytex)