Регулярное выражение с flex

0

Я пытаюсь написать правило flex следующим образом:

%%
[0-9]+                  yylval=atoi(yytext); return NUMBER;
[<]                     return LANGLE;
[/>]                    return CLOSERANGLE;
[>]                     return RANGLE;
[/]                     return SLASH;
[ a-zA-Z0-9]            yylval=strdup(yytext); return ANYTHING;
\n                      /* ignore end of line */;
[ \t]+                  /* ignore whitespace */;
%%

Когда я запускаю программу flex против файла, он говорит:

example4.l:19: warning, rule cannot be matched
example4.l:20: warning, rule cannot be matched

Думаю, это потому, что в правиле [/>] оно соответствует либо / или >. Но вопрос в том, как я пишу это правило так, чтобы оно совпадало / и > вместе?

Я пробовал документацию: в ней говорится:

‘rs
    the regular expression ‘r followed by the regular expression ‘s; called concatenation

Разве я не делаю то же самое? Что не так? И как справиться с этим?

  • 1
    Двойная символьная строка записывается в регулярном выражении без квадратных (квадратных) скобок, /> Если требуется скобки, то это this [/][>]
Теги:
flex-lexer

1 ответ

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

Думаю, это потому, что в правиле [/>] оно соответствует либо/или>.

В точку.

Но вопрос в том, как я пишу это правило так, чтобы оно совпадало/и> вместе?

"/>"

Разве я не делаю то же самое?

Нет. [/] Соответствует / и [>] соответствует >. Таким образом, [/][>] будет работать. Но приведенная форма более нормальная.

Ещё вопросы

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