使用 ANTLR4 解析文件
Parse a file using ANTLR4
据我所知,我有一个 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 的东西,但我似乎可以找到 class。我试过从 antlr 创建的监听器打印,但我不知道如何触发这些监听器
对于语法中的每个规则 ruleName
,y86Parser
class 将包含一个名为 RuleNameContext
的 class 和一个名为 ruleName()
,它将根据该规则和 return 包含解析树的 RuleNameContext
class 的实例解析输入。然后,您可以使用侦听器或访问器来遍历该解析树。
因此,如果您没有 compilationUnit
方法或 CompilationUnitContext
class,您的语法可能只是没有名为 compilationUnit
的规则。相反,您应该选择一个您拥有的规则并调用与该规则对应的方法。
据我所知,我有一个 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 的东西,但我似乎可以找到 class。我试过从 antlr 创建的监听器打印,但我不知道如何触发这些监听器
对于语法中的每个规则 ruleName
,y86Parser
class 将包含一个名为 RuleNameContext
的 class 和一个名为 ruleName()
,它将根据该规则和 return 包含解析树的 RuleNameContext
class 的实例解析输入。然后,您可以使用侦听器或访问器来遍历该解析树。
因此,如果您没有 compilationUnit
方法或 CompilationUnitContext
class,您的语法可能只是没有名为 compilationUnit
的规则。相反,您应该选择一个您拥有的规则并调用与该规则对应的方法。