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

c++ - 用于任意编程语言或 IR 的 AST

是否可以单独使用 C 或 C++ 为任意编程语言或 IR 创建 AST(无需 YACC 和 LEX 等工具的帮助)?

如果是这样,如何实现词法和句法分析?

如果没有,必须扩充到 C 或 C++ 才能成功创建 AST 的工具是什么?

希望我把我的疑问说清楚了。如果我的问题看起来含糊不清或断章取义,请指出必填项。

PS:我实际上是在尝试为 LLVM 的 .ll 格式的 IR 表示创建 AST。我知道 .ll 是从 AST 派生的。但我正在尝试静态分析实践。所以我正在考虑创建 AST。

0 投票
2 回答
568 浏览

c# - ANTLR AST 构建:根节点作为字符串而不是字符

我可能会问一个愚蠢/基本的问题,但我对 ANTLR AST 的构建感到困惑。

我想要做的是一种布尔表达式解析器,这样在父节点上我有运算符及其操作数作为子节点。例如,一个句子

( ( ABC & D ) | ( E & ( F | G ) )

理想情况下应该代表

从下面的语法。

问题是,我将“AB C”作为节点列表(数组)作为“&”的子节点。

是否可以将其限制为单个字符串???即'AB C'或者换句话说,AST的根节点是否可以有多个字符???如果是,那么我该如何实现?

作为参考,我想制作一个“风险因素和当前经济状况”的语法树

PS我也试过:

仅供参考,我使用的是 .NET 环境。

0 投票
1 回答
410 浏览

java - JavacTask.parse() 的 Javac AST 符号解析

正如我几天前在官方 Java 支持论坛上发布的那样,我想知道是否可以使用原始 javac 实现从自己的代码中解析 JCTree 符号。

http://forums.oracle.com/forums/thread.jspa?threadID=1774807&tstart=0

解决 resolve = Resolve.instance(javacTaskImpl.getContext());

0 投票
1 回答
6172 浏览

antlr - 如何使用 Antlr 实现函数调用,以便在定义之前就可以调用它?

构建 AST 后,实现 tree walker 的最佳方法是什么,以便可以以任何顺序定义和调用函数?

例如,这在 PHP 中是有效的:

我猜想一定有第二遍,或者树变换,但我在这个主题上找不到任何有趣的东西。问题可能不是特定于 Antlr 的问题,但如果您能指出一个 Antlr 示例来说明这是如何完成的,那就更好了!

0 投票
1 回答
3195 浏览

antlr - 在 ANTLR 中生成简单的 AST

我正在玩一些 ANTLR,并希望创建一个这样的函数:

这会产生以下 AST:

到目前为止,我已经尝试过没有运气,并且我不断让 AST 将参数作为兄弟姐妹,而不是孩子。

到目前为止的代码:

C#:

ANTLR:

0 投票
2 回答
601 浏览

python - python ast模块资源

任何人都可以推荐一个资源来展示 AST 模块是如何工作的吗?特别是 NodeVisitor 和 NodeTransformer...

0 投票
3 回答
633 浏览

javascript - 有哪些工具可以解析 Javascript 并读取 Javascript 或 Ruby 中的结果?

我想对 Javascript 进行一些代码分析。我更喜欢在ASTS-Expression上进行操作。V8引擎当然有可能构建它,尽管我似乎找不到任何关于如何从 Javascript 上下文访问此信息的文档。

我非常乐意在 Ruby 中进行分析,尽管我能想到的唯一方法是在Treetop或类似的解析器生成器中编写整个语法。

0 投票
1 回答
270 浏览

antlr - ANTLR AST 构建问题

我无法获得 AST

使用以下语法

我想制作一个应该显示单词和运算符的 AST,以便

即我的要求是这样的:

相反,我得到的是:

实际上,我指的是 MultiwordNode 下的 AST(或在“原子”级别生成)

它应该像

(对不起我画的不好:))

问题是,如果运算符不带引号出现,它应该是其兄弟的头部(正如它在 AST 中所指的那样)。但是当它出现在一些带引号的文本中时,它应该像其他词一样被捕获......

0 投票
1 回答
798 浏览

antlr - ANTLR 中 AST 的可选重写规则

在 ANTLR 中构建 AST 时遇到问题(我使用的是 ANTLR 3.2、ANTLRWorks 1.4)。

这是我的语法:

问题出现在类的可选部分 - ('extends' e=IDENTIFIER)?.

所以语法适用于这个类声明:

并且在我排除extends部分时失败,如下所示:

ANTLR 在此片段之前停止并在控制台中给出此异常: javax.swing.text.BadLocationException: Position not represented by view

我如何指向 ANTLR 来处理^(EXTENDS $e)可选的重写规则?

0 投票
2 回答
1245 浏览

compiler-construction - 生成 C/C++ 代码时表达式的关联性和优先级?

我编写了一个生成 AST 的基本编译器,正确考虑了表达式中的运算符优先级。但是,在执行代码生成以生成 C++ 代码时,我不确定如何处理括号的使用。

对于这个表达式:

下面的AST:

应该正确生成包含括号的前一个表达式,但是如果第二个运算符是加法运算符(例如),则括号将是不必要的。我宁愿只在必要时使用它们以提高可读性。

是否有任何规则规定这种行为以及如何知道何时使用括号。加号和减号在大多数语言中具有相同的优先级,我想让所有运算符都可以使用。