Причины для точно таких же символов в правилах YACC? - PullRequest
0 голосов
/ 16 марта 2011
identifiers:
    IDENTIFIER
    | identifiers ',' IDENTIFIER
    ;

identifiers_or_typenames:
    identifier
    | identifiers_or_typenames ',' identifier
    ;

Мне кажется, что нет разницы между identifiers и identifiers_or_typenames, поскольку они оценивают один и тот же материал?

Ответы [ 2 ]

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

Обратите внимание, что yacc чувствителен к регистру, поэтому IDENTIFIER и identifier - это две разные вещи, которые могут не иметь никакого отношения друг к другу или могут быть похожими, но немного отличаться в некотором тонком смысле. Вы должны посмотреть, как они определены, чтобы сказать. Я думаю, у вас вполне может быть правило вида

identifier: IDENTIFIER | TYPENAME ;

, что делает ваши два правила совершенно разными.

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

Я ожидаю, что на практике к этим случаям будет прикреплен код, который различает семантически, а не синтаксически. В частности, предыдущее объявление будет динамически отклонять <typename> s (yyerror("typename \"%s\" used as identifier", $1); или подобное).

...