Questions tagged «abstract-syntax-tree»

6
使用python的eval()与ast.literal_eval()?
我遇到了一些代码,eval()将其作为一种可能的解决方案。现在,我以前从未使用eval()过,但是,我遇到了很多有关它可能引起的潜在危险的信息。也就是说,我对使用它非常谨慎。 我的情况是我有一个用户输入: datamap = raw_input('Provide some data here: ') 哪里datamap需要一本字典。我四处搜寻,发现eval()可以解决这个问题。我认为我可以在尝试使用数据之前检查输入的类型,这将是可行的安全预防措施。 datamap = eval(raw_input('Provide some data here: ') if not isinstance(datamap, dict): return 我通读了文档,但仍不清楚这是否安全。eval是否在输入数据后或datamap调用变量后立即评估数据? 该ast模块是.literal_eval()唯一安全的选择吗?

11
解析一个.py文件,读取AST,对其进行修改,然后写回修改后的源代码
我想以编程方式编辑python源代码。基本上,我想读取一个.py文件,生成AST,然后写回修改后的python源代码(即另一个.py文件)。 有多种方法可以使用标准python模块(例如ast或)来解析/编译python源代码compiler。但是,我认为它们都不支持修改源代码(例如删除此函数声明)然后写回修改后的python源代码的方法。 更新:我要这样做的原因是我想为python 编写一个Mutation测试库,主要是通过删除语句/表达式,重新运行测试并查看中断。

6
我可以对代码执行哪种模式以使其更容易转换为另一种编程语言?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 我正着手做一个副项目,目标是将代码从一种编程语言转换为另一种编程语言。我开始使用的语言是PHP和Python(Python到PHP应该更容易入手),但理想情况下,我可以(相对)轻松地添加其他语言。该计划是: 这是针对Web开发的。原始代码和目标代码将位于框架的顶部(我也将不得不编写这些框架)。这些框架将包含MVC设计模式并遵循严格的编码约定。这应该使翻译更加容易。 我还在研究IOC和依赖项注入,因为它们可能使翻译过程更容易且更不易出错。 我将使用Python的解析器模块,该模块可让我摆弄抽象语法树。显然,我可以用PHP获得的最接近的是token_get_all(),这是一个开始。 从那时起,我可以构建AST,符号表和控制流程。 然后,我相信我可以开始输出代码了。我不需要完美的翻译。我仍然需要查看生成的代码并解决问题。理想情况下,翻译人员应标记有问题的翻译。 在您问“这到底是什么意思?”之前 答案是……这将是一次有趣的学习经历。如果您对如何减少这种麻烦有任何见解,请告诉我。 编辑: 我更想知道我可以对代码强制执行哪种类型的模式,而不是如何进行翻译,从而使代码的翻译(即:IoC,SOA?)更容易。


9
抽象语法树和具体语法树有什么区别?
我一直在阅读一些口译/编译器的工作方式,而令我感到困惑的一个方面是AST和CST之间的区别。我的理解是,解析器生成CST,然后将其交给语义分析器,后者将其转换为AST。但是,我的理解是语义分析器只是确保遵守规则。我真的不明白为什么它会进行任何更改以使其抽象而不是具体。 关于语义分析器,我是否缺少某些东西,或者AST和CST之间的区别有些人为?

3
如何构造抽象语法树
我对AST是什么有一个大致的了解,但是我想知道如何构造一个。 如果获得语法和分析树,该如何构建AST? 如果得到语法和表达方式,该怎么办?

3
如何使用ANTLR4创建AST?
我一直在搜索很多有关此信息,但找不到任何能真正帮助我构建AST的有用信息。我已经知道ANTLR4不会像以前的ANTLR3那样构建AST。每个人都说:“嘿,请使用访客!”,但是我找不到任何示例或有关如何执行此操作的详细说明... 我的语法必须像C,但是每个命令都用葡萄牙语(葡萄牙语编程语言)编写。我可以使用ANTLR4轻松生成解析树。我的问题是:创建AST现在需要做什么? 顺便说一句,我正在使用Java和IntelliJ ... EDIT1:我能得到的最接近的答案是该主题:是否有一个简单的示例使用antlr4从Java源代码创建AST并提取方法,变量和注释? 但是它只打印访问方法的名称。 由于第一次尝试对我不起作用,所以我尝试使用ANTLR3的本教程,但我不知道如何使用StringTamplate而不是ST ... 阅读《权威ANTLR 4参考》一书,我也找不到与AST相关的任何内容。 EDIT2:现在我有一个类来创建DOT文件,我只需要弄清楚如何正确使用访问者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.