[<=|>=]
- это класс символов , который соответствует только одному символу, в этом случае, если этот символ является одним из <
, =
, |
или >
. (Помещение одного и того же символа дважды - =
, в данном случае - внутри класса символов разрешено, но безрезультатно.)
Вы хотели "<="|">="
.
Если два шаблона соответствуют одной и той же самой длинной строке, flex всегда возвращает первый в определении сканера. Таким образом, первый токен, созданный flex, был <
, что соответствует RELOP1
, потому что RELOP3
появляется позже в файле; затем он соответствует =
как ASSIGN
, потому что это происходит раньше.
Я уверен, что Flex выдал предупреждение о том, что правило RELOP3
не может ничего соответствовать. Это предупреждение никогда не следует игнорировать; это почти всегда указывает на ошибку в ваших шаблонах.
Обратите также внимание, что правило RELOP3
также соответствует |
, что, вероятно, не то, что вам нужно.
Пожалуйста, прочтите документацию на (f) лекс шаблонов .