Lex / Yacc:输入前打印消息

时间:2009-04-18 22:47:08

标签: 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输入之前..

1 个答案:

答案 0 :(得分:8)

想出来。我必须将它作为一个动作集成到我的yacc文件中。

我的矿井看起来像:

int main(int argc, char *argv[])
{
    prompt();
    yyparse();
}

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

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

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