Lex/Yacc:输入前打印消息

4 yacc lex prompt bison flex-lexer

我试图找出在使用lex/yacc(flex/bison)时如何显示消息/提示.

例如,main看起来像这样:

int main(int argc, char *argv[])
{
    yyparse();
}
Run Code Online (Sandbox Code Playgroud)

其中调用yacc,调用yylex().这会产生一个等待STDIN的空白行.我怎样才能显示如...的消息

message $ _

代替

_

下划线表示光标位置,等待STDIN的输入......

忘了提,我想重复打印的提示......所以在每次lex/yacc请求从stdin输入之前...

小智 8

弄清楚了.我必须将它作为一个动作集成到我的yacc文件中.

我的矿井看起来像:

int main(int argc, char *argv[])
{
    prompt();
    yyparse();
}
Run Code Online (Sandbox Code Playgroud)

我的yacc文件(.y)看起来像......

stmnt
     : /* empty */
     | stmnt whatever { do_something(); prompt(); }
     ;

因此,每次它解析stmnt(顶级)时,它都会在之后显示提示.

  • 另一种解决方案是添加默认规则: [\r\n] { prompt(); } (2认同)