[英]Is it possible to stack Yacc grammar rule code?
可以說我每次匹配規則時都需要運行一些初始化代碼,如何減少冗余?
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(); 在里面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.