abstract-syntax-tree相关内容

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

我想获得 java 和 c 代码的 ast 的 xml 表示.3 个月前,我问了这个问题,但这些解决方案对我来说并不舒服> srcml 似乎是这个问题的一个很好的解决方案,但它不支持行数字和列,但我需要那个功能. 关于 elsa:引用:“正在努力将 Elsa AST 导出为 XML 文档;我们希望能够在下一次公开发布中宣传这一点." dms... 不明白这一点. 特别是对于 Java,有 ..
发布时间:2021-11-26 17:55:04 其他开发

使用 Java 从具有访问者模式的 AST 构建控制流图

我试图弄清楚如何实现我的 LEParserCfgVisitor 类,以便从已经用 JavaCC 生成的抽象语法树构建控制流图.我知道有些工具已经存在,但我正在努力为我的编译器决赛做准备. 我知道我需要一个数据结构来将图形保存在内存中,并且我希望能够在每个节点中保留 IN、OUT、GEN、KILL 等属性,以便能够进行控制流分析稍后. 我的主要问题是我还没有弄清楚如何将不同的块连接在一起 ..
发布时间:2021-11-26 17:54:54 Java开发

如何提取python代码文件中使用的函数?

我想创建一个代码文件中使用的所有函数的列表.例如,如果我们在名为“add_random.py"的文件中有以下代码 ` 将 numpy 导入为 np从 numpy 导入 linalg定义 foo():打印 np.random.rand(4) + np.random.randn(4)打印 linalg.norm(np.random.rand(4)) ` 我想提取以下列表:[numpy. ..
发布时间:2021-11-26 17:54:33 Python

Clang:AST(抽象语法树)是什么样的?

