Кроме встроенных переменных и стандартных функций генератор LEX предоставляет специальные операторы для использования в действиях правил. Наиболее часто в действиях правил применяются операторы ECHO и BEGIN.
Оператор ECHO введен для сокращенной записи стандартного вывода содержимого массива yytext, потому что эта операция особенно часто используется в действиях правил. В исходном тексте лексического анализатора оператор ECHO определяется директивой #define препроцессора системы программирования C следующим образом:

#define ECHO        fwrite(yytext, yyleng, 1, stdout)

Технику применения оператора ECHO демонстрирует следующий пример спецификации правил лексического анализатора, который должен формировать список слов входного текста, располагая каждое слово в отдельной строке стандартного вывода:

%%
[A-Za-z0-9]+    ECHO;            /* Отображение слова */
[^A-Za-z0-9]+   putchar('\n');   /* Перевод строки между словами */

В правилах этого примера под словом понимается любая алфавитно-цифровая последовательность из десятичных цифр и латинских букв. Разделителями слов считаются любые символы или комбинации символов ASCII, которые не являются буквами и цифрами. Первое правило примера обеспечивает стандартный вывод каждого слова входного текста с помощью оператора ECHO. Второе правило компрессирует все соседние разделители слов в один символ перевода строки, который отображается библиотечной функцией putchar системы программирования C.
Если оператор ECHO может быть использован в действиях любой системы правил, то оператор BEGIN целесообразно применять при наличии правил с предусловиями. Эти правила необходимы, когда важно обеспечить возможность обработки эквивалентных наборов символов по различным правилам в зависимости от предыстории входного потока, которая определяет состояние лексического анализатора. Например, целочисленные константы C кода имеют различные значения в зависимости от префикса системы счисления.
Как отмечалось выше, для обозначения различных состояний лексического анализатора генератор LEX использует метки предусловий. Они специфицируются директивой %Start секции описаний и указываются в угловых скобках в регулярных выражениях секции правил. В отличие от обычных правил, которые актуальны в любом в любом состоянии лексического анализатора, правила с предусловиями a priori не активны и не рассматриваются в процессе лексического анализа входного потока, пока не установлены метки предусловий их регулярных выражений. Для управления активностью помеченных правил используется оператор BEGIN, который может устанавливать или сбрасывать метки предусловий. Он может применяться в действиях правил, распознающих выполнение соответствующих предусловий, в одном из двух форматов:

BEGIN STATE;   или   BEGIN 0;

В первом формате оператор BEGIN устанавливает состояние лексического анализатора, которое обозначено меткой STATE. После его выполнения становятся активными все правила с меткой <STATE> в левом контексте их регулярных выражений. При этом аргументом оператора BEGIN может быть любая метка из списка предусловий, специфицированных директивой %Start секции описаний. В общем случае вызов оператора BEGIN с ненулевым аргументом в действии обычного правила позволяет расширить список активных правил, добавляя к нему правила, метка предусловия которых совпадает с аргументом оператора BEGIN. Однако если вызов оператора BEGIN осуществляется в действии помеченного правила, то активность сохраняют только те правила, метка предусловия которых совпадает с аргументом оператора BEGIN. Второй формат, когда вызов оператора BEGIN осуществляется с нулевым аргументом, позволяет удалить из списка активных правил все правила с предусловиями. Это бывает необходимо для возврата лексического анализатора в исходное состояние, где все помеченные правила неактивны.
Различные форматы использования оператора BEGIN и правил с предусловиями иллюстрирует следующий пример спецификаций лексического анализатора четности или нечетности количества единиц в бинарной последовательности, состоящей из символов 0 и 1, которую завершает символ перевода строки:

%Start EVEN ODD
%%
<EVEN>1    BEGIN ODD; /* Переход в нечетное состояние из четного */
<EVEN>\n   { /* Оценка четного состояния */
            puts(" Четное число единичных разрядов");
            BEGIN 0;
           }
<ODD>1     BEGIN EVEN; /* Переход в четное состояние из нечетного */
<ODD>\n    { /* Оценка нечетного состояния */
             puts(" Нечетное число единичных разрядов");
             BEGIN 0;
           }
1          BEGIN ODD; /* Переход в нечетное состояние из исходного */
\n         puts(" Нулевое число единичных разрядов");
.          ; /* Блокировка стандартного вывода */

