lex | действие правила гибкости игнорируется

Все,

В моем файле lex есть шаблон указанного типа:

 "#"[ \\t]*"ifdef".*                { action_ifdef_manager(yytext);}

если такой текст заключен в #ifdef GLOBALVAR, действие action_ifdef_manager не вызывается

Спасибо за любую помощь.


person Aymanadou    schedule 19.02.2013    source источник
comment
Ответить на ваш вопрос без контекста практически невозможно. Очевидно, что если это единственное правило в вашем лексере, следует вызвать action_if_def_manager, но, вероятно, это не так. Попробуйте упростить исходный код лексера, чтобы создать минимальный пример, в котором вы все еще наблюдаете проблему.   -  person Arthur Reutenauer    schedule 19.02.2013
comment
@ArthurReutenauer, я думаю, что проблема не в двусмысленности правил в моем лексере, на самом деле. Вызывается действие '\ n'.   -  person Aymanadou    schedule 19.02.2013
comment
Я не уверен, что правильно вас понял, но разве это не двусмысленность вашего лексера? Вернее, то, как вы его спроектировали, неоднозначно, и Flex решает эту проблему так, как вы не ожидали. В любом случае, если проблема заключается в символе новой строки, может быть достаточно исключить его из правила, например, используя '[^ \ n] *' вместо '. *'   -  person Arthur Reutenauer    schedule 19.02.2013


Ответы (1)


Единственная проблема - неоднозначность паттернов. У вас должен получиться аналогичный шаблон, например "#ifdef"

          a        |
          ab       |
          abc      |
          abcd     ECHO; REJECT;

Здесь лексер возвращает в потоке «abcd» все четыре проверенных шаблона: a, ab, abc, abcd.

Ознакомьтесь с руководством по Flex

person Community    schedule 01.03.2013