yacc规则中完全相同符号的原因?

时间:2011-03-16 19:36:18

标签: yacc

identifiers:
    IDENTIFIER
    | identifiers ',' IDENTIFIER
    ;

identifiers_or_typenames:
    identifier
    | identifiers_or_typenames ',' identifier
    ;

在我看来,identifiersidentifiers_or_typenames之间没有区别,因为他们评估相同的东西?

2 个答案:

答案 0 :(得分:0)

我希望在实践中可以附加代码,这些代码在语义上而不是在语法上区分。具体而言,前一个声明将动态拒绝<typename> s(yyerror("typename \"%s\" used as identifier", $1);或类似的)。

答案 1 :(得分:0)

请注意,yacc区分大小写,因此IDENTIFIERidentifier是两个可能彼此无关的不同内容,或者可能相似但略有不同。你必须看看如何定义它们。我猜你可能有一个形式的规则

identifier: IDENTIFIER | TYPENAME ;

这使你的两个规则完全不同。