Bison 野牛,简单的计算器程序

Bison 野牛,简单的计算器程序,bison,flex-lexer,Bison,Flex Lexer,我想做一个简单计算器的解析器,但我无法理解为什么简单输入会出错。 Flex文件如下所示 %{ #include "exp.tab.h" #include <string.h> %} blanks [ \t\n]+ %% {blanks} { /* ignore */ } [0-9]+ {yylval= strtol(yytext, NULL, 10); return(NUMB);} %% 我收到错误消息。为什么会发生这种

我想做一个简单计算器的解析器,但我无法理解为什么简单输入会出错。 Flex文件如下所示

%{
#include "exp.tab.h"
#include <string.h>
%}

blanks          [ \t\n]+


%%

{blanks}        { /* ignore */ }
[0-9]+           {yylval= strtol(yytext, NULL, 10);
return(NUMB);}

%%

我收到错误消息。为什么会发生这种情况?

您的lexer缺少匹配/返回“+”标记的规则。尝试在末尾添加:

.    { return *yytext; }  /* any other single character returns as itself */

如果文本与任何规则不匹配,默认lexer操作是打印文本并跳过它。因此,您从解析器得到的错误是因为它得到123 12作为输入,这会导致语法错误。

标记时请注意。Flex用于Adobe/Apache框架。Gnu flex用于词法分析器。@Reboog711,flex lexer实际上是…@Charles Thank;我不知道。我刚刚修改了Flex标签Wiki,以提及Flex lexer标签:
123 + 12
.    { return *yytext; }  /* any other single character returns as itself */