问题标签 [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 投票
3 回答
2250 浏览

python - 如何编写 Python 调试器/编辑器

对不起那种一般性的问题。关于我想要的更多细节:

我希望用户能够编写一些 Python 代码并执行它。一旦出现未处理的异常,我希望调试器暂停执行,显示有关当前状态/环境/堆栈/异常的信息,并使编辑代码成为可能。

我只想让特殊代码块在发生异常的地方可编辑,而不是其他(暂时)。即如果它发生在for循环内,我只想让for循环内的代码块可编辑。它应该是用户编辑器范围内的最新/最新代码块(而不是在其他一些库或 Python 库中)。在这种情况下,总是很清楚要编辑什么代码块。


我已经尝试过研究如何做到这一点,尽管我感到有点失落。

Python 回溯没有直接给我代码块,只是函数和代码行。我可以计算回来,但这对我来说似乎有点老套。如果我能以某种方式在代码的 AST 中获得对代码块的引用,则更好(也更自然)。

要获得 AST(并对其进行操作,即操作/编辑),我可能会使用compiler(已弃用?)和/或parser模块。或者ast模块。不确定如何重新编译 AST 中的特殊节点/代码块。或者,如果我只能重新编译整个函数。

0 投票
1 回答
1206 浏览

algorithm - 从前缀顺序表达式构建语法树的算法

将使用什么类型的算法从以前缀顺序表示法表示的表达式构造语法树?

0 投票
4 回答
2776 浏览

python - 测试python AST是否相等的优雅方法(不是引用或对象身份)

不确定这里的术语,但这将是方案之间的区别,或者是eq?C 字符串之间的区别;在每种情况下,对于两个实际上具有相同内容的不同字符串,第一个将返回 false,而第二个将返回 true。equal?==strncmp

我正在寻找后一种操作,用于 Python 的 AST。

现在,我正在这样做:

这显然有效,但感觉就像一场等待发生的灾难。有人知道更好的方法吗?

编辑:不幸的是,当我去比较两个 AST 时__dict__,该比较默认使用单个元素的__eq__方法。AST 被实现为其他 AST 的树,它们__eq__显然会检查引用身份。==因此,Thomas 的链接工作中既不是直的也不是解决方案。(除此之外,我也不想对每个 AST 节点类型进行子类化以插入此 custom __eq__。)

0 投票
2 回答
4209 浏览

java - 使用 Eclipse AST

我最近开始需要修改一些 Java 代码(添加方法、更改某些字段的签名和删除方法),我认为所有这些都可以通过使用 Eclipse SDK 的 AST 来完成。

我从一些研究中知道如何解析源文件,但我不知道如何做上面提到的事情。有谁知道一个好的教程,或者有人可以简要解释一下如何解决这些问题?

非常感谢,

极限编码器


编辑:

我现在开始更多地研究 JCodeModel,我认为这可能更容易使用,但我不知道是否可以将现有文档加载到其中?

如果这可行,请告诉我;)

再次感谢。

0 投票
6 回答
22022 浏览

php - 我可以对代码强制执行哪些类型的模式以使其更容易转换为另一种编程语言?

我正在着手做一个附带项目,其目标是将代码从一种编程语言翻译成另一种编程语言。我开始使用的语言是 PHP 和 Python(Python 到 PHP 应该更容易开始),但理想情况下,我能够(相对)轻松地添加其他语言。计划是:

  • 这是面向Web开发的。原始代码和目标代码将位于框架之上(我也必须编写)。这些框架将采用 MVC 设计模式并遵循严格的编码约定。这应该会使翻译更容易一些。

  • 我还在研究 IOC 和依赖注入,因为它们可能使翻译过程更容易,更不容易出错。

  • 我将使用 Python 的解析器模块,它可以让我摆弄抽象语法树。显然我能用 PHP 得到的最接近的是token_get_all(),这是一个开始。

  • 从那时起,我可以构建 AST、符号表和控制流。

然后我相信我可以开始输出代码了。我不需要完美的翻译。我仍然需要检查生成的代码并修复问题。理想情况下,翻译人员应该标记有问题的翻译。

在你问“这到底是什么意思?”之前 答案是……这将是一次有趣的学习经历。如果您对如何使这不那么令人生畏有任何见解,请告诉我。


编辑:

我更感兴趣的是知道我可以在代码上实施什么样的模式以使其更容易翻译(即:IoC、SOA?)代码,而不是如何进行翻译。

0 投票
1 回答
71 浏览

ruby - 如何查看类层次结构中方法在 Ruby 中的定义和覆盖位置?

有没有办法知道方法是否已被子类以编程方式覆盖?像这样工作的东西:

有任何想法吗?

0 投票
4 回答
2711 浏览

python - 给定 AST,是否有用于获取源代码的工作库?

有没有办法将给定的 Python 抽象语法树 (AST) 转换为源代码?

是一个很好的例子,说明如何使用 Python 的ast模块,特别是NodeTransformer. 我正在寻找一种将生成的 AST 转换回源代码的方法,以便可以直观地检查更改。

0 投票
1 回答
451 浏览

ruby - Ruby (MRI) 语法树节点文档

可以很容易地推断出mri 语法树中大多数节点的含义。但是列表很长(来源:bin/parse_tree_abc):

由于 Python 的 AST 操作是一个内置库,因此它的文档要好得多。是否有一个地方记录了解析树的语法树中的所有节点?

0 投票
3 回答
427 浏览

perl - 如何从 Perl 中的 coderef 获取语法树?

我想在 Perl 中检查和操作任意 Perl 过程的代码(由 coderefs 获得)。是否有用于此的工具/模块/库?类似于B::Concise的东西,除了 B::Concise 在输出上打印代码,但我想以编程方式检查它。

我想像这样使用它。给定一个 coderef F,它被称为例如。有 10 个参数:

我想创建一个函数F1,st。

那就是将它“分解”成两部分,第二部分不依赖,x1第一部分尽可能简单(我假设F它是一个巨大的产品)。

我想要的应用程序是Metropolis 采样算法的优化- 假设我正在对分布进行采样p(x1 | x2 = X1, x3 = X3, ...) = f(x1, x2, x3, ...)。算法本身是不变的。乘法常数因子和其他变量不会通过算法改变,因此根本不需要评估不依赖的部分x1(即从上面)。$c

联合概率可能有例如。以下形式:

我还考虑将其构造p为一个对象,该对象由具有特定因素所依赖的变量的注释的因素组成。即使这也将受益于代码自省(自动确定变量)。

0 投票
5 回答
5563 浏览

terminology - 抽象语法树有什么用?

我正在自学为编程语言编写解释器,并且我已经阅读了抽象语法树。我知道它们是什么,但我看不到它们的用途。

为什么 AST 有用?