我一直试图长年建立一个实现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