簡體   English   中英

是否可以堆疊Yacc語法規則代碼?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM