#bison #flex-lexer #lex
#bison #flex-lexer #lex
Вопрос:
%{
%}
%%
'*' {return 0;}
'(' {return 1;}
')' {return 2;}
%%
int yywrap(){}
Пример кода, подобный приведенному выше. Оно выдает сообщение об ошибке в виде:
zort.l:7: unrecognized rule
zort.l:8: unrecognized rule
zort.l:8: unrecognized rule
zort.l:8: unrecognized rule
Оно выдает ошибку только для символов paranthesis. Не выдает никаких ошибок для других символов. В чем причина? Являются ли исключения paranthesis’? Как это решить?
Ответ №1:
Для flex
шаблонов одинарные и двойные кавычки не совпадают. В настоящее время ваше первое правило гласит, что вы хотите сопоставить одинарную кавычку ( '
), ноль или более раз ( *
), за которыми следует другая одинарная кавычка '
. Другие правила не имеют никакого значения.
Предполагая, что вместо этого вы хотите сопоставить буквенные звездочки и круглые скобки, попробуйте вместо этого двойные кавычки:
%%
"*" {return 0;}
"(" {return 1;}
")" {return 2;}
%%
В руководстве содержится больше информации о том, что можно указать в качестве шаблона (это расширенная форма регулярных выражений).