Используйте левую рекурсию вместо правой рекурсии.
Бизон выполняет действия точно так, как вы говорите. Каждое нетерминальное действие выполняется точно, как только нетерминальное завершено.
Если вы используете праворекурсивное правило:
B: "and" b B
, тогда внешние B
действие, которое печатает значение semanti c b
, выполняется после внутреннего действия B
, которое печатает значения semanti c следующих b
s.
A Гораздо более естественный способ написать эту грамматику, которая имеет дополнительное преимущество в создании правильной ассоциативности:
A: a
| A "and" b
Более того, действия в этой грамматике будут выполняться слева направо, потому что внутренняя * 1017 Действие * выполняется, как только оно завершено, то есть до того, как связанный b
был даже замечен.