我想用目标语言 C# 用 ANTLR 创建一个解析树(不是 AST)。这似乎不那么微不足道,也许我正在寻找所有错误的地方。
到目前为止,我尝试在生成的解析器中实现partials,如下所示:
public partial class TestParser
{
ParseTree pt = new ParseTree("root", null);
partial void EnterRule(string ruleName, int ruleIndex)
{
ParseTree child = new ParseTree(ruleName, pt);
pt.Children.Add(child);
this.pt = child;
}
partial void LeaveRule(string ruleName, int ruleIndex)
{
this.pt = pt.Parent;
}
}
与ParseTree
存在
public class ParseTree
{
private List<ParseTree> children = new List<ParseTree>();
public ParseTree(string name, ParseTree parent)
{
this.Parent = parent;
this.Rule = name;
}
public ParseTree Parent { get; private set; }
public string Rule { get; private set; }
public List<ParseTree> Children { get { return children; } }
public Boolean IsTerminal
{
get
{
return (children.Count == 0);
}
}
}
这可行,但不能实现我的目标:我无法从这棵树中获取匹配的标记/文本。除此之外,它还有一个额外的缺点:如果我想对多个语法执行此操作,我必须将部分类复制粘贴到任何地方,因为它是 TestParser 的一部分,在食物链上没有任何东西。
我查看了http://www.antlr.org/wiki/pages/viewpage.action?pageId=1760但生成的 Parser 没有采用ParseTreeBuilder
.
现在去哪里?