首页 > TAG信息列表 > abstract-syntax-tree

从Python到CIL(C中间语言)的翻译

我最近在Python源代码上进行了静态分析. 我们小组中已经有用Ocaml编写的CIL(C中间语言)静态分析器.我们要重用此分析器,因此我们的理想方法是将Python转换为CIL. 当前,我使用Python内置的ast模块将Python解析为Python AST.然后,我将ast.dump打印的Python AST转换为C AST.考虑到C AS

java-如何使用Python生成AST(以XML表示)的控制流?

我有XML格式的AST WHILE语言(http://www.program-analysis.com/while.html).目前,我不处理函数调用或递归.我需要为该程序生成控制流. 一个示例程序(//后面的数字表示解析器生成的标签): begin x:=1; // 1 z:= 2+x; // 2 x := x+z; // 3 y:=z-x+z; // 4 w:=x+y+z

在python中的ast.nodevisitor上进行后顺序遍历

是否可以仅通过操作ast.NodeVisitor.generic_visit()在Python中的ast.NodeVisitor实例上进行后置遍历?我这样做: class ExpParser(ast.NodeVisitor): def generic_visit(self, node): for x in ast.iter_child_nodes(node): ast.NodeVisitor.generic_visit

ast.parse的filename参数的用途是什么?

该文档的内容如下: ast.parse(source, filename='<unknown>', mode='exec') Equivalent to compile(source, filename, mode, ast.PyCF_ONLY_AST). compile(source, filename, mode[, flags[, dont_inherit]]) The filename argument should g

javascript-JS:重命名变量以进行重构(使用AST,而不是文本)

重构代码时,我经常需要重命名变量,目前我正使用正则表达式以某种不明智的方式进行操作-由于缺乏实际的结构,我最终不得不采用愚蠢的文本解决方法,例如,将“ req”重命名为“ request”并避免使用类似“ require”之类的副作用. 考虑一下这些东西:有点像用正则表达式修改DOM:只是行不

AST解析器获取Java类的名称

我正在使用Eclipse的AST解析器来解析独立的Java文件.这是我下面的重写代码,用于获取CompilationUnit(即Java文件)详细信息: @Override public boolean visit(CompilationUnit node) { System.out.println("Compilation unit: " + node.getPackage().getName()); System.out

ast模块使用哪种类型的树遍历?

ast使用哪种类型的树遍历(特别是ast.NodeVisitor())?当我创建一个堆栈并将被遍历的每个节点推入堆栈时,结果似乎是“广度优先”的树遍历.这意味着顺序取决于树中的级别. 例如树看起来像 Module Assign Name Store Call Attribute Str Load

如何在python中处理结构化语言文件

我有一个很大的结构化语言文件,如下所示: TASK SchM_Task { TYPE = AUTO; SCHEDULE = NON; PRIORITY = 160; ACTIVATION = 1; TIMING_PROTECTION = FALSE; AUTOSTART = FALSE; EVENT = SchM_Event; RESOURCE = SystemS_Resource; StackSize =

用变量评估数学表达式. (java 8)

我希望获得有关此问题的答案(Evaluating a math expression given in string form)的其他帮助.@ Boann用户使用非常有趣的算法回答了该问题,他还指出该算法可以更改为接受变量.我设法对其进行了修改,并使它正常工作,但不知道他如何区分编译和评估.这是我的代码: import java.util.H

在Eclipse JDT Java解析器中,是否可以在不使用访问者的情况下逐节点遍历AST节点?

通过Eclipse JDT API访问节点上信息的标准方法是使用Visitor模式.例如: unit.accept(new MyVisitorAdapter<Object>() { @Override public void visit(MethodCallExpr node, Object arg) { System.out.println("found method call: " + node.toString()); } }, null); 在

Python AST中的ExtSlice节点表示什么语法?

我正在遍历Python的ast模块,无法弄清切片的定义: slice = Ellipsis | Slice(expr? lower, expr? upper, expr? step) | ExtSlice(slice* dims) | Index(expr value) 到目前为止,我知道Ellipsis是[…],Slice是通常的[start:end:step]表示法,Ind

用C解析Java源代码

我想在C中创建Java源代码parsing功能.此应用程序的目的是在内部数据结构中生成syntax tree,以便我能够遍历数据树结构并自行分析. 哪些工具可以帮助我实现目标?解决方法:也许ANTLR可以为您提供帮助,但是了解Java程序需要加载该程序中引用的相关类.

Python AST,ast.NodeTransformer,TypeError:stmt中缺少必填字段“ lineno”

我会很感激地学习一些有用的东西,因为到目前为止,我一直在盲目地前进. 所以问题出在python的ast.NodeTransformer中.我想知道是否可以使用这种方法将功能添加到现有类中,而不会发疯. 到目前为止,这就是我的处理方式. import ast, inspect, cla # cla is a name of class to which

使用解析将**运算符更改为幂函数?

我的要求是将**运算符更改为幂函数 例如 1.Input -"B**2" Output - power(B,2) 2."B**2&&T**2*X" Output - power(B,2) 我写了以下正则表达式来解决这个问题 rx=r"([a-zA-Z0-9]+)\*\*([a-zA-Z0-9()]+)" result = regex.sub(rx, r"power(\1,\2)&quo

c – 来自语义动作的boost :: spirit访问位置迭代器

可以说我有这样的代码(行号作为参考): 1: 2:function FuncName_1 { 3: var Var_1 = 3; 4: var Var_2 = 4; 5: ... 我想编写一个语法来解析这样的文本,将所有的标识符(函数和变量名)信息放入一个树(utree?). 每个节点应保留:line_num,column_num和符号值.例: root: FuncNam

java – 忽略带有Test注释的方法的PMD规则

我将PMD用于包含MockMvc个测试的Spring Boot项目.该类强制用户捕获常规异常. class MockMvc { public ResultActions perform(RequestBuilder requestBuilder) throws Exception {} } 使用导致PMD错误 – SignatureDeclareThrowsException.我想取消所有@Test方法的检查.因此

Python AST:如何获取节点的子节点

我正在研究Python 2.6.5. 给定一个抽象语法树,我想获得它的孩子. 我搜索了堆栈溢出但无济于事.大多数帖子都在ast.NodeVisitor上,并在其中定义的方法访问,generic_visit(). 但是AFAIU,visit()和generic_visit()不给我们孩子,而是直接在他们身上递归应用函数 有人可以写一个简短的代

ast.literal_eval for python中的变量?

假设我有一个example.py文件:     导入示例 VVV = 2 DictionaryNameB = { 'a' : VVV, 'bb' : 'SomethingB', 'c' : False, 'ccc' : None,

c – Spirit qi解析为嵌套函数的抽象语法树

我正在尝试使用boost的精神qi解析器创建一个解析器.它正在解析包含三种类型值的字符串.常量,变量或函数.这些函数可以嵌套在一起.测试串是f(a,b)= f(g(z,x),g(x,h(x)),c),其中a-e是常数,f-r是函数,s-z是变量.我成功创建了一个可以正确解析表达式的规则.当我将解析规则的函数更改为g

如何修改Python源代码以添加新的AST节点?

例如,如果我要创建一个名为“Something”的节点,我想在Python AST树中使用,我必须在哪里和哪些更改添加到Python源代码才能做到这一点? 我知道我应该从Python.asdl开始,其中定义了AST语法.然后我应该进入ast.c. 不幸的是,我不确定我必须在ast.c文件中进行更改才能实现节点. 另外,为

在python源代码/脚本中查找依赖项

我在Python中有一堆简单的脚本,带有简单的表达式[1],如: C = A+B D = C * 4 我需要执行它们,但最重要的是我需要知道我依赖的对象是什么;在前一种情况下,对象A和B是外部依赖关系.例如.鉴于我有一个名为source的var中的前代码,我希望能够: deps = { "A" : 1 , "B": 2} exec source

java – 有没有解析器将SQL转换为树(AST)?

我有Postgres的SQL表达式.我想让Abstract syntax tree从Java程序中操作它. 我从代码学校找到sqlite-parser(请找谷歌,请,我没有足够的声誉),但它正处于开发阶段. 那么,你知道可以从Java程序执行的另一个解析器吗?如果有可能,请写几乎稳定的解析器.解决方法:https://github.com/lfitt

c# – 行号的方法名称

给定特定类源代码(Java / C#)的行号 – 是否有一种简单的方法来获取它所属的方法的名称? (如果它在一个内)(推测使用抽象语法树) (这有助于将checkstyle的输出限制为仅触及的方法). 我假设您必须使用抽象语法树来执行Line# – > MethodName.解决方法:(针对Java) 如果使用调试信息编

使用javax.lang.model或ANTLR JavaParser获取有关Java源代码的信息的示例/教程

我想为简单的Java Logic创建一个类似自动流程图的可视化,为此我需要解析Java源代码,我有2个候选者,Java 6000的ANTLR和javax.lang.model.两者都不容易. 我还没有找到一个可以远离我想要实现的工作示例. 我想找到简单的变量声明,赋值和流(if,for,switch,boolean conditions等) 这些

java – JDT:将MethodInvocation替换为另一个时缺少分号

我正在尝试使用Eclipse JDT的AST模型将一个MethodInvocation替换为另一个.举一个简单的例子 – 我试图通过调用System.out.println()来替换对Log.(i / e / d / w)的所有调用.我正在使用ASTVisitor来定位有趣的ASTNode并将其替换为新的MethodInvocation节点.这是代码的概述: class S