1
的綁定ANTLR4子規則我有一個語法像:規則
living
: search EOF
;
search
: K_SEARCH entity
(K_QUERY expr)?
(K_FILTER expr)?
(K_SELECT1 expr (COMMA expr)*)?
(K_SELECT2 expr (COMMA expr)*)?
(K_SELECT3 expr (COMMA expr)*)?
;
正如你可以看到我已經兩個可選的EXPR。
我創建了我的訪問者,並且我可以訪問實體,K_QUERY和K_FILTER。 SearchContext提供了一個List來獲取所有expr的列表。但是,如何綁定哪個表達式適用於K_QUERY
,K_FILTER
? K_SELECT1
,K_SELECT2
,K_SELECT3
的exprs怎麼辦?
public class LivingQueryVisitor extends LivingDSLBaseVisitor<Void> {
@Override
public Void visitSearch(SearchContext ctx) {
this.query = search(this.getEntityPath(ctx));
//???????????????????????
List<ExprContext> exprs = ctx.expr();
//???????????????????????
return super.visitSearch(ctx);
}
}
我正在尋找一種方式,以便讓遊客能夠經過解析樹,並在同一檢測我是否前往EXPR必須走訪K_SEARCH
,或K---
之後。
類似的東西:
String currentClause;
visitLiving(LivingContext ctx)
{
//????
}
visitSearch(SearchContext ctx)
{
//set current cluase
this.currentCluase = ???
}
visitExpr(ExprContext ctx)
{
switch (this.currentClause)
{
case "K_SEARCH":
break;
case "K_QUERY":
break;
case "K_FILTER":
break;
case "K_SELECT":
break;
}
}
任何想法?
http://stackoverflow.com/questions/36445688/antlr4-visitor-several-rule-contexts – Divisadero
我相信,這個問題有點不同。 – Jordi