C#中的解析器和打印AST

时间:2016-03-26 02:41:15

标签: c# parsing visitor-pattern bnfc

我在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#经验的人能帮我跟上这个吗?

1 个答案:

答案 0 :(得分:1)

在你的项目中,我注意到你所有的通用Visit方法最终会返回相同的常量结果,无论这些方法的其他部分在此之前做了什么:

return default(R);

对于作为引用类型的R的具体类型,此“default(R)”返回值实际上将始终为null。

“HTH,