Bison Lex/Yacc:输入前打印消息
我试图弄清楚在使用lex/yacc(flex/bison)时如何显示消息/提示 例如,main看起来是这样的:Bison Lex/Yacc:输入前打印消息,bison,yacc,lex,prompt,flex-lexer,Bison,Yacc,Lex,Prompt,Flex Lexer,我试图弄清楚在使用lex/yacc(flex/bison)时如何显示消息/提示 例如,main看起来是这样的: int main(int argc, char *argv[]) { yyparse(); } 它调用yacc,它调用yylex()。这将产生一个等待STDIN的空行。我怎样才能显示像…这样的消息 message $ _ 信息$_ 而不是 _ _ 其中下划线表示光标位置,正在等待来自STDIN的输入 忘了提一下,我想反复打印提示。。。所以在每次lex/yacc请求stdin的
int main(int argc, char *argv[])
{
yyparse();
}
它调用yacc,它调用yylex()。这将产生一个等待STDIN的空行。我怎样才能显示像…这样的消息
message $ _
信息$_
而不是
_
_
其中下划线表示光标位置,正在等待来自STDIN的输入
忘了提一下,我想反复打印提示。。。所以在每次lex/yacc请求stdin的输入之前..都会解决这个问题。我必须将它作为一个动作集成到我的yacc文件中 我的看起来像:
int main(int argc, char *argv[])
{
prompt();
yyparse();
}
我的yacc文件(.y)看起来像
stmnt
: /* empty */
| stmnt whatever { do_something(); prompt(); }
;
stmnt
:/*空*/
|stmnt whatever{do_something();prompt();}
;
因此,每次解析stmnt(顶层)时,它都会在之后显示提示。另一种解决方案是添加默认规则:[\r\n]{prompt();}