问题标签 [abstract-syntax-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
13 回答
62275 浏览

python - 解析 .py 文件,读取 AST,修改它,然后写回修改后的源代码

我想以编程方式编辑 python 源代码。基本上我想读取一个.py文件,生成AST,然后写回修改后的 python 源代码(即另一个.py文件)。

有一些方法可以使用标准的 Python 模块来解析/编译 Python 源代码,例如astcompiler. 但是,我认为它们中的任何一个都不支持修改源代码的方式(例如删除此函数声明),然后将修改后的 python 源代码写回。

更新:我想这样做的原因是我想为 python 编写一个突变测试库,主要是通过删除语句/表达式,重新运行测试并查看什么中断。

0 投票
4 回答
368 浏览

antlr - 编写模板语言/VewEngine

除了完成任何真正的工作外,我还很痒。我的渴望是编写一个视图引擎,它可以从另一种语言(模板工具包/Perl)中紧密模仿模板系统。如果我有时间/做它来学习一些新的项目,这就是其中之一。

我花了一些时间研究 CoCo/R 和 ANTLR,老实说,这让我很头疼,但是一些 CoCo/R 正在陷入困境。不幸的是,大多数示例都是关于创建一个读取源代码的编译器,但没有一个似乎涵盖了如何为模板创建处理器。

是的,这些是相同的,但我无法理解如何为模板定义语言,其中大部分源代码是 html,而不是解析和运行的实际代码。

这种事情有没有好的初学者资源?我在 Spark 上做了一个 ganer,它似乎在 repo 中没有语法。

也许这太过分了,人们可以在文件中用 c# 测试替换模板语法并编译它。http://msdn.microsoft.com/en-us/magazine/cc136756.aspx#S2

如果你在我的鞋子里并且不是语言创造专家,你会从哪里开始?

0 投票
3 回答
398 浏览

c# - 获取代码文件版本差异,显示受影响的方法(名称)

我想获得两个版本的代码文件(Java/C#)之间的差异 - 并从中获得受影响的方法(名称)列表。这是否已实施?

我认为这需要对从差异返回的行进行 AST 分析。

这样做的目的是改进 checkstyle/findbugs 以仅处理 Sprint 期间触及的方法。

我查看了 eclipse 的 diff 过程:

http://dev.eclipse.org/viewsvn/index.cgi/org.eclipse.compare.tests/src/org/eclipse/compare/tests/

看起来它只适用于行号 - 而不是实际的 AST。我对 line#=>methodName 映射感兴趣。

0 投票
2 回答
2158 浏览

python - Python 最佳实践:抽象语法树

修改抽象语法树

我希望能够构建和修改一个ast,然后可以选择将其写为 python 字节码,以便稍后执行而无需开销。

我一直在研究 and 的ast文档但我似乎找不到任何关于此类代码最佳实践的良好资源。python3.0python2.6

问题

在 python 中修改抽象语法树有哪些最佳实践和指南?

[编辑]

Unknown指出byteplay是此类库的一个很好的例子。

此外,本福德还引用了GeniuSQL,它使用抽象语法树将 Python 代码转换为 SQL。

0 投票
5 回答
1498 浏览

java - 如何在基于抽象语法树的解释器中表示类

我已阅读相关问题,但似乎都没有直接解决这个问题。我正在编写一个 PHP 脚本解释器。我让 AST 为除类之外的所有内容生成适当的节点。处理类与处理函数有点不同,所以我正在寻找如何处理独立的类以及扩展其他类的类。

我看过 ANTLR,但我负担不起开销,因为这是嵌入式平台。我正在寻找的是 AST 中的类在概念上的理论,因此它们可以由解释器的执行程序部分执行。非常感谢与此问题的具体答案的良好链接。

0 投票
2 回答
9329 浏览

java - 如何在 Eclipse 之外的项目中使用 java Eclipse 抽象语法树?(即不是 Eclipse 插件)

如何在 Eclipse 之外的项目中使用 java Eclipse 抽象语法树?(即不是 Eclipse 插件)

我见过的所有 Eclipse AST 示例都是针对 Eclipse 插件的。有没有一种方法(即示例)将 eclipse AST 用于非 eclipse 项目。

0 投票
3 回答
5025 浏览

java - Eclipse 抽象语法树差异

给定 Eclipse 中的以下代码:

您如何使用 Eclipse 比较 API (org.eclipse.compare) 找到 AST 差异?(这可以在插件之外完成吗?)

我正在查看以下 API

http://kickjava.com/src/org/eclipse/compare/structuremergeviewer/Differencer.java.htm http://kickjava.com/src/org/eclipse/jdt/internal/ui/compare/JavaStructureCreator.java.htm http://kickjava.com/src/org/eclipse/compare/CompareUI.java.htm

任何人都可以指向示例代码(或 API - 但首选代码)。

0 投票
3 回答
647 浏览

c# - 来自行号的方法名称

给定特定类源代码(Java/C#)的行号 - 是否有一种简单的方法来获取它所属的方法的名称?(如果它在一个范围内)(大概使用抽象语法树)

(这对于将 checkstyle 的输出限制为仅触及的方法很有用)。

我假设您必须使用抽象语法树来执行 Line#-> MethodName。

0 投票
2 回答
3090 浏览

python - 如何在 Python 中获得完整的 AST?

我喜欢_ast模块提供的选项,它真的很强大。有没有办法从中获取完整的 AST?

例如,如果我得到以下代码的 AST:

通过使用 :

ast对象的主体将有两个元素,一个import对象和一个expr对象。但是,我想更进一步,获取importlistdir的 AST,换句话说,我想让_ast降到可能的最低级别。

我认为这种事情应该成为可能是合乎逻辑的。问题是如何

编辑:尽可能最低级别,我并不是说要访问“可见”的内容。我也想获得用于实现listdir的 AST :比如stat和其他可能为其执行的函数调用。

0 投票
5 回答
3213 浏览

c# - 如何操作 C# AST?

我正在从事一个逆向工程学校项目,该项目需要翻译已编译 C# 项目的操作 AST。我看过关于“将 C# 代码翻译成 AST?”的帖子。在这个网站上,但它看起来不像我要找的那个。

据我所知,目前 C# 没有为 Java 提供类似的库类:http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.cdt.doc。 isv/reference/api/org/eclipse/cdt/core/dom/ast/ASTVisitor.html。如果C#中有这样的库类,这里的一切都解决了。

我已经咨询了某人,这里是可能的解决方案。但是我在制定解决方案时也遇到了问题:

  1. 找到另一个提供库的编译器,该库允许公开其 AST 以进行操作。但是我找不到这样的编译器。
  2. 使用 ANTLR Parser Generator 来制作我自己的编译器(这将是一个更加困难和更长的过程)。那里的下载提供了不同语言的示例语法,但不提供 C#(它有用各种语言编写的语法,包括 C#,但不生成 C# 语法)。因此问题是我找不到 C# 语法。

解决此问题的最短和最快方法是什么?如果我真的必须采取上述替代方案之一,我应该如何解决我面临的这些问题。