Я пытаюсь написать правило 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
Разве я не делаю то же самое? Что не так? И как справиться с этим?
Думаю, это потому, что в правиле [/>] оно соответствует либо/или>.
В точку.
Но вопрос в том, как я пишу это правило так, чтобы оно совпадало/и> вместе?
"/>"
Разве я не делаю то же самое?
Нет. [/]
Соответствует / и [>]
соответствует >. Таким образом, [/][>]
будет работать. Но приведенная форма более нормальная.
/>
Если требуется скобки, то это this[/][>]