Думаю, что Вашу проблему можно было бы решить LL(1)-парсером с использованием Look Ahead алгоритма. Собственно, yylex
поддерживает такую возможность.
Вообще, восходящие алгоритмы для парсеров более приоритетны, т.к. класс разбираемых грамматик нисходящих алгоритмов является подклассом для множества разбираемых грамматик восходящих алгоритмов.