Пример в вашем вопросе, похоже, не отражает сам вопрос, поскольку не показывает ни пробелов, ни флага x
.Итак, я собираюсь предположить, что шаблон, который вам не подходит, это что-то вроде
BAD (?x:two | lines |
of | words)
%%
{BAD} { }
И, действительно, это не сработает.Хотя вы можете использовать расширенный формат в шаблоне, вы можете использовать его только в определении, если он не содержит перевода строки.Определение заканчивается на последнем непробельном символе в строке определения.
В любом случае определения используются слишком много.Вы могли бы написать выше как
%%
(?x:two | lines |
of | words ) { }
, что избавляет любого, кто читает ваш код, от необходимости искать определение.
Я понимаю, что вы можете использовать очень длинный шаблон вправило, что неудобно, особенно если вы хотите использовать его дважды.Независимо от проблемы с символами новой строки, это приводит к проблемам с ограничением длины определения Flex (2047 символов).Мой подход состоял в том, чтобы разбить очень длинный шаблон на серию определений, а затем определить другой символ, объединяющий фрагменты.
До версии 2.6 Flex не удалял пробелы из конца строки определения,что также приводит к таинственным ошибкам "непризнанного правила".Руководство по-прежнему отражает поведение v2.5:
Определение начинается с первого непробельного символа после имени и продолжается до конца строки.