我想为简单的计算器制作解析器,但我不能理解我为简单输入而出错。 Flex文件看起来像这样
%{
#include "exp.tab.h"
#include <string.h>
%}
blanks [ \t\n]+
%%
{blanks} { /* ignore */ }
[0-9]+ {yylval= strtol(yytext, NULL, 10);
return(NUMB);}
%%
Bison文件如下所示:
%{
#include <stdio.h>
%}
%token NUMB
%left '+'
%%
exp:
NUMB { $$ = $1; }
| exp '+' exp { $$ = $1 + $3; }
%%
int yyerror(char *s) {
printf("yyerror : %s\n",s);
}
int main(void) {
yyparse();
}
输入
123 + 12
我收到错误消息。为什么会发生这种情况?
答案 0 :(得分:0)
您的词法分析器缺少匹配/返回'+'
令牌的规则。尝试在最后添加:
. { return *yytext; } /* any other single character returns as itself */
如果文本与任何规则不匹配,则默认词法分析器操作是打印并跳过它。因此,从解析器获得的错误是因为它将123 12
作为输入,这会导致语法错误。