Что это значит, когда yacc {code} находится посередине? - PullRequest
1 голос
/ 15 марта 2011
extdefs:
    {$<ttype>$ = NULL_TREE; } extdef
    | extdefs {$<ttype>$ = NULL_TREE; } extdef
    ;

Почему это посередине?

1 Ответ

0 голосов
/ 15 марта 2011

Это может быть везде.Иногда полезно сделать что-то между токенами, особенно в таких выражениях или .

В стандартном описании утилиты yacc сказаночто:

Действия могут происходить в любом месте правила (не только в конце);действие может получить доступ к значениям, возвращаемым действиями слева от него, и, в свою очередь, к возвращаемому значению могут быть доступны действия справа от него.Действие, появляющееся в середине правила, должно быть эквивалентно замене действия новым нетерминальным символом и добавлению пустого правила с этим нетерминальным символом в левой части.Семантическое действие, связанное с новым правилом, должно быть эквивалентно исходному действию.Использование действий в правилах может привести к конфликтам, которые иначе не существовали бы.

...