Lex / Yacc: распечатать сообщение перед вводом - PullRequest
4 голосов
/ 19 апреля 2009

Я пытаюсь понять, как отобразить сообщение / подсказку при использовании lex / yacc (flex / bison).

Например, main выглядит так:

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

Который вызывает yacc, который вызывает yylex (). Это приводит к пустой строке ожидания на STDIN. Как я могу отобразить сообщение как ...

message $ _

вместо

_

Где подчеркивание представляет позицию курсора, ожидающего ввода от STDIN ...

Забыл упомянуть, я бы хотел, чтобы приглашение печаталось неоднократно ... поэтому перед каждым вводом запроса lex / yacc из stdin ..

1 Ответ

8 голосов
/ 19 апреля 2009

Разобрался. Мне пришлось интегрировать это как действие в мой файл yacc.

Моя шахта выглядит так:

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

И мой файл yacc (.y) выглядит так ...

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

Так что каждый раз, когда он анализирует stmnt (верхний уровень), он будет отображать приглашение позже.

...