我已经定义了一组语法规则。将此视为示例规则。
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();
我对访问流中匹配的一组段的bodyset的方式感到困惑。看来我必须再做一次下面的解析
parser.bodyset();
流中可能有多个bodyset语法匹配的一组段。
让我们说在输入流中我们有多个匹配此规则的位置。我想要的是获取有关这些bodyset
信息集的信息(在每个中,语法规则的开始和结束)。
我无法找到一种方法来访问流中bodyset
语法规则的匹配集的信息。我对API感到困惑。
答案 0 :(得分:1)
ANTLR 3不会自动创建带有侦听器的分析树,也不会像ANTLR 4那样创建访问者。您需要执行以下操作之一:
bodylist
方法将返回BodylistContext
对象,该对象提供bodyset()
方法,该方法返回BodysetContext
个对象的集合(每个对象一个)已解析的bodyset
。output=AST
功能和树语法来处理输入。