簡體   English   中英

如何使用ANTLR詞法分析器和解析器編寫MIN MAX操作?

[英]How to write MIN MAX operation using ANTLR lexer and parser?

對於我的項目,我必須定義一個新的語法規則,同時將計算給定參數的MIN或MAX。以下是示例。

MIN(3, 4, 5, 6) = 3

MIN(3, 5, 6, 7, 8) = 3

基本上,我面臨的問題是定義TreeWalker函數,該函數應采用可變數量的參數。

我使用的語言是Java。

好吧,我會放一段與或多或少相似但不完全相同的代碼

解析器規則:

minExpr
  : MIN^ LPAREN! minExprStmt RPAREN!
  ;

minExprStmt
  : digitExpr (COMA! digitExpr)+
  ;

Lexer規則:

token{
  MIN="MIN"
}

TreeWalker:

getNode return [double r]
 {ExpNode a=null; r = null;}
 : #(MIN a=getNode)
      {try{r=new MinExpNode();}catch(Exception e){throw new RecognitionException(e.toString();}}

因此,現在我想要的是MinExpNode應該在構造函數中使用ExpNode的列表或數組,而后者又將給出每個expNode的計算值。

我沒有為此使用任何外部庫。

經過一番研究,我認為我找到了TreeWalker代碼解決方案:

getNode return [double r]
  {ExpNode a=null; List<ExpNode> list = new ArrayLis<ExpNode>(); r = null;}
  : #(MIN a=getNode {list.add(a);} ({ExpNode b = getNode; list.add(b);})*)
       {try{r=new MinExpNode(list);}catch(Exception e){throw new RecognitionException(e.toString();}}

但是,如果您能建議我一個更好的選擇,那將非常有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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