2011-03-16 48 views
0
identifiers: 
    IDENTIFIER 
    | identifiers ',' IDENTIFIER 
    ; 

identifiers_or_typenames: 
    identifier 
    | identifiers_or_typenames ',' identifier 
    ; 

这在我看来,有identifiersidentifiers_or_typenames之间没有区别,因为他们的计算结果为同一个东西吗?yacc规则中符号完全相同的原因是什么?

回答

0

我期望在那些实践中将代码附加到这些情况中,区分两种语义而不是语法。具体来说,前者声明会动态拒绝<typename> s(yyerror("typename \"%s\" used as identifier", $1);或类似的)。

0

请注意,yacc区分大小写,所以IDENTIFIERidentifier是两个不同的东西,可能彼此没有关系,或者可能相似但略微不同,以某种微妙的方式。你必须看看它们是如何定义的。我猜你可能有一个规则的形式

identifier: IDENTIFIER | TYPENAME ; 

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