【发布时间】:2013-02-26 10:51:30
【问题描述】:
在给定抽象语法树的情况下,我被要求编写一个程序来构建输入程序代码的数据流图。我在网上搜索了数据流图的定义,发现在一个代码段的数据流分析中发生了很多事情。我想知道要为给定代码构建数据流图,我到底要画什么。很感谢任何形式的帮助!
【问题讨论】:
标签: compiler-construction abstract-syntax-tree dataflow-diagram
在给定抽象语法树的情况下,我被要求编写一个程序来构建输入程序代码的数据流图。我在网上搜索了数据流图的定义,发现在一个代码段的数据流分析中发生了很多事情。我想知道要为给定代码构建数据流图,我到底要画什么。很感谢任何形式的帮助!
【问题讨论】:
标签: compiler-construction abstract-syntax-tree dataflow-diagram
给定一个 AST,要生成数据流图,您必须:
建立符号表,以便使用的每个标识符都映射到其显式或隐式定义的类型,还允许您将一个范围内的标识符与另一个范围内的相同标识符区分开来
构造一个control flow graph,显示程序代码的执行顺序和条件分支。 (在函数之间构建调用图的奖励积分!)
确定数据如何沿控制流图流动,通常使用某种data flow analysis framework,建立对变量生命周期的引用,并将所有这些内容捕获为图表。
您可以使用某种外部图形绘制包绘制最终的图形。
所有这些步骤都非常复杂,并且可能比您想象的要多得多。我觉得你在这里没有太多背景。您可以通过学习标准编译器文本(Aho/Sethi/Ullman “Compilers”)获得该背景,该文本非常经典且非常好。但是您需要在开始之前这样做,否则您将无法真正理解这些步骤并且它们相互关联。
【讨论】: