複雑な文法のために C# で AST (Abstract Syntax Tree) を実装していますが、この質問を簡単にするために、非常に単純な文法を使用します。
次の文法を考えてみましょう:
rules Expr ::= Term "+" Term
| Term ;
rules Term ::= Ident
| Integer ;
私は bnfc を使用してパーサー/レクサーを生成し、コードの一部を解析して解析ツリーを出力できるようになりました。今度はそれを AST にマップし、抽象構文ツリーを出力したいと思います。サンプルプロジェクトでこれまでに行ったことは次のとおりです。
ただし、現在、プログラムをテストすると、AST が NULL として返されます。
var astGen = new gplex.VisitSkeleton.ExprVisitor<Expr1, gplex.Absyn.Expr1>();
var ast = astGen.Visit((gplex.Absyn.Expr1)parse_tree, (gplex.Absyn.Expr1)parse_tree);
ここで、ast は null です。C# の経験がある人が、これを軌道に乗せるのを手伝ってくれますか?