【问题标题】:Bison, simple calculator programBison,简单的计算器程序
【发布时间】:2013-05-08 18:45:39
【问题描述】:

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

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

【问题讨论】:

  • 标记时要注意。 Flex 用于 Adob​​e/Apache 框架。 Gnu-flex 用于词法分析器。
  • @Reboog711, flex-lexer 实际上是...
  • @Charles 谢谢;我不知道。我刚刚修改了“Flex Tag Wiki”以提及 flex-lexer 标签:stackoverflow.com/tags/flex/info

标签: bison flex-lexer


【解决方案1】:

您的词法分析器缺少匹配/返回 '+' 标记的规则。尝试在末尾添加:

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

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

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多