使用Antlr中的语法规则获取一组匹配的文本片段
本文关键字:一组 文本 片段 Antlr 语法 规则 使用 获取 | 更新日期: 2023-09-27 18:28:53
我定义了一组语法规则。将其视为一个示例规则。
public bodylist
: bodyset*
;
public bodyset
: ruleSet
| media
| page
;
如果我必须使用这个规则进行解析,我必须按照以下方式进行。
Stream inputStream = Console.OpenStandardInput();
ANTLRInputStream input = new ANTLRInputStream(inputStream);
CLexer lexer = new CLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
CParser parser = new CParser(tokens);
parser.bodylist();
我对访问流中段的体集匹配集的方式感到困惑。似乎我必须做另一个解析,如下
parser.bodyset();
流中可以有多个体集语法匹配段集。
比方说,在输入流中,我们有多个匹配该规则的地方。我想要的是获得关于这些bodyset
信息集的信息(在每个信息中,语法规则的开始和结束是什么)。
我无法找到访问流中bodyset
语法规则的匹配集的信息的方法。我对API感到困惑。
ANTLR 3不像ANTLR 4那样自动创建具有侦听器和访问者的解析树。您需要执行以下操作之一:
- 升级至ANTLR 4,其中
bodylist
方法将返回一个BodylistContext
对象,该对象提供了一个返回BodysetContext
对象集合的bodyset()
方法(每个解析的bodyset
一个) - 继续使用ANTLR3,但使用
output=AST
特性和树语法来处理输入 - 继续使用ANTLR3,并将操作代码添加到语法中,以手动构建解析树