abstract-syntax-tree相关内容

如何检索python代码的控制流图?

我想转储给定 python 代码的控制流图,类似于 gcc 编译器选项给出的选项:-fdump-tree-cfg for c 代码. 我成功获得了python代码的AST(抽象语法树),但是从 AST 阶段获取控制流图看起来相当复杂和麻烦. 有没有更简单的方法可以直接检索python代码的控制流图?有什么建议吗? 哦,顺便说一下,我使用的是 python3.5 谢谢大家! ..
发布时间:2021-11-26 18:01:54 Python

如何在`GCC`中获取`c`程序的抽象语法树

如何在gcc中获取c程序的抽象语法树? 我正在尝试将 OpenMP pragma 自动插入到输入 c 程序中. 我需要分析嵌套的 for 循环以查找依赖项,以便我可以插入适当的 OpenMP 编译指示. 所以基本上我想做的就是遍历分析输入c程序的抽象语法树. 我如何实现这一目标? 解决方案 您需要完整的数据流才能找到“依赖项".然后您将需要实际插入 OpenMP 调用. 您想 ..
发布时间:2021-11-26 18:01:46 其他开发

来自 ANTLR 解析树的 Python AST?

我发现了一个 ANTLRv4 Python3 语法,但它生成了一个解析树,它通常有许多无用的节点. 我正在寻找一个已知的包来从该解析树中获取 Python AST. 这样的东西存在吗? 编辑:关于使用 Python ast 包的说明:我的项目使用 Java,我需要解析 Python 文件. 编辑 2:“AST"是指 http://docs.python.org/2/libr ..
发布时间:2021-11-26 18:01:37 Python

Eclipse JDT ASTParser 错误地转换枚举声明节点

我正在使用 JDT 分析 Java 代码,并将构建一个独立的分析工具,该工具依赖于 org.eclipse.jdt.core 包而不是 eclipse 插件.但是我发现我的工具在 Java 代码中出现的枚举声明节点上无法正常工作.在我由 jdt 创建的 AST 中,关键字 enum 被视为类型名而不是枚举声明.所以我想知道我应该如何确保我的工具可以正确处理枚举声明. 我使用的 jdt 包是“ ..
发布时间:2021-11-26 18:01:28 Java开发

用于代码分析的 Java 库

是否有任何 Java 库可以帮助从指定的 Java 源文件构建 AST反之亦然(从 ASTree 对象生成代码)?我需要像 this 之类的东西,但是有一个 API,允许访问以编程方式生成树. 解决方案 Eclipse 核心中已经提供了一切.这里有一个页面,其中包含一个小示例,说明如何使用 org.eclipse.jdt.core.dom.ASTParser 创建所需的 AST 数据结构. ..
发布时间:2021-11-26 18:01:20 Java开发

如何仅从 clang AST 获取函数声明?

我想为我的 C 程序使用 AST,并希望以 json 格式表示.为此,我使用了 clang -Xclang -ast-dump=json -fSyntax-only main.c 命令.它给了一个AST.但是 AST 包含 typeDecl、Value 声明 等以及 function 声明. 我只需要一个函数声明,以 JSON 形式形成我的代码.怎样才能做到这一点? 这是一个替代的 c ..
发布时间:2021-11-26 18:01:09 其他开发

更新不可变 AST 的最简单方法是什么?

在使用宏时,我已经到了需要更新 AST 中满足特定条件的节点的地步(我一直在努力避免它).例如,假设我想更新每个节点: 文字(常量(1)) 值: 文字(常量(2)) 那些 AST 节点可以位于表达式树中的任何位置,因此我无法使用临时模式匹配器.显然,我最不想做的事情是编写一个能够覆盖所有编译器原语的完整模式匹配器.我一直在搜索 API 但我的印象是,collect 和 traversabl ..
发布时间:2021-11-26 18:00:58 其他开发

Java静态元编程

我想实现一个注解处理器,它会根据现有的“原型"类生成新的类. import java.util.List@MyAnnotation类 MySuperClassPrototype {静态 MySuperClassPrototype createInstance() {返回新的 MySuperClassPrototype();}} 由于下面的代码.将生成如下新的源文件(编译单元): import ..
发布时间:2021-11-26 18:00:20 Java开发

使用 neo4j 对有序树建模

