как выполнить код после yylex (); команда

0

У меня есть простой исходный код flex, который пропускает комментарии в /* */ и должен получить количество найденных комментариев:

%{
  int in_comment = 0;
  int count = 0;
%}

%%
\/\* { in_comment = 1; count++; }
\*\/ { in_comment = 0; }
.    { if (!in_comment) ECHO; }
%%

int main(void)
{
  yylex();
  printf("Comments found %d\n", count); // never executed
  return 0;
}

Первая половина работает отлично - она действительно пропускает комментарии, но они не учитываются... что я могу сделать для выполнения строки printf?

Теги:
flex-lexer

1 ответ

1
Лучший ответ

Я просто попробовал это сам. Поэтому я скопировал исходный код на "xl" и сделал make x ld, а затем пожаловался на отсутствующую функцию yywrap(). После добавления

%option noyywrap

Компиляция прошла успешно, и тест показал:

ronald@cheetah:~/tmp$ ./x < cribbage.c
... lots of output ...
Comments found 15

ОБНОВИТЬ:

Если текст не загружен из файла (только ./x), вам необходимо завершить ввод вручную с помощью CTRL + D

  • 0
    Спасибо ... в моем случае все компилируется без предупреждений или ошибок, но найденные комментарии отсутствуют :(
  • 0
    ваша программа возвращается в первую очередь? Или это зависает? В последнем случае лексер хочет больше ввода (что контролируется функцией yywrap ()). Поэтому, пожалуйста, попробуйте мое предложение
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню