私は Irony (バージョン Irony_2012_03_15) を使い始めていますが、AST を生成しようとするとすぐに行き詰まりました。以下は、例外をスローする完全に制限された言語です。
[Language("myLang", "0.1", "Bla Bla")]
public class MyLang: Grammar {
public NModel()
: base(false) {
var number = TerminalFactory.CreateCSharpNumber("number");
var binExpr = new NonTerminal("binExpr", typeof(BinaryOperationNode));
var binOp = new NonTerminal("BinOp");
binExpr.Rule = number + binOp + number;
binOp.Rule = ToTerm("+");
RegisterOperators(1, "+");
//MarkTransient(binOp);
this.Root = binExpr;
this.LanguageFlags = Parsing.LanguageFlags.CreateAst; // if I uncomment this line it throws the error
}
}
最後の行のコメントを外すとすぐに、文法エクスプローラーで、またはテストを解析したいときに NullReferenceException がスローされます。エラーは AstBuilder.cs の 96 行目にあります。
parseNode.AstNode = config.DefaultNodeCreator();
DefaultNodeCreator は、設定されていないデリゲートです。
MarkTransient などで設定しようとしましたが、サイコロはありません。
誰か私がここで浮くのを手伝ってくれませんか? 私はおそらく明らかな何かを見逃しています。ウェブ全体で AST チュートリアルを探しましたが、それがどのように機能するかについての説明が見つからないようです。
前もって感謝します、
ゲルト・ヤン