我刚刚开始使用 neo4j,我了解图形和关系的原理,但是我在想要建模的某些结构上遇到了一些麻烦.我想在编程语言项目中使用它,并存储解析源文件的 AST.从那里开始,我计划向节点添加大量额外数据和关系以帮助分析和工具,但基础 AST 仍然有点困难. 制作树的天真的方法是简单地遍历 AST 并将树中的每个节点复制到 neo4j 中的节点,使用属性来跟踪令牌数据等,然后使用 CHILD 关系指向子 ..
发布时间:2021-11-26 18:00:08 其他开发

将节点插入抽象语法树

ast 模块的文档 解释了如何替换 AST 中的节点使用 NodeTransformer 类,但没有解释如何插入树中的一个新节点. 例如,给定这个模块: import foo进口酒吧类巴兹(对象):定义垃圾邮件(自我):经过 我想添加另一个导入,并在 Baz 上设置一个类变量. 如何创建这些节点并将其插入到 AST 中? 解决方案 Python AST 本质上是由嵌套列表组 ..
发布时间:2021-11-26 17:59:59 Python

从 Ruby 块中提取 AST

是否可以从 Ruby 本身获取块的 AST? 我已经查看了 ParseTree 和 ruby​​_parser,但它们似乎都对 Ruby 1.9.2 提供了粗略的支持(根据我读过的内容).我需要一些与 1.9.2 兼容的东西. 解决方案 开箱即用的 Ripper 包含在 MRI 1.9 中. ruby-1.9.2-p180 :004 >需要“开膛手"=>真的ruby-1.9.2-p ..
发布时间:2021-11-26 17:59:51 其他开发

将 Scala AST 转换为源代码

给定一个 Scala AST,有没有办法生成 Scala 源代码? 我正在研究通过解析/分析其他 Scala 源来自动生成 Scala 源的方法.任何提示将不胜感激! 解决方案 我已经成功地使用了 Mirko Stocker 的 Scala-Refactoring这个任务. 对于综合构建 AST,它强烈依赖于现有的 Tree DSL. 虽然代码有点乱,但你可以在我的项目S ..
发布时间:2021-11-26 17:59:43 其他开发

使用 clang AST 解析器忽略丢失的标头

我在 Windows 上,使用 MSVC 编译我的项目,但我需要 clang 来使用它整洁的 AST 解析器,它允许我编写一个小代码生成器. 问题是,clang 无法解析 MSVC 标头(一个众所周知且易于理解的问题). 我尝试了两个选项: 我包含了 MSVC 标头文件夹,解析包含在我的代码中的内置标头最终会在某个时候导致致命错误,从而阻止我正确解析我想要的部分. 我之前所做的只是 ..
发布时间:2021-11-26 17:59:33 C/C++开发

我如何访问 v8 解析树怎么做?

我喜欢使用 v8 引擎并将其代码转换为其他编程语言基于 this 例如,如果我理解正确,第一步我需要得到解析树 我的问题是:我可以从 v8 中获取它还是需要从 js 代码中生成它.什么是更简单的方法? 解决方案 从 V8 本身获得 AST(注释语法树,解析树)看起来很难,但有很多其他 JavaScript 解析器可以做你想做的事正在寻找.我建议看看 Esprima (http://e ..
发布时间:2021-11-26 17:59:26 其他开发

如何手动构建 AST?

我目前正在学习解析,但我对如何生成 AST 有点困惑.我编写了一个解析器,可以正确验证表达式是否符合语法(当表达式符合时它是静默的,如果不符合则引发异常).我从哪里开始构建 AST?我找到了大量有关构建 LL(1) 解析器的信息,但关于构建 AST 的信息却很少. 我当前的代码(用非常简单的 Ruby 编写,包括词法分析器和解析器)可在 github 上找到:https://gist.git ..
发布时间:2021-11-26 17:59:19 其他开发

未解析的 AST <O(exp(n))?

抽象问题描述: 在我看来,解析意味着从 AST 创建一个令牌流,当再次解析时会产生一个相等的 AST. 所以 parse(unparse(AST)) = AST 成立. 这等同于找到一个有效的解析树,它会产生相同的 AST. 该语言由 无上下文 S-attributed 语法使用 eBNF 变体. 因此,解析器必须通过所有语法约束都存在的遍历节点找到有效的“路径".这 ..