发明名称 一种面向过程的高级语言源程序流程图的生成方法
摘要 本发明针对高级语言,基于BNF范式,以编译原理中的LR算法或者其他自底向上的编译算法为驱动,经过语法分析、流程图拼接、结构调整生成对应的流程图。生成的流程图结构美观,对各种逻辑结构都有很好描述,且适用于多种高级语言。<pb pnum="1" />
申请公布号 CN106508009B 申请公布日期 2014.07.02
申请号 CN201010034665.6 申请日期 2010.12.31
申请人 上海机电工程研究所 发明人 殷文雄;周莹莹;郑丹力;丁洁
分类号 G06F9/44(2006.01)I 主分类号 G06F9/44(2006.01)I
代理机构 上海航天局专利中心 31107 代理人 金家山
主权项 一种面向过程的高级语言源程序流程图的生成方法,其特征在于执行下列步骤:(1)输入所述源程序;(2)判断所述源程序是否结束,若判断结果为是,执行步骤(17),若判断结果为否,执行步骤(3);(3)应用LR算法对输入的源程序进行词法分析和语法分析;(4)判断BNF范式是否规约;(5)若步骤(4)判断结果为否,则返回步骤(1);(6)若步骤(4)中判断结果为是,判断BNF范式归约类型,若BNF范式判断结果是逻辑语句、标签语句、复合语句、循环语句、跳转语句、表达式语句类型,执行步骤(7),若BNF范式判断结果是合并类型,执行步骤(12),若BNF范式判断结果是其他类型,执行步骤(15);(7)针对BNF范式中的表达式类型的子范式,创建一个带唯一编号的节点,并设置节点内容为子范式对应的单词组,并设置节点属性;(8)定义所述节点为部件,设置该部件的出口号和入口号为所述节点的编号;(9)依照BNF范式的对应的语句类型,将该部件与已创建的各部件入口和出口建立连线,并设置普通连线或跳转连线属性,最后形成一个新部件,并设置所述新部件的入口号为入口节点的编号,设置所述新部件的出口号为出口节点的编号,建立新部件出口节点与入口节点的对应关系;(10)设置节点宽度,其值为对应部件出口节点的孩子数;(11)返回步骤(1);(12)将待合并的前后两个部件出口和入口建立连线,形成一个新部件,并设置所述新部件的入口号为前一个部件的入口号,设置所述新部件的出口号为后一个部件的出口号;(13)设置所述新部件的入口节点的节点宽度,该数值取合并前的两个部件入口节点的节点宽度的最大值;(14)返回步骤(1);<pb pnum="1" />(15)记录单词;(16)返回步骤(1);(17)设置初始宽度为整个流程图的宽度,设置初始深度为零;(18)按层遍历流程图节点,并判断遍历是否结束;(19)若步骤(18)判断结果为否,执行步骤(20),若步骤(18)判断结果为是,则执行步骤(29);(20)判断当前节点是否是某个部件的出口节点,若判断结果为是,执行步骤(21),若判断结果为否,执行步骤(25);(21)根据先前的对应关系,找到对应入口节点,令出口节点的左右宽度等于该入口节点的左右宽度;(22)判断当前节点的扇出节点是否都遍历过;(23)若步骤(22)的判断结果为是,则执行步骤(26);(24)若步骤(22)的判断结果为否,返回步骤(18);(25)以当前节点的每一个扇出节点的节点宽度为权重,按权重分割当前节点的左右宽度,扇出节点的左右宽度为对应的分割段;(26)计算当前节点的深度,为其所有扇入节点的深度的最大值加一;(27)根据步骤(25)、(26)得到的节点左宽度和右宽度以及节点深度,按以下公式计算各节点绘图的横坐标和纵坐标:横坐标=(左宽度+右宽度)/2纵坐标=深度;(28)返回步骤(18);(29)依照各节点的坐标,绘制流程图节点;(30)判断连线属性是否为跳转连线或者循环连线;(31)若步骤(30)判断结果为是,则取连线起始节点的左右范围和结尾节点的左右范围的最大值,在该最大左右范围的限定下绘制跳转或者循环连线;(32)若步骤(30)判断结果为否,则以直角连线的方式连线起始节点和结尾节点;(33)若节点未全部绘制,则返回步骤(29);(34)若所有节点绘制完成,则绘图结束。<pb pnum="2" />
地址 201109 上海市闵行区元江路3888号
您可能感兴趣的专利