0

我正在 C# 中为复杂的语法实现 AST(抽象语法树),但是,为了使这个问题变得简单,我将使用非常简单的语法。

考虑这个语法:

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 为空。有 C# 经验的人可以帮助我走上正轨吗?

4

1 回答 1

1

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

return default(R);

对于作为引用类型的 R 的具体类型,这个“default(R)”返回值确实总是 null。

'HTH,

于 2016-03-26T05:34:47.390 回答