我一直試圖長年建立一個實現GrammarASTVisitor
的訪問者。有沒有辦法訪問一個語法根據
我加載一個Grammar
對象的語法規則:
final Grammar g = Grammar.load("....dslGrammar.g4");
在那之後,我想用我的執行GrammarASTVisitor
接口的訪問語法的AST
:
public class DSLGrammarVisitor implements GrammarASTVisitor {
@Override
public Object visit(GrammarAST node)
{
}
@Override
public Object visit(GrammarRootAST node)
{
return null;
}
@Override
public Object visit(RuleAST node)
{
return null;
}
@Override
public Object visit(BlockAST node)
{
return null;
}
@Override
public Object visit(OptionalBlockAST node)
{
return null;
}
@Override
public Object visit(PlusBlockAST node)
{
return null;
}
@Override
public Object visit(StarBlockAST node)
{
return null;
}
@Override
public Object visit(AltAST node)
{
return null;
}
@Override
public Object visit(NotAST node)
{
return null;
}
@Override
public Object visit(PredAST node)
{
return null;
}
@Override
public Object visit(RangeAST node)
{
return null;
}
@Override
public Object visit(SetAST node)
{
return null;
}
@Override
public Object visit(RuleRefAST node)
{
return null;
}
@Override
public Object visit(TerminalAST node)
{
return null;
}
}
所以,從文件中加載語法後,我這樣做:
GrammarASTVisitor v = new GrammarASTVisitorImpl();
g.ast.visit(v)
之後,執行visit(grammarRootAST)
方法。但是,我剛剛意識到我還沒有弄清楚地球上的孩子們究竟該如何參觀。我不太清楚如何讓孩子的AST節點保持其類型。
我試着node.getChildren()
,但它返回一個List<? extends Object>
,因此對GrammarASTVisitor
沒有visit(Object)
法實施visit(Object)
。
我試着node.getChildrenAsArray()
也,但是,每一個項目是一個GrammarAST
節點,而不是RuleAST
,SetAST
,TerminalAST
等等...
任何想法?
非常感謝!我一直在等待很久! – Jordi