据我所知,我有一个Lexer和一个名为y86 Lexer and Parser的解析器。但是我有一个带有y86命令的文件,我想使用Java解析它们。到目前为止,我的代码如下。
y86Lexer y86 = null;
CommonTokenStream tokenStream = null;
y86Parser y86p = null;
try
{
y86 = new y86Lexer(CharStreams.fromFileName("C:\\Users\\saigbomian\\Documents"
+ "\\LearnANTLR\\src\\sum.ys"));
tokenStream = new CommonTokenStream(y86);
y86p = new y86Parser(tokenStream);
}
catch (IOException e)
{
log.error("Error occured while reading from file");
e.printStackTrace();
}
我不确定如何进行解析。我已经看到人们使用y86Parser.CompilationUnitContext之类的东西,但是我似乎可以找到该类。我曾尝试从antlr创建的监听器中打印,但我不知道如何触发这些监听器
答案 0 :(得分:1)
对于语法中的每个规则ruleName
,y86Parser
类将包含一个名为RuleNameContext
的类和一个名为ruleName()
的方法,该方法将根据该规则解析输入规则并返回包含解析树的RuleNameContext
类的实例。然后,您可以使用侦听器或访客来浏览该解析树。
因此,如果您没有compilationUnit
方法或CompilationUnitContext
类,则您的语法可能只是没有名为compilationUnit
的规则。相反,您应该选择一个已有的规则,然后调用与该规则相对应的方法。