Из руководства Flex :
5.2 Формат раздела правил
Раздел правил ввода Flex содержит ряд правил вида:
pattern action
, где шаблон должен быть с отступом, а действие должно начинаться с той же строки.
Если вы предпочитаете спецификацию Posix для lex , существует аналогичное требование:
Правила в исходных файлах lex - это таблица, в которой левый столбец содержит регулярные выражения, а правый столбец содержит действия (фрагменты программы на C), которые должны выполняться, когдавыражения распознаются.
ERE action
ERE action...
Часть строки расширенного регулярного выражения (ERE) должна отделяться от действия одним или несколькими <blank>
символами.
<blank>
определяется в объеме базовых определений как символ пробела или символа табуляции.
Posix запрещает строки правил, где нет действия, хотя Flex разрешит их, как если бы действие было ;
. Строки с отступом в разделе правил обычно дословно вставляются в вывод, но если строки с отступом не предшествуют первому правилу, результат не определен. По крайней мере, Posix просто говорит, что результат не определен. Flex (и, как мне кажется, большинство реализаций lex) копирует строки в сгенерированный файл, где они упадут после оператора break;
в конце предложения action case. Это не будет проблемой, если строки будут комментариями, что не редкость. Но фактический исполняемый код, вероятно, вызовет предупреждение «недоступный код», при условии, что вы компилируете с включенными предупреждениями.
Однако Flex также допускает блоки условий запуска, и внутри блока условий запуска вы можете делать отступы для шаблонов. ,В этом контексте размещение действия в строке само по себе заставит Flex рассматривать его как шаблон, а не как вставленный код.