51得票1回答
使用令牌列表构建抽象语法树

我希望你能从令牌列表中构建抽象语法树(AST)。我正在制作一种脚本语言,已经完成了词法分析部分,但我不知道如何创建AST。因此问题是,我该如何处理像这样的内容:WORD, int WORD, x SYMBOL, = NUMBER, 5 SYMBOL, ; 如何将代码转换为抽象语法树(AST)?...

9得票2回答
如何手动构建抽象语法树(AST)?

我目前正在学习解析,但我有点困惑如何生成AST。我已经编写了一个解析器,可以正确验证表达式是否符合语法(当表达式符合规范时它是静默的,不符合时会引发异常)。从这里开始,我该怎么建立AST呢?我找到了很多关于构建LL(1)解析器的信息,但几乎没有关于如何继续构建AST的信息。 我的当前代码(用...

10得票1回答
如何使用Python 3.x的ast模块解析Python 2.x代码?

我最近写了一个Sublime Text 3插件,可以解析Python代码并输出一些统计数据。 这并不太复杂,但我注意到Sublime Text 3使用的是Python 3.x版本,而显然ast模块也需要看到Python 3.x代码。我查看了ast模块的文档,但没有找到任何允许我指定版本的内容...

7得票2回答
使用CDT的抽象语法树API生成/编写C代码?

我已成功使用CDT的AST API解析源代码。我的问题涉及反向操作:如何通过编程构建C AST,并告译它将自己写入文件?我看到了ASTWriter类(但那是内部的),并且找不到任何关于构建实际AST的教程或文档。 我找到了一篇论文,介绍了我想要做的事情的思路:生成可重写的抽象语法树,它让我觉...

7得票2回答
Python: 如何修改一个函数的源代码(monkey patch)

我可以将函数的源代码添加前缀和后缀吗? 我知道装饰器,但不想使用它们(下面的最小示例不清楚原因,但我有我的理由)。 def f(): print('world') g = patched(f,prefix='print("Hello, ");',suffix='print("!")...

7得票1回答
如何在遍历抽象语法树时使用阅读器Monad

我有一个用 Parsec 制作的 Haskell 抽象语法树。我想在遍历它的同时查询其结构,以将其转换为中间代码。例如,我需要知道 AST 中任何给定函数需要多少个参数,以进行此转换。目前,我正在将 AST 传递给每个函数,以便在需要查找时调用它,并且我有另一个文件中的帮助函数来执行查找。这会...

18得票1回答
如何遍历clang AST的所有节点?

我可以使用RecursiveVisitor类遍历特定子树的clang AST,但我想逐个节点地遍历clang AST。 如果有人能帮助我完成这个操作,我将非常感激。 提前致谢。

12得票1回答
AST解释器?

我有一个AST(抽象语法树),现在我想通过给它2个或更多数字并期望输出数学运算结果(就像计算器一样)来测试我的编译器。 我的问题是,构建解释器的最佳方式是什么? AST节点的访问是递归的,因此在到达树的末尾之前,我不知道存在多少封装的计算。但是由于这是迭代完成的,我该如何使所有操作在结束时进...

13得票2回答
如何提取Python代码文件中使用的函数?

我想创建一个代码文件中使用的所有函数列表。例如,如果我们有以下代码文件'add_random.py': `import numpy as np from numpy import linalg def foo(): print np.random.rand(4) + np.rand...

7得票2回答
Python: 统计一行代码执行次数

问题 出于教学目的,我想要在不修改或装饰给定函数的情况下计算给定行在该函数中执行的次数。例如,对于以下函数: def binary_search(seq, x): (a, b) = (0, len(seq) - 1) while a <= b: m =...