Я предполагаю, что токен для числа (то, что вы называете литералом) называется LITERAL
, и что имена переменных, следующие сразу за литералами, не являются нормальной конструкцией (в алгебраических языках это обычно имеет место, если вы хотите, чтобы 9 foo
означало 9 * foo
).
Вам нужно написать правило бизона, чтобы проанализировать последовательность LITERAL VAR
и вернуть число (возможно, другой токен, кроме LITERAL
, если только вам не нужно рекурсивное правило, например, 9u u
). Код этого правила должен проверять, что VAR
равен u
(или другой допустимый постфикс), и возвращать ошибку, если обнаружится что-то неожиданное.
Я использовал подобные последовательности для разбора единиц (например, g = 9.81 m/(s^2);
).
Если вы хотите потребовать, чтобы u
немедленно следовал за литералом, а в результате был бы токен LITERAL
, то вам придется изменить правило lex, предполагая, что пробел без кавычек не передается синтаксический анализатор.