我想用ANTLR在目標語言C#中創建一個分析樹(不是AST)。這似乎不那麼微不足道,也許我正在尋找所有錯誤的地方。創建ParseTree(而不是AST)
到目前爲止,我試圖實現在生成的解析器諧音如下:
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但生成的解析器沒有一個構造函數,需要ParseTreeBuilder
。
哪裏現在?
感謝您發佈解決方案。你還能透露一下CommonTreeAdaptor的類定義嗎? – Annie
它的ANTLR – Martijn