我有以下語法(SSCCE):如何最好地處理野牛同樣規則的不同動作?
%token WORD
%%
program : word word
;
word : WORD // have to translate only for first word
;
規則word : WORD
應具有動作,即對WORD
令牌語義值被適當地「翻譯」的語義值的左手側,僅當這是規則program: word word
中的第一個word
。
在野牛中這樣做的最佳做法是什麼?
我不明白如何做到這一點與行動。我必須擴展語法本身,以此:
%token WORD
%%
program : word_translated word_not_translated
;
word_translated : WORD { // translate }
;
word_not_translated : WORD { // do not translate }
;
好的,但是我不喜歡。因爲語法有兩個符號word_translated
和word_not_translated
,就語法而言,它們完全一樣,所以語法太複雜了,應該簡化成一個word
。增加複雜性的唯一原因是,行動可能會有所不同。
這是做到這一點的唯一方法,這是野牛處理這種情況的最佳做法嗎?
是的,這是最好的做法 - 當你需要做同樣的符號不同的動作(終端或非終端)的不同的上下文,你只需創建一個新的單例規則。 –
@Chris好的謝謝你,但在此期間,我想出瞭如何做到這一點:使用'$ 0' –
@ChrisDodd我發現了全面的情況,而不是我的帖子中簡單的SSCCE,使用' $ 0','$ -1'等是不切實際的。它真的就像自己構建樹並走路。所以你的評論是黃金。你應該讓它成爲我會接受的答案。 –