Bison 警告:赋值从整数生成指针,但不强制转换yylval=atoi(yytext);

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

我正在尝试使用可重入的lex和yacc编写一个简单的计算器应用程序。这里我希望创建两个线程(解析器),它们应该解析输入文件中提供的输入。要在输入文件中解析的行被划分为两个线程

我的简单计算器的lex代码是

%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)