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