Bison 野牛,简单的计算器程序
我想做一个简单计算器的解析器,但我无法理解为什么简单输入会出错。 Flex文件如下所示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);} %% 我收到错误消息。为什么会发生这种
%{
#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 */