2016-03-26 11 views
0

複雑な文法のためにC#でAST(抽象構文木)を実装していますが、この質問を簡単にするために、私は非常に単純な文法を使用します。C#でのパーサーとASTの印刷

はこの文法を考えてみましょう:

rules Expr ::= Term "+" Term 
     | Term ; 

rules Term ::= Ident 
     | Integer ; 

私はbnfcを使用してパーサ/レクサを生成し、私はコードの一部を解析することができますし、解析木を印刷することができますポイントになってきました。今度はそれをASTにマップし、抽象構文木を印刷したいと思います。 hereはこれまでサンプルプロジェクトで行ってきたことです。

現在、私はプログラムをテストすると、私の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#での経験を持つ人がこれを使って進んでいくことができますか?の具体的なタイプの

return default(R); 

:あなたのプロジェクトで

答えて

1

は、私はすべてのあなたの一般的な訪問の方法は、その前に関係なく、これらのメソッドの体の残りの部分は何をしたか、同じ一定の結果を返さない終わることに気づきましたRが参照型である場合、この「デフォルト(R)」戻り値は常にnullになります。

'HTH、

+0

ありがとうございました...ご理解ください。私は何を返しますか? – 2D3D4D