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

eclipse - Eclipse 中的增量编译。ASTNode-s 和 SVN 版本控制

在分析 eclipse 中的源代码后,我正在建立一些统计数据。但是整个过程太慢了,因为我每次编译后都从头开始重建我的模型。 我正在寻找一种方法来仅获取代码的更改部分(作为 ASTNodes)并仅重建我的模型的那部分。我想即使是更改的编译单元而不是确切的代码元素在用户编译后就足够了,并且仍然是一个很好的优化。

我确信 eclipse 能够知道哪些代码元素被更改(甚至知道它们的语义),因为当我使用 subclipse 插件时,我的更改是按代码元素排序的(导入、方法、变量声明等) . 好吧..至少该插件能够知道该信息。

提前致谢

0 投票
1 回答
472 浏览

java - XPath 根据另一个 XPath 元素查找元素

我有一个 Java AST,我尝试通过 XPath 在其中找到一个变量。

假设这个变量被称为“foobar”,我可以使用

但是如果我不知道文本“foobar”,但想从另一个元素中读取它怎么办

“名称”节点在@Image 中有信息“foobar”,但PrimaryPrefix/Name[@Image]不起作用。

我必须如何重写与//SynchronizedStatement/Expression/PrimaryExpression/PrimaryPrefix/Name它相同的条件@Image='foobar'

谢谢

0 投票
1 回答
597 浏览

java - XPath 根据祖先元素查找元素

我又有了 Java AST,它是从

我尝试创建一个 XPath 查询,该查询查找使用定义的字符串变量的同步块o

正如上面的定义,它是 SynchronizedStatement 的祖先,但我没有让它工作

我知道这/SynchronizedStatement[Expression/PrimaryExpression/PrimaryPrefix/Name[@Image=是正确的,我的问题是如何解决祖先 ClassOrInterfaceBody 部分。

希望它清楚我的意思;-)

谢谢

0 投票
3 回答
22214 浏览

python - 如何用 Python 编写抽象语法树的访问者模式?

我的同事建议我编写一个访问者模式来导航 AST。谁能告诉我更多我将如何开始写它?

据我了解,AST 中的每个节点都有visit()方法(?),它会以某种方式被调用(从哪里?)。我的理解到此结束。

为了简化一切,假设我有节点RootExpressionNumberOp并且树看起来像这样:

谁能想到访问者模式将如何访问这棵树以产生输出:

谢谢,博达赛多。

0 投票
1 回答
447 浏览

scala - 为递归方法生成scala AST

我正在使用以下代码生成 scala AST:

我猜这是用于在代码中运行编译器并生成要使用的 AST 的标准代码。到目前为止,上面的代码对于 Test.scala 中的任何有效 scala 代码都可以正常工作。当我在 Test.scala 中使用递归函数时,比如

def xMethod(x:Int):Int = if(x == 0) -1 else xMethod(x-1)

它给了我一个 java.lang.NullPointerException。堆栈跟踪的前几行如下所示

该代码适用于类似的方法

如果递归函数需要任何其他设置,请告诉我。

0 投票
2 回答
651 浏览

design-patterns - 使用表达式 AST

使用 AST 时有什么最佳实践吗?我有一个解析表达式 AST。ConstantExpression、BinaryExpression 等。我想用来自 AST 的信息填充一个 GUI 对话框,在这里我有点困惑,因为我的代码变得非常混乱。

例子:

我想分别填充两个值为 10 的文本框。20 来自 AST。我现在正在做的是一种递归方法,它检查正确的子表达式类型(使用.Net Is-operator)并采取相应的行动,代码真的很“臭”:)

是否有任何设计模式,如访问者等,使这更容易/更具可读性/可维护性?

0 投票
5 回答
1681 浏览

java - 在 Java 中解析 Java 的最佳方法

正如标题所说,我想用Java解析一些Java源代码。我很确定还有其他 java 库已经执行此操作,但我找不到。

0 投票
1 回答
1158 浏览

.net - 将 C#3 代码表示为 XML 中的抽象语法树

我想知道C#3是否有类似于GCC_XML的东西;基本上是一种用 XML 表示程序的整个句法结构的方法。

创建表示后,我希望将其解析为 XDocument 并从那里解释或查询它。

有没有工具可以解决这个问题?

0 投票
5 回答
8293 浏览

xml - 如何将源代码转换为基于 xml 的 ast 表示?

我想获得 java 和 c 代码的 ast 的 xml 表示。3个月前,我问过这个问题,但解决方案对我来说并不舒服

  • srcml似乎是解决此问题的好方法,但它不支持行号和列,但我需要该功能。
  • 关于elsa:引用:“正在努力将 Elsa AST 导出为 XML 文档;我们希望能够在下一个公开版本中宣传这一点。”
  • dms ...不明白这一点。
  • 特别是对于 java,有javaml支持行号。但sourceforge 页面没有列出任何文件。

问题:有可用的软件支持将 ast 转换为支持行号(和列)的 xml [特别是对于 java 和 c/c++]?有没有 javaml 和 srcml 的替代品?

ps:我不想要解析器生成器。我希望找到一个可以在控制台键入的工具:./my-xml-generator Test.java [或类似的东西]...或者java实现也会很棒。

0 投票
1 回答
609 浏览

c# - 用 Visual Basic 和 C# 开发的应用程序的 AST 生成

我目前正在了解一个用 Visual Basic 和 C# 开发的应用程序。运行代码变得越来越困难,因为代码大约是 50KLOC。所以我计划生成 AST(抽象语法树)。是否可以同时为两种语言生成。

至少生成调用图会有所帮助(但找不到适用于两种语言的任何工具)

如果这个问题令人困惑,请告诉我。

提前致谢