gpt4 book ai didi

c - 为什么bison的结果不显示?

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:37 26 4
gpt4 key购买 nike

我测试了这个Flex和Bison组队的例子,但是控制台没有显示计算结果。 测试.l:

%{
#include "parser.tab.h"
%}
%option yylineno
%option noyywrap
%%
[/][/].*\n ; // comment
[0-9]+ { yylval = atoi(yytext);
return NUM;
}
[ \t\r\n] ; // whitespace
. { return *yytext; }

%%

解析器.y:

%{
#include <stdio.h>
void yyerror(char *s) {
fprintf (stderr, "%s\n", s);
}
%}
%token NUM
%start EVALUATE
%%
EVALUATE: EXPR {printf("=%d\n", $$);} ;

EXPR: EXPR '+' TERM { $$ = $1 + $3; }
| EXPR '-' TERM { $$ = $1 - $3; }
| TERM
;

TERM: TERM '*' NUM { $$ = $1 * $3; }
| TERM '/' NUM { $$ = $1 / $3; }
| NUM
;

%%
int main()
{
return yyparse();
}

但是如果你添加getchar(),那么在你输入这个额外的字符之后,所有相同的计算结果都会被显示出来。为什么这个 change(EVALUATE: EXPR{printf("=%d\n", $$); getchar();} ;) ,我看不到结果?对不起我的英语。

最佳答案

您正在解析来自 stdin 的输入,这是一个“流”。在该流终止之前,解析器无法知道完整的解析树。例如,如果您输入表达式 1+1 , 完整的输入也可以是 1+11 , 1+1-11+11*4 - 不同的表达式会导致完全不同的解析树。

您可以通过执行以下操作之一创建正确终止的输入:

  • 键入输入后按 CTRL+D(在 Unix shell 上)
  • 管道输入:echo "1+1" | ./parser
  • 从文件中读取输入 inputfile.txt包含输入 1+1 :
    ./parser < inputfile.txt

关于c - 为什么bison的结果不显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com