问题标签 [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.
c++ - 用于任意编程语言或 IR 的 AST
是否可以单独使用 C 或 C++ 为任意编程语言或 IR 创建 AST(无需 YACC 和 LEX 等工具的帮助)?
如果是这样,如何实现词法和句法分析?
如果没有,必须扩充到 C 或 C++ 才能成功创建 AST 的工具是什么?
希望我把我的疑问说清楚了。如果我的问题看起来含糊不清或断章取义,请指出必填项。
PS:我实际上是在尝试为 LLVM 的 .ll 格式的 IR 表示创建 AST。我知道 .ll 是从 AST 派生的。但我正在尝试静态分析实践。所以我正在考虑创建 AST。
c# - ANTLR AST 构建:根节点作为字符串而不是字符
我可能会问一个愚蠢/基本的问题,但我对 ANTLR AST 的构建感到困惑。
我想要做的是一种布尔表达式解析器,这样在父节点上我有运算符及其操作数作为子节点。例如,一个句子
( ( ABC & D ) | ( E & ( F | G ) )
理想情况下应该代表
从下面的语法。
问题是,我将“AB C”作为节点列表(数组)作为“&”的子节点。
是否可以将其限制为单个字符串???即'AB C'或者换句话说,AST的根节点是否可以有多个字符???如果是,那么我该如何实现?
作为参考,我想制作一个“风险因素和当前经济状况”的语法树
PS我也试过:
仅供参考,我使用的是 .NET 环境。
java - JavacTask.parse() 的 Javac AST 符号解析
正如我几天前在官方 Java 支持论坛上发布的那样,我想知道是否可以使用原始 javac 实现从自己的代码中解析 JCTree 符号。
http://forums.oracle.com/forums/thread.jspa?threadID=1774807&tstart=0
解决 resolve = Resolve.instance(javacTaskImpl.getContext());
antlr - 如何使用 Antlr 实现函数调用,以便在定义之前就可以调用它?
构建 AST 后,实现 tree walker 的最佳方法是什么,以便可以以任何顺序定义和调用函数?
例如,这在 PHP 中是有效的:
我猜想一定有第二遍,或者树变换,但我在这个主题上找不到任何有趣的东西。问题可能不是特定于 Antlr 的问题,但如果您能指出一个 Antlr 示例来说明这是如何完成的,那就更好了!
antlr - 在 ANTLR 中生成简单的 AST
我正在玩一些 ANTLR,并希望创建一个这样的函数:
这会产生以下 AST:
到目前为止,我已经尝试过没有运气,并且我不断让 AST 将参数作为兄弟姐妹,而不是孩子。
到目前为止的代码:
C#:
ANTLR:
python - python ast模块资源
任何人都可以推荐一个资源来展示 AST 模块是如何工作的吗?特别是 NodeVisitor 和 NodeTransformer...
javascript - 有哪些工具可以解析 Javascript 并读取 Javascript 或 Ruby 中的结果?
我想对 Javascript 进行一些代码分析。我更喜欢在AST或S-Expression上进行操作。V8引擎当然有可能构建它,尽管我似乎找不到任何关于如何从 Javascript 上下文访问此信息的文档。
我非常乐意在 Ruby 中进行分析,尽管我能想到的唯一方法是在Treetop或类似的解析器生成器中编写整个语法。
antlr - ANTLR AST 构建问题
我无法获得 AST
使用以下语法
我想制作一个应该显示单词和运算符的 AST,以便
即我的要求是这样的:
相反,我得到的是:
实际上,我指的是 MultiwordNode 下的 AST(或在“原子”级别生成)
它应该像
(对不起我画的不好:))
问题是,如果运算符不带引号出现,它应该是其兄弟的头部(正如它在 AST 中所指的那样)。但是当它出现在一些带引号的文本中时,它应该像其他词一样被捕获......
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)
可选的重写规则?
compiler-construction - 生成 C/C++ 代码时表达式的关联性和优先级?
我编写了一个生成 AST 的基本编译器,正确考虑了表达式中的运算符优先级。但是,在执行代码生成以生成 C++ 代码时,我不确定如何处理括号的使用。
对于这个表达式:
下面的AST:
应该正确生成包含括号的前一个表达式,但是如果第二个运算符是加法运算符(例如),则括号将是不必要的。我宁愿只在必要时使用它们以提高可读性。
是否有任何规则规定这种行为以及如何知道何时使用括号。加号和减号在大多数语言中具有相同的优先级,我想让所有运算符都可以使用。