identifiers:
IDENTIFIER
| identifiers ',' IDENTIFIER
;
identifiers_or_typenames:
identifier
| identifiers_or_typenames ',' identifier
;
在我看来,identifiers
和identifiers_or_typenames
之间没有区别,因为他们评估相同的东西?
答案 0 :(得分:0)
我希望在实践中可以附加代码,这些代码在语义上而不是在语法上区分。具体而言,前一个声明将动态拒绝<typename>
s(yyerror("typename \"%s\" used as identifier", $1);
或类似的)。
答案 1 :(得分:0)
请注意,yacc区分大小写,因此IDENTIFIER
和identifier
是两个可能彼此无关的不同内容,或者可能相似但略有不同。你必须看看如何定义它们。我猜你可能有一个形式的规则
identifier: IDENTIFIER | TYPENAME ;
这使你的两个规则完全不同。