【问题标题】:Parser in C# and printing ASTC# 中的解析器和打印 AST
【发布时间】:2016-03-26 02:41:14
【问题描述】:

我正在 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# 经验的人可以帮我解决这个问题吗?

【问题讨论】:

    标签: c# parsing visitor-pattern bnfc


    【解决方案1】:

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

    return default(R);
    

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

    'HTH,

    【讨论】:

    • 谢谢@YSharp ...请帮助我理解。那我会返回什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 2012-01-17
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多