17得票3回答
如何使用JDT/AST将代码片段添加到方法体中

我正在尝试使用JDT/AST生成Java源代码。现在我有一个MethodDeclaration,想要将另一个源中的代码片段添加到该方法体中。该代码片段可以包含任何Java代码,即使是语法无效的代码。我只是找不到如何做到这一点。 使用JCodeModel,你可以使用JBlock#directS...

17得票2回答
使用TypeScript编译器API,是否可以将注释作为AST中的节点获取?

我想从一个TypeScript源文件中提取注释,最好还能包含它们所在的行号。我尝试了以下方法:var program = ts.createProgram(files, { target: ts.ScriptTarget.ES5, module: ts.ModuleKind.Commo...

7得票1回答
从方法对象获取方法调用及其参数

使用Python的inspect模块,我已经找到了一个方法对象,现在需要逐步查看该方法中的源代码,以查找对某些其他方法的调用并获取它们的参数。 例如,在以下类中: def my_method(): print('hello') foobar('apple', 'pear',...

11得票2回答
优雅的AST模型

我正在用scala编写一个玩具编译器。目标语言本身看起来像scala,但是可以进行实验。 进行了几次大型重构后,我无法找到一种良好的方式来模拟我的抽象语法树。我想使用scala的模式匹配功能,但问题在于该树沿着编译过程携带移动信息(例如类型、符号)。 我能看到几个解决方案,但都不喜欢: ...

21得票2回答
编译成字节码的动机是什么?

我正在开发自己的玩具编程语言。目前,我正在通过AST解释源代码,并想知道将其编译成字节码然后再解释它能为我提供什么优势。 目前我有三个想法: 遍历语法树数百次可能比在数组中运行指令更慢,特别是如果该数组支持O(1)随机访问(即向上和向下跳10条指令)。 在静态类型执行环境中,由于我的AS...

18得票1回答
如何在Haskell中表示两棵树之间的映射?

我正在尝试在Haskell中实现一种树处理算法,但由于这是我的第一个Haskell程序,因此在设计数据结构时遇到了困难。是否有任何FP大师可以给予帮助? 我将首先描述算法的重要特征,勾勒出我会如何使用命令式语言来解决问题,并最后介绍我在Haskell中迈出的蹒跚步伐。 问题 我不会详细描...

7得票2回答
在Clang中如何确定访问的CXXRecordDecl是类、结构体还是联合体

我使用 Clang 来从 C++ 源代码构建AST,并使用 RecursiveASTVisitor 遍历树。 我想在访问记录声明时确定它是类、结构体还是联合体。我有一个重载的函数 VisitCXXRecordDecl(clang::CXXRecordDecl)。在这个函数中,我可以 检查类提...

8得票1回答
如何从clang AST节点中打印源代码位置

我在松散地跟随http://clang.llvm.org/docs/LibASTMatchersTutorial.html上的教程。我成功创建了一个匹配类定义的AST匹配器,我的MatchFinder看起来像这样: class ClassDeclPrinter : public MatchF...

8得票2回答
什么是抽象语法树?它是否必要?

我一直对编译器/解释器的设计和实现感兴趣(只有5年来),它总是被认为是幕后的“魔法”,没有人真正谈论它(我知道至少有2个操作系统开发论坛,但我不知道任何关于编译器/解释器/语言开发的社区)。无论如何,最近我决定开始自己动手,并希望扩展我的整个编程知识(而且这很有趣:)。因此,基于我有限的阅读材...

24得票2回答
在向Go AST添加项目后,注释顺序错乱。

以下测试尝试使用AST向结构体添加字段。字段被正确添加,但注释的顺序被打乱了。我认为可能需要手动指定位置,但到目前为止我还没有找到答案。 这是一个失败的测试:http://play.golang.org/p/RID4N30FZK 以下是代码: package generator imp...