如何使用AST生成程序的控制流图 对一个有结构化编程特性的编程语言而言,抽象语法树(AST)与“流分析”(flow analysis)不够兼容的地方在于:这些编程语言会有分支、循环、跳转(break/continue,或者像C#那样受限的goto)、异常处理等语法结构,它们隐含了不连续的控制流;而AST的结构虽然已经省略了一些语法细节,但仍然贴近语言的语法,所以AST里控制流往往是隐含在上述语法结构对应的节点里。更糟糕的是,这些编程语言中许多都有条件表达式(典型的是?三元运算符)以及带有短路求值语义的逻辑运算表达式(典型的是&、|二元运算符),这些“表达式”内也隐含控制流,更是藏得深。所以正统做法推荐的是在做数据流分析之前,先把AST转换为一种更细粒度的、把控制流显式暴露出来的中间表示(IR)。虎书教的做法正是如此,第7章介绍从AST生成IR,第8章介绍了IR里的控制流与基本块。前面@vczh 和@陈炜 的回答都提到了这一点。邵成 的回答提到龙书第8~9章,我觉得把第6章(特别是6.6 Control Flow)也包括进来更好。对数据流分析来说,IR无论是树形、DAG还是线性形式都没关系,只要控制流和数据依赖易于分析就好。SSA形式的IR可以把两者都显式暴露出来,特别是use-def关系(并且有些IR会额外维护defSourceInsight集成圈复杂度检测工具 SourceMonitor可以为C++、C、C#、Java、Delphi、Visual Basic和HTML的源代码文件测试代码数量和性能。最终结果可以描绘成图、输出打印。直接百度或Google搜索SourceMonitor数据流图和系统流程图的区别和联系? 数据流程图是以图形的方式表达在问题中信息的变换和传递过程。它把系统看成是由数据流联系的各种概念的组合,用分解及抽象手段来控制需求分析的复杂性,采用分层的数据流程图来表示一个复杂的系统。很多资料上,数据流程图也叫数据流图,都指DFD:DataFlowDiagram。需要注意的是数据流图和程序设计中的程序流程图(FlowChat)是不同的,数据流图关心的是企业业务系统中的数据处理加工的客观过程,并不关心未来电子化处理的加工过程;数据流图中流动的只是数据,并没有控制过程,但在程序流程图当中,必须有控制逻辑。结构化分析是面向数据流开展需求分析工作的一种有效方法。一般采用自顶向下,逐层分解的演义分析法来定义系统的需求,即先把分析对象抽象成一个系统,然后自顶向下的逐层分解,将复杂的系统分解成简单的、能够清楚地被理解和表达的若干个子系统,如图1(逐层分解的数据流程图)所示。这样就可以分别理解系统的每个细节、前后顺序和相互关系,找出各部分之间的数据接口。在结构化分析方法所采用的工具有数据流程图(DFD)、数据字典(DD)、结构化语言、判定树、判定表等。数据字典(Datadictionary)是一种用户可以访问的记录数据库和应用程序元数据的目录。如何使用AST生成程序的控制流图(CFG)? 很明显题主是在做一个PHP的漏洞分析工具,https:// github.com/OneSourceCat /phpvulhunter 然后题主介绍它的文章: 使用PHP-Parser生成AST抽象语法树 浅谈PHP自动化代码审计数据流图和程序流程图有什么区别?分别用什么工具来了绘制? 数据流图是业务分析用的,主要在分析阶段,经过变换型(事务性)分析可以转换为概要设计,程序流程图和N-S框图一样是用作详细设计的。数据流图没有控制结构,基本是一种静态结构,没有语法控制。程序流程图是动态的程序状态的描述。数据流图,程序结构图和系统结构图的区别和联系 1.数据流图(Data Flow Diagram),简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。它是描绘信息流和数据从输入移动到输出的过程中所经受的变换。其主要元素有:→:数据流□:数据源(终点)○:对数据的加工(处理)〓:数据存储2.系统流程图(System Flowchart)是描绘系统物理模型的传统工具。它的基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文件、数据库、表格、人工过程等),表达信息在各个部件之间流动的情况,而不是表示对信息进行加工处理的控制过程。系统流程图:反应主体框架数据流程图:反应数据走向 它不考虑时序关系,是业务分析用的,用作详细设计。图中的有向线段表示了数据流程序流程图:程序逻辑 描述程序中控制流的情况,即程序中处理的执行顺序和执行序列所依赖的条件,图中的有向线段表示的是控制流,从一个处理走到下一个处理系统结构图:反映的是系统中模块的调用关系和层次关系,谁调用谁,有一个先后次序(时序)关系。图中的有向线段表示调用时程序的控制从调用模块移到被调用模块,“数据流图”“系统流程图”“程序流程图”“数据流程图”这四个有什么区别? 1.数据流图(Data Flow Diagram);坚持更DFD,它从数据的传递和加工角度,以图形方式来表达系统的逻辑功能,数据在系统内部的逻辑流向和逻辑交换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示放大。它是描绘信息流和数据从输入移动到输出的过程中所经受的变换。数据流图的基本元素:2.系统流程图(System Flowchart);描绘系统物理模型的传统工具。他的基本思想是用图形符号以黑盒子的形式描绘系统理念的每个部件包括程序,文件,数据库,表格,人工过程等,表达信息在给个部件之间流动的情况,而不是表示对信息进行加工处理的控制过程。例图:3.程序流程图;4.程序的系统结构图。数据流程图:反应输就走向,它不考虑时序关系,主要用于业务分析,用作详细设计。途中的有向线段表示了数据流。系统流程图:反应主体框架。程序流程图:程序逻辑描述程序中控制流的情况,即程序中处理的执行顺序和执行序列所以来的条件,途中的有向线段表示的是控制流从一个处理走到下一个处理。程序的系统结构图:反应的是系统中模块的调用关系和层次关系,谁调用谁有一个先后次序关系。途中的有向线段表示调用时程序的控制从调用模块一道被调用模块,并软件工程数据流图的画法,系统流程图是在系统分析员在做系统构架阶段,或者说,在接触实际系统时,对未来构建的信息处理系统的一种描述。这种描述是相对简单且完全的,涉及什么是白盒测试 白盒测试的优缺点 白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖
随机阅读
- 七彩阳光海鲜大酒店 海南岛有什么好玩的地方啊?
- 普通医院升降病床结构? 医院的升降装置
- 国土局的职能职责? 县级国土资源局地勘股工作职责
- 求分享网盘楚乔传主题曲由张碧晨和赵丽颖演唱的《望》mp3,麻烦直接给 张碧晨和赵丽颖演唱会
- wp10开发者预览版怎么安装 win10预览版怎么安装,win10预览版安装图文教程
- justin bieber永不言败 Justin Bieber永不言败里38分14秒里演唱的那首共同分母的原调的歌名叫什么?
- 各种机床上主运动与进给运动的个数? 车床的主运动单位
- 键盘输入数学指数 求一道C语言题目问题是:从键盘输入一个数字字符,要求改用数值形式输出,字符0的ascii的值为48
- 湖北京山永兴镇杨河村黎克军 江苏万载港到阳泉的公里有多少公里
- 厌氧氨氧化细菌的血红素c指标 硫化氨有什么特性
- 最近听到一个词,叫 房价对家庭收入比
- 濮阳7月14号天气预报 濮阳市天气预报
- 上海师范大学是几本啊 为什么好多人说二本 上海师范大学是二本吗
- 水泵由于水冲击产生声音 水泵产生气浊的原因是什么
- 乙醇制氯乙烷的条件 乙醇怎样制取一氯乙烷
- 课题结题专家评审会怎么开 课题研究结题后,所有的参研人员在评职称时,分值是否一样
- 毛孩子粤语怎么说 “不必时时怀念我,也不要指望我回来,我离开以后,你们就是我,人民万岁!”出处是哪里?
- 武林群侠传bug
- “以战养战”是什么意思? 以战养战以华制华
- 海南省人力资源局 海南省人力资源社保查询