1

我想为简单的计算器制作解析器,但我无法理解我在简单输入时遇到错误。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

我收到错误消息。为什么会这样?

4

1 回答 1

0

您的词法分析器缺少匹配/返回'+'令牌的规则。尝试在最后添加:

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

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

于 2013-05-08T22:11:30.313 回答