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