Как использовать REJECT в flex? - PullRequest
       12

Как использовать REJECT в flex?

1 голос
/ 20 сентября 2011

Давайте проясним, что я говорю об инструменте лексического анализа.

Для следующего ввода:

aa bb cc dd

Мне нужен парсер, чтобы соответствовать следующим подстрокам:

aa bb

bb cc

cc dd

У меня есть это регулярное выражение:

[a-zA-Z]+[ ]+[a-zA-Z]+

Но это только соответствует:

aa bb

cc dd

Мне сказали, что команду REJECT можно использовать для получения нужного мне результата, но я не знаю, как его применить. Может ли кто-нибудь помочь мне?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Это одно решение проблемы Flex:

    %%
    "aa bb"         {printf( "matched aa bb\n");REJECT;}
    "bb cc"         {printf( "matched bb cc\n");REJECT;}
    "cc dd"         {printf( "matched cc dd\n");REJECT;}
    .               /*ignore anything else*/
    %%
    int main()
    {
    yylex();
    return 0;
    }


When I run the code on your input I get :
matched aa bb
matched bb cc
matched cc dd
0 голосов
/ 20 сентября 2011

Вы можете использовать регулярное выражение для перечисления n и n + 1 пар во всем наборе.

Рассмотрите группировку с "жадным" совпадением назад (или вперед).

...