2011-03-16 51 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 ; 

這使得你的兩個規則完全不同。