4

我试图弄清楚在使用 lex/yacc (flex/bison) 时如何显示消息/提示。

例如, main 看起来像这样:

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

哪个调用yacc,哪个调用yylex()。这会产生一个在 STDIN 上等待的空行。我怎样才能显示类似...的消息

消息 $_

代替

_

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

忘了提,我希望重复打印提示......所以在每次 lex/yacc 从标准输入请求输入之前......

4

1 回答 1

8

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

我的矿看起来像:

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

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

stmnt
     : /* 空的 */
     | stmnt 不管什么 { do_something(); 迅速的(); }
     ;

这样每次它解析一个stmnt(顶级)时,它都会在之后显示提示。

于 2009-04-18T23:11:38.767 回答