问题标签 [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 回答
2229 浏览

java - 用于代码分析的 Java 库

是否有任何 Java 库可以帮助从指定的 java 源文件构建AST,反之亦然(从 ASTree 对象生成代码)?我需要这样的东西但有一个 API,允许以编程方式访问生成的树。

0 投票
1 回答
935 浏览

c++ - 帮助 Boost Spirit AST

作为大学研究工作的一部分,我正在编写一个小工具来分析简单的 B 机器替换。该代码成功解析了 mySubst := var1 + var2 形式的测试输入。但是,我收到一条弹出错误消息,说“此应用程序已请求运行时以不寻常的方式终止它。”在命令提示符窗口中,我收到一条“断言失败消息”。主程序如下:

BMachineTreeGrammar.hpp 文件中定义的语法如下:

我在运行程序时得到的输出是:

我将不胜感激解决此问题的任何帮助。

0 投票
1 回答
649 浏览

parsing - 从 Source 到 AST 到 CodeDom

我正在阅读《语言实现模式》http://pragprog.com/book/tpdsl/language-implementation-patterns)一书,其中包括一些其他内容以澄清概念以及偶尔的网站。我正在尝试制作一个工具,它可以读取一种简单的编程语言并对其进行一些基本分析。

我陷入了这个工具的设计阶段。我构建了一个简单的手写递归体面解析器,它可以很好地验证源文件。但是,执行具有 CodeDom 树的源操作会很有用。

问题:

1) 像这样的工具是否需要执行逻辑步骤:解析并构建文本树和匹配符号表,然后将其转换为 CodeDom?

2)在构建文本树时,最方便的是 AST,更容易转换为 CodeDom .. 但是重构工具是否会在语句中维护所有嵌入标记的列表以保留内联注释以及它们如何跟踪在他们的树上?

0 投票
1 回答
588 浏览

eclipse - JDT ASTParser 获取字符串字段的值

有没有办法使用 jdt ASTParser 来获取在 java 文件中声明的 String 字段的值。实际上,我需要解决来自其他类的任何可能的依赖关系,例如
public String str = "somethig"+SomeTherClass.SOMETHING_ELSE。

0 投票
1 回答
4615 浏览

c++ - 在 C++(不是 C)中使用 bison 和 flex 创建简单的计算器

我想使用 bison 和 flex 创建简单的 C++ 计算器。请注意,我是创建解析器的新手。我已经在 bison/flex 中找到了一些示例,但它们都是用 C 编写的。

我的目标是创建 C++ 代码,其中类将包含值、操作、函数的节点 - 以创建 AST(评估将在创建整个 AST 之后完成 - 从根开始并继续前进)。

例如:

将被解析为:

第二个 AST 看起来像:

然后下面的伪代码反映了 AST:

其中exp是:

但不是这样:

因为这样我直接获得了操作的价值,而不是创建节点。

我相信节点应该包含类型(操作),val1(节点),val2(节点)。在某些情况下,val2 会是 NULL,就像上面提到的sqrt一样,它最后接受一个参数。对?

如果您能针对上述问题(包括 *.y 文件创建 AST)向我提出 C++ 框架(无需评估)以帮助我理解在 AST 中创建/保存节点的方式,那就太好了。代码可以被剪断,只是为了让我明白。

如果您知道现有的(可能很简单)示例,我也将不胜感激。

感谢大家的时间和帮助!

0 投票
4 回答
252 浏览

java - 查询 Java 源代码

我有一个 Java 源代码,我需要查询和应用安全策略 [例如应用 CWE] 我有几个想法,对于使用 AST 然后遍历树的初学者。其他包括使用正则表达式。除了 AST 或正则表达式之外,我是否可以将其他选项用于此类过程。

0 投票
5 回答
5104 浏览

java - 如何从生成的 java 编译器树 api 访问注释?

我使用 java 编译器树 api 为 java 源文件生成 ast。但是,我无法访问源文件中的注释。

到目前为止,我一直无法找到从源文件中提取注释的方法。有没有使用编译器 api 或其他工具的方法?

0 投票
1 回答
841 浏览

parsing - 我们可以从插件访问 Qt creator 内部解析器吗?

我想为 Qt Creator 制作一个插件,并且我想访问 Qt Creator 中的解析文件(AST)。例如,如果您右键单击一个变量,则检索其类型。

我只是查看了文档,并没有发现非常重要的东西。而且我担心自己不得不解析页面。

有人试过并成功了吗?:p

0 投票
4 回答
736 浏览

ocaml - 是否有可能获得 OCaml 程序的 AST?

我希望能够为给定的 OCaml 程序获取 AST(例如,我想遍历 AST 并生成代码的检测版本或进行某种转换)。是否有任何 OCaml 工具支持此功能?

0 投票
3 回答
1892 浏览

python - 如何从一个简单的函数中提取名称?

我有这段代码:

从函数'func'我想提取:

或类似的东西:

已编辑

一些背景来解释为什么我认为我需要这样做

我想将一个简单的 python 函数的代码转换为电子表格公式。

所以我需要转换:

至:

示例电子表格 http://img441.imageshack.us/img441/1451/84516405.png

**再次编辑*

到目前为止我所拥有的。

下面的程序输出:

编码:

我在这里找到了一些资源:Python internals: Working with Python ASTs I grabbed a working codegen module here