假設我每次匹配一條規則需要運行一些初始化代碼,我該如何減少冗餘?是否可以堆棧Yacc語法規則代碼?
rule : TOKEN1 { init(); token1Code(); }
| TOKEN2 { init(); token2Code(); }
;
而且是有可能做這樣的事情
rule : TOKEN1
| TOKEN2
{ codeForToken1OrToken2(); }
;
假設我每次匹配一條規則需要運行一些初始化代碼,我該如何減少冗餘?是否可以堆棧Yacc語法規則代碼?
rule : TOKEN1 { init(); token1Code(); }
| TOKEN2 { init(); token2Code(); }
;
而且是有可能做這樣的事情
rule : TOKEN1
| TOKEN2
{ codeForToken1OrToken2(); }
;
您可以使用類似:
rule : { init(); } real_rule { codeForToken1or2(); } ;
real_rule : TOKEN1 { token1Code(); }
| TOKEN2 { token2Code(); }
;
但是,這可能會引入衝突,這取決於如何「規則」被使用。
因爲這將真正的工作:
rule : TOKEN1 { getToken(); init(); token1Code(); }
| TOKEN2 { getToken(); init(); token2Code(); }
;
其中爲gettoken();是匹配輸入中下一個標記的函數的名稱(我不記得函數的名稱),你可以調用一些init();裏面有。
你似乎沒有回答這個問題。 – 2009-11-20 04:14:29
這個語法不同於DevDevDev發佈 – eKek0 2009-11-20 01:04:19
它接受相同的語言,所以它相當於 – 2009-11-20 01:06:15
你發佈的原文不是同一種語言。現在,你已經糾正了錯誤 – eKek0 2009-11-20 01:07:40