2016-03-26 78 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是空的。有C#經驗的人可以幫助我理解這一點嗎?

回答

1

在你的項目中,我注意到您所有的通用訪問方法,最終在此之前不管那些方法的身體的其餘部分做返回相同的一定的成果:

return default(R); 

對於具體類型的R是引用類型,這個「默認(R)」返回值確實總是爲空。

'HTH,

+0

謝謝@YSharp ...請幫我理解。那麼我會返回什麼? – 2D3D4D