嗨,我是编译器开发的新手,想知道 AST 是什么样的.我有一小段代码,我使用 Clang 来生成 AST.我没有从中得到太多信息.从它的外观来看,语法树与源代码完全相同,除了一个结构体被添加到我测试的几乎所有样本中. 来源: class A {民众:int *a, *b, *c;国际我;无效总和(){a = new int[5];b = 新 int[5];c = 新整数[5];for (i ..
发布时间:2021-11-26 17:54:13 C/C++开发

在 Haskell 中导航和修改基于 Free monad 的 AST

我正在尝试根据我在网上阅读的一些有用文献,使用 Free monad 来构建 AST. 我有一些关于在实践中使用这些类型的 AST 的问题,我已将其归结为以下示例. 假设我的语言允许以下命令: {-# LANGUAGE DeriveFunctor #-}数据命令下一个= DisplayChar Char 下一个|DisplayString 字符串下一个|重复 Int (Free Co ..
发布时间:2021-11-26 17:54:05 其他开发

PHP 中的正则表达式解析器?

我需要在 PHP 中将正则表达式解析为它们的组件.我创建或执行正则表达式没有问题,但我想显示有关正则表达式的信息(例如,列出捕获组,将重复字符附加到其目标,...).整个项目是一个 WordPress 插件,它提供有关重写规则的信息,这些规则是具有替换模式的正则表达式,并且可能难以理解. 我自己写了一个简单的实现,它似乎可以处理简单的我抛出正则表达式并将它们转换为语法树.在我扩展这个例子以支 ..
发布时间:2021-11-26 17:53:40 PHP

使用 Eclipse AST

我最近需要修改一些 Java 代码(添加方法、更改某些字段的签名和删除方法),我认为所有这些都可以通过使用 Eclipse SDK 的 AST 来完成. > 我从一些研究中知道如何解析源文件,但我不知道如何执行上述操作.有谁知道一个好的教程,或者有人可以就如何解决这些问题给我一个简短的解释吗? 非常感谢, 极限编码器 编辑: 我现在开始更多地研究 JCodeModel, ..
发布时间:2021-11-26 17:53:29 Java开发

用 C++ 生成 AST

我正在用 C++ 制作一个解释器,到目前为止我已经有了我的词法分析器来生成标记.问题是我不确定如何生成“遍历"解析树. 我正在考虑使用一组数组来制作我的解析树,但我不确定如何以正确的顺序将标记实际插入到解析树中. 我不确定是自上而下、从左到右还是自下而上、从右到左. 谁能给我一个简单的 LALR(1) 算法? 解决方案 我将在这里违背传统观点,并说您应该使用特定于自然语言 ..
发布时间:2021-11-26 17:53:19 C/C++开发

Python ast到点图

我正在分析由 python 代码生成的“乐趣和利润"的 AST,我想要比“ast.dump"更图形化的东西来实际查看生成的 AST. 理论上已经是一棵树了,所以创建一个图应该不会太难,但是我不明白我该怎么做. ast.walk 似乎走的是 BFS 策略,而visitX 方法我真的看不到父级或者我似乎没有找到创建图形的方法... 好像只能自己写DFS walk函数了,有意义吗? ..
发布时间:2021-11-26 17:52:44 Python

访问 V8 引擎的抽象语法树

对于给定的 JavaScript 代码,是否可以访问 v8 引擎的 AST?我正在使用 V8 引擎开发 JavaScript 静态分析器. 解决方案 这已经很老了,但也许这个答案可以帮助那些偶然发现的人.答案是肯定的,假设您愿意修改 V8 并编译您自己的版本. 如果是这样,那么在 compiler.cc 中您会找到一个在整个 MakeFunctionInfo 中调用 MakeCode ..

用最少的括号漂亮地打印 AST

我正在为 JavaScript AST 实现一个漂亮的打印机,我想问一下是否有人知道一种“正确的"算法,可以根据运算符优先级和 关联性.我在谷歌上没有找到任何有用的材料. 似乎很明显的是,父级具有更高优先级的运算符应该用括号括起来,例如: (x + y) * z//x + y 的优先级较低 但是,也有一些运算符不是关联的,在这种情况下仍然需要括号,例如: x - (y - z)//两个 ..

编译为字节码的动机是什么?

我正在研究我自己的玩具编程语言.现在我正在解释来自 AST 的源语言,我想知道编译为字节码然后解释它可以为我提供什么优势. 现在我想到了三件事: 数百次遍历语法树可能比运行数组中的指令慢,特别是如果数组支持 O(1) 随机访问(即向上和向下跳转 10 条指令). 在类型化执行环境中,我有一些运行时成本,因为我的 AST 是类型化的,而且我一直在遍历它(即,我有 10 种类型的节点,我 ..
发布时间:2021-11-26 17:52:15 其他开发

我们如何获得 TypeScript 的语法树?

是否有获取编译器语法树的过程.我们被分配到一个需要访问 typescript 语法树的项目(它是开源的,所以我们可以看到整个编译器的代码).但我们不知道如何获得它.我一直在互联网上阅读一些文章,但我真的找不到一篇用户友好的文章,或者用雷曼的术语写的.相信有人提到我们需要做的第一步是找到解析步骤.但在那之后,我们不知道接下来要做什么. 对不起,菜鸟问题.:) 解决方案 TypeScri ..

在 C 中表示抽象语法树

我正在用 C 为一种简单的玩具语言实现一个编译器.我有一个工作扫描器和解析器,以及关于 AST 的概念函数/构造的合理背景.我的问题与在 C 中表示 AST 的具体方式有关.我在不同的在线文本/资源中经常遇到三种样式: 每种类型的节点一个结构. 它有一个基节点“类"(结构),它是所有子结构中的第一个字段.基节点包含一个枚举,用于存储节点的类型(常量、二元运算符、赋值等).使用一组宏访问 ..

开发抽象语法树

我在互联网上搜索了一些关于开发 C# 抽象语法树的新手信息,但我只能找到已经“知情"的人的信息.我是一名业务线应用程序开发人员,因此这些主题有点超出我的脑海,但这是为了我自己的教育,所以我愿意花时间学习任何必要的概念. 一般来说,我想了解从代码字符串开发代码的抽象表示背后的技术.更具体地说,我希望能够使用这个 AST 来进行 C# 语法高亮显示.(我意识到语法高亮不需要 AST,但这似乎是学 ..
发布时间:2021-11-26 17:51:40 C#/.NET

Clang AST 解释

我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解 ..
发布时间:2021-11-26 17:51:29 其他开发