ターゲット言語C#でANTLRを使用して解析ツリー(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
。
これからどこ行く?