2013-05-14 62 views
1

我正在嘗試爲C語言的一個子集創建一個語法。在我的一些規則,我有以下(pNode是在union定義一個指針):野牛,在規則開始時的動作

rule : { $<pNode>$ = $<pNode>0; } the rest 

然而,看完野牛文檔後,似乎動作可以省略,因爲$<pNode>0已經指堆棧中的前一個符號。我對嗎?

能夠忽略該操作是非常好的,因爲它會導致一些不會出現的轉換/減少衝突。

回答

1

此代碼複製值堆棧中的最大值(爲此規則創建重複的$1),因此可能不需要 - 如果使用任一重複值的所有代碼均可改爲使用不重複的值,並且如果沒有任何代碼嘗試修改堆棧上的值(可能,但很少見,並認爲風格很差)。

問題可能出現在the rest的操作中 - 如果它們指的是$0$-1那麼您可能有問題。如果他們只引用$0(並且不要修改它),那麼在刪除操作時可能很好。

+0

謝謝Chris,這正是我的想法。情況相當「籬笆」,我確信其他規則將始終在此之後出現,因此對'$ 0'的引用將始終是正確的。 –