2009-04-18 19 views
4

lex/yacc(flex/bison)を使用するときにメッセージ/プロンプトを表示する方法を理解しようとしています。例えばLex/Yacc:入力前にメッセージを出力します。

が、メインはそうのようになります。yylexのを呼び出してyacc呼び出す

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

、()。これにより、STDINを待機する空白行が生成されます。どのように私は...のようなメッセージを表示することができ

は言及を忘れ

message $ _

代わりの

アンダースコアはSTDINからの入力を待っている、カーソル位置を表し
_

...、私は、プロンプトを繰り返し印刷したいと思います...毎回、lex/yaccがstdinからの入力を要求する前に..

答えて

8

それを実演しました。私はyaccファイル内のアクションとしてそれを統合しなければならなかった。

私の鉱山は次のようになります。

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

そして、それぞれの時間は、それがstmnt(トップレベル)を解析しているので、私のyaccファイル(.Yは)

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

...のように見えますその後、プロンプトが表示されます。

+1

もう1つの解決方法は、デフォルトルールを追加することです:[\ r \ n] {prompt(); } – Geoffroy

関連する問題