Chr*_*per 8 c# compiler-construction abstract-syntax-tree irony
我有一个语法可以在Irony控制台中正常工作和解析,但我在AST树视图中没有得到任何东西.我跟随在这里找到的BASIC-> Javascript文章:http://www.codeproject.com/Articles/25069/JSBasic-A-BASIC-to-JavaScript-Compiler,但似乎Ast的东西都是移动/删除.我找到了Irony.Interpreter .dll,里面有一些Ast内容,但它似乎都在Expression示例实现中.
我在这里错过了什么?我想走我的树并生成源代码,我不知道从哪里开始.
我已经看到一些提到使用访问者模式,我很好,但我不知道如何实现它并以Irony喜欢的方式运行它.
查看适当命名的Sarcasm项目,以获得基于Irony构建的语法,解析器和AST的参考实现.我发现作者的这篇博客文章有助于构建AST.
以下是启动和运行AST的通用指南.
MyBaseNode派生自AstNode(example)的抽象基类().复制/粘贴示例中的方法为每个终端和非终端创建一个派生自MyBaseNode和的新类
Accept方法(示例): public override void Accept(IMyNodeVisitor visitor) { visitor.Visit(this); }
Init(主要在终端上)或InitChildren(非终端).这就是AST魔法发生的地方.添加界面 IMyNodeVisitor并Visit为上一步(示例)中定义的每个类添加方法:
void Visit(MyDerivedNode1 node);
设置ASTNodeType步骤1为每个终端和非终端的在你的语法.
在语法中启用AST创建:( 示例)
LanguageFlags = LanguageFlags.CreateAst;