В данном примере лексический анализатор реализует конечный автомат с 3-мя состояниями, в которых он может находиться, когда из входного потока получено, соответственно, нулевое, нечетное и четное число единиц бинарной последовательности. Состояния с четным и нечетным числом единиц обозначены, соответственно, метками предусловий EVEN и ODD, которые декларированы директивой %Start секции описаний. Исходное состояние с нулевым числом единиц не имеет метки и определено по принципу исключения двух других состояний.
Переход между состояниями происходит при стандартном вводе символов единицы ('1') и перевода строки ('\n'). При этом, символ '1' вызывает переход в состояние, либо с нечетным, либо с четным количеством единиц, в зависимости от текущего числа полученных единиц бинарной последовательности, а символ перевода строки ('\n') означает возврат в исходное состояние для анализа следующей бинарной последовательности. Таблицу переходов между состояниями формализуют 6 лексических правил, по 2 на каждое состояние. Одно правило каждой пары определяет переход при вводе символа '1', а другое – при поступлении символа перевода строки ('\n').
В частности, последняя пара указанных правил, которые не имеют предусловий, обслуживает исходное состояние. Согласно этим правилам при вводе символа перевода строки в исходном состоянии лексический анализатор диагностирует нулевую или пустую бинарную последовательность, отображая соответствующее информационное сообщение в потоке стандартного вывода с помощью библиотечной функции puts системы программирования C. Ввод символа '1' в исходном состоянии вызывает переход в состояние с нечетным числом единиц, которое устанавливается оператором BEGIN с аргументом ODD в действие этого правила.
После этого становятся активными два средних правила с меткой предусловия ODD в левом контексте регулярных выражений, которые обслуживают переходы из состояния с нечетным числом единиц. По этим правилам при вводе символа перевода строки лексический анализатор диагностирует бинарную последовательность с нечетным числом единиц, отображая соответствующее информационное сообщение в потоке стандартного вывода с помощью библиотечной функции puts системы программирования C, и возвращается в исходное состояние оператором BEGIN с нулевым аргументом. Ввод символа '1' в этом состоянии вызывает переход в состояние с четным числом единиц, которое устанавливается оператором BEGIN с аргументом EVEN. При этом метка предусловия ODD будет автоматически сброшена, потому что вызов оператора BEGIN осуществляется в действии правила с предусловием.
После этого становятся активными два первых правила с меткой предусловия EVEN в левом контексте регулярных выражений, которые обслуживают переходы из состояния с четным числом единиц, а средние правила с меткой предусловия ODD теперь неактивны. Согласно этим правилам при вводе символа перевода строки лексический анализатор диагностирует бинарную последовательность с четным числом единиц, отображая соответствующее информационное сообщение в потоке стандартного вывода с помощью библиотечной функции puts системы программирования C, и возвращается в исходное состояние оператором BEGIN с нулевым аргументом. Ввод символа '1' в этом состоянии вызывает переход в состояние с нечетным числом единиц, которое устанавливается оператором BEGIN с аргументом ODD в действии этого правила. При этом метка предусловия EVEN будет автоматически сброшена, потому что вызов оператора BEGIN осуществляется в действии правила с предусловием. После этого снова становятся активны два средних правила с предусловием ODD в левом контексте регулярных выражений, а правила с меткой предусловия EVEN теперь опять неактивны.
Таким образом, в начале лексического анализа все помеченные правила неактивны и обработка бинарной последовательности происходит по двум правилам исходного состояния. Затем при вводе символа '1' поочередно становятся активными пары помеченных правил, обслуживающих состояния с четным или нечетным числом единиц, и дальнейшая обработка бинарной последовательности осуществляется по активной паре помеченных правил. При этом правила исходного состояния по-прежнему активны, но неактуальны, потому что они подавляются эквивалентными активными правилами, которые расположены текстуально выше в секции правил. Они становятся актуальными при достижении конца бинарной последовательности, когда при стандартном вводе символа перевода строки после соответствующей диагностики, отображаемой с помощью библиотечной функции puts системы программирования C, происходит возврат в исходное состояние, где все помеченные правила неактивны, и лексический анализатор готов к обработке следующей бинарной последовательности из своего исходного состояния.
В заключение следует отметить, что исходя из косметических соображений, кроме рассмотренных правил, в конце секции правил включено еще правило с пустым действием. Оно необходимо для того, чтобы блокировать стандартный вывод любых символов входного потока, которые отсутствуют в регулярных выражениях остальных правил и должны отображаться по умолчанию.