用同一规则由扩充树形结构图 生成多种汇编源程序的装置 本申请发明涉及一种计算机和微型计算机软件开发用的CASE(ComputerAided Software Engineering,计算机辅助软件工程)工具,尤其涉及一种由结构化宏语言和树形结构图自动生成汇编语言或带转移命令的程序语言的源程序用的装置。
图1示出现有树形结构图的一种即PAD图(Problem Analysis Diagram问题分析图)的记述例。另外,以下本申请发明说明书约定,图通常指树形结构图,一览表指源程序行,而条件1、条件2等则表示汇编语言中用于条件判断的标志状态。
图1的PAD图由11个框300、302、304、306、308、310、312、314、316、318和320组成。PAD图的执行顺序由上往下,具体处理的算法记述在一连串框中。
PAD图中,与条件判断、重复循环等程序结构相对应定义有专用框。图1示出的例子中框306和312为这种例。这些结构中的源程序行是在该框的右侧框分层次记述的。具体来说,框306的内容由框310、312、314、316和318记述,框312的内容由框320记述。
PAD图的执行顺序由上往下,循环、转移结构出现时,记述于该结构右侧的一系列框再次从上往下执行。而且,一系列框执行完毕的话,便回到原处,接着再往下执行该结构。接下来到达图的最下边,便结束执行。
图2是现有PAD图中的if then else(条件判断分支)结构的记述例。以下说明PAD图。而且,从图2起(包括图2),图的右下部分示出各结构图式文件地内部存储形式。
参照图2,if then else结构的框中记述条件1,条件1为真,便执行图B,条件1为伪,便执行图C之后再下移执行程序。图2中,条件1框的上下记述“真”、“伪”,此缺省陈述表示,上侧条件1=真、下侧条件1=伪时执行。因而,实际上该记述未在图上进行。
图3(A)所示结构的时候,对于条件1=真的场合执行图B,条件1=伪的场合什么都不执行。图3(B)的时候,条件1=真的场合什么都不执行,条件1=伪的场合执行树形结构图C。
图3(A)(B)两种场合,if then(条件判断)结构执行完毕的话,便接下去执行程序。
图4是repeat until(条件重复)结构的记述例。在此结构中,首先执行图B,然后就条件1判断其真伪。条件1=伪的话便再度执行树形结构图B,条件1=真的话便结束repeat until结构,接下去执行程序。
图5是条件循环(do while)结构的记述例。图5示出(A)和(B)两种记述例。这两种记述例不同之处仅在于框表现方法的不同,在该结构框的左侧加入纵线,或在右侧加入纵线,实际程序执行顺序并没有不同。do while结构首先对条件2的真伪进行判断。条件2=真的话,便执行树形结构图B,再回到前面对条件2进行判断。条件2=伪的时候,便结束do while结构,不执行树形结构图B,接下去执行程序。图5与图4不同之处在于,图4中必定首先至少执行一次树形结构图B,而图5还可能存在完全不执行树形结构图B的情况。
图6是N+1/2结构的记述例。该结构包含从循环内中途转移。该结构首先执行树形结构图B,然后判断条件1的真伪。这里,条件1=真的话,便结束N+1/2结构,条件1=伪的话,便执行树形结构图C,再返回执行树形结构图B。N+1/2结构结束的话,便接下去执行程序。
图7是转移结构的记述例。该结构无条件地转移至程序内的标记A。
图8是标记结构。该结构定义表示程序中位置的标记名。
图9是顺序处理结构的记述侧。该结构用于记述伴随条件判断和转移等的处理。
以上,通常的树形结构图中,转移结构、循环结构按图解表现,这些转移、循环图解用的框中仅记述判断条件。
但汇编语言常常有这样的情况,采用条件判断及其判断结果的转移命令处于远离源程序的位置,涉及多行。因此,在如同现有树形结构只允许框中仅仅记述判断条件时,执意用汇编语言记述树形结构图的话,存在明显不自然这种问题。
另一方面,汇编语言就其固有问题而言,存在如下问题。FORTRAN、C、BASIC、PASCAL、COBOL等语言中,语法和记述法均经过标准化和结构化。因此,从树形结构生成这些语言的源程序一览表如果采用各语言对应的专用算法的话,便可以相对简单地进行。但微机(微型计算机)开发中所采用的汇编语言因CPU种类不同,记述方法和命令种类千差万别,并非统一的语言体系。CPU便件各不相同,因而大多存在无法共用的命令、标志或寄存器等。因此,要用树形结构表现应由微型计算机执行的程序时,就不得不采用因CPU而有所不同的表达。因此,存在的问题是,为了从这种树形结构图自动生成汇编语言的源程序一览表,需要制作各CPU专用的源程序自动生成处理系统,不能说很有效。
此外,用于微机开发的汇编语言,若有具备互补条件判断命令中双方的汇编语言体系,也就有只具备其中之一的汇编语言。这些是因CPU种类不同而千差万别的。因此,不管这种CPU的差异从树形结构图自动生成源程序一览表是困难的,需要各CPU专用的处理系统。即使从这点来看,以往要生成汇编语言的源程序也不够有效。
为了从汇编语言记述的树形结构图自动生成汇编源程序,必须如上文所述就每一CPU设计汇编源程序自动生成处理系统。因此,即便是相同处理,也必须重新设计别的汇编源程序自动生成处理系统,这点也不是很有效的。
此外,有时CPU准备有四种转移命令,即可在全地址空间内转移的命令(称为LONG JUMP长转移命令)和只可以在程序计数器前后128字节内转移的命令(称为SHORT JUMP短转移命令)。一般SHORT JUMP命令与LONG JUMP命令相比,字节数少、执行也迅速。此外,还有程序规模较小这种优点。因而,区分这些命令的汇编语言,其程序规模较小,执行也得到改善。
但现有树形结构图没有与汇编语言相对应表达这种区分转移命令的方法,因而从树形结构图自动生成这种区别命令的汇编语言的源程序一览表极为困难。作为一例这种装置,例如可考虑到制作一处理系统,根据源程序命令字节数自动判断LONG JUMP命令和SHORT JUMP命令。但存在的问题是,如前文所述,按每一CPU制作进行这种区别的处理系统不够有效,实际上无法采用。
此外,一般自动生成源程序时,大多在自动生成的算法上源程序一览表中重复生成有标记。象这样重复生成有标记的话,就有程序规模变大,而且程序难以理解这种问题。
因此,本发明的目的在于提供一种不论CPU种类,都可根据相同树形结构图制作各种CPU用汇编语言所对应的汇编语言源程序的装置。
本发明另一目的还在于提供一种不论汇编语言命令体系中包括互补条件判断命令两者还是只包括其中之一,都可根据相同树形结构图制作各种CPU用汇编语言所对应的源程序的装置。
本发明又一目的在于提供一种可以用准备有LONG JUMP命令和SHORTJUMP命令的汇编语言,有效活用这些命令,并与各种汇编语言相对应从相同树形结构图生成源程序的装置。
本发明再一目的在于提供一种所生成的源程序中可设法避免重复的标记,从而源程序一览表变得容易理解的源程序生成装置。
本申请发明的装置是一种基于一扩充使得与分支有关的框中允许记述源程序行并且与分支有关的各个框中允许记述相应的判断条件的扩充树形结构图,生成任意汇编语言的源程序用的装置。扩充树形结构图扩充为与分支有关的框中允许记述源程序行,并且与分支有关的各个框中允许记述相对应的判断条件。该装置包括:存储按不同汇编语言间共同约定的格式记述有目标汇编语言命令记述形式的表格用的存储器,以及生成汇编语言源程序用的模块。该模块基于扩充树形结构图,按与汇编语言种类独立的规定变换顺序生成汇编语言源程序。用于生成的模块,在由某个框生成源程序的过程中,参照表格内命令的记述形式,并根据相应框内的源程序行记述和判断条件的记述,生成适合目标汇编语言的命令。
根据该装置,按不汇编语言间共同制定的格式使目标汇编语言命令的记述形式表格化。而且,按与汇编语言种类独立的规定变换顺序由扩充树形结构图生成汇编语言源程序。这时是参照所述表格的,因而可按适合不同汇编语言的形式生成源程序。可通过维护表格,由相同扩充树形结构图,并利用共同的源生成规则生成适合不同CPU所对应的各种汇编语言的源程序。
本发明的一个方面,表格还记述有目标汇编语言中互补条件判断命令间的关系。所包含的用于生成的模块,在由记述有分支的框生成源程序过程中,参照表格内分支命令的记述形式和互补条件判断命令间的关系,并根据相应框内的源程序行记述和判断条件的记述,通过确定可利用的分支命令,生成适合成为目标的汇编语言的分支命令。
不同CPU所对应的不同汇编语言体系中,不存在互补条件判断命令中的一方时,也可以通过参照表格查找出替代的条件判断命令。因此,汇编语言体系不论是不具备互补条件判断命令中的一方,还是双方兼备,都可以从相同的扩充树形结构图,利用共同的源程序生成规则,生成汇编语言源程序。
按照本发明的另一方面,汇编语言源程序生成装置通过允许与分支命令有关的框中记述LONG JUMP命令与SHORT JUMP命令的区别,并允许与分支命令有关的框中记述源程序行,从而可以就不同的汇编语言按共同的格式记述,基于这样扩充的树形结构图,来生成任意汇编语言的源程序。该装置包括一存储按不同汇编语言间共同制定的格式记述有成为目标的汇编语言命令记述形式的表格用的存储器。表格分别按不同的记述形式存储LONG JUMP命令和SHORT JUMP命令。所述装置还包括基于树形结构图,按与汇编语言种类独立和区别LONGJUMP命令与SHORT JUMP命令的规定变换顺序,生成汇编语言源程序用的模块。用于生成的模块,从某一框生成源程序过程中,参照表格内命令的记述形式,并根据相应框内的源程序行记述和同LONG JUMP命令与SHORT JUMP命令区别有关的记述,生成适合目标汇编语言的命令。
与不同CPU相对应,有区别LONG JUMP命令与SHORT JUMP命令汇编语言体系和不区别这些命令的汇编语言体系。这些区别反映在表格上。按照本发明,可由扩充树形结构图记述LONG JUMP命令与SHORT JUMP命令的区别。因此,应区别LONG JUMP命令和SHORT JUMP命令时,可通过参照表格,加以区别后采用,以生成适当的源程序。这些命令无区别的汇编语言体系,可以参照表格查找出适当的替代命令。汇编语言不论是否区别LONG JUMP命令和SHORTJUMP命令,都可以相同树形结构图利用共同的源生成规则生成源程序。
本申请发明另一方面,汇编源程序生成装置基于一扩充成允许与条件判断有关的框中记述源程序行,并且允许各个框中记述针对与条件判断有关的框的判断条件的树形结构图,生成任意汇编语言的源程序。该装置包括:存储按不同汇编语言间共同制定的格式记述有目标汇编语言命令记述形式的表格用的存储器,以及基于树形结构图,按照与汇编语言种类独立的规定变换顺序生成汇编语言源程序用的模块。用于生成的模块,在从某一框生成源程序过程中,有时源程序中生成标记行。该装置还包括:检测生成用装置在源程序中实际上连续生成的多个标记用的连续标记检测模块,以及在连续标记检测模块检测出的连续生成的多个标记当中,保留某个(例如最后一个)标记,删除其他标记用的标记删除模块。
从扩充树形结构生成汇编语言源程序的过程中,有时因自动生成而实际上连续生成多个标记。但在检出的连续标记当中保留特定的标记(例如最后的),将其它标记删除。由此最终生成的源程序一览表变得简明,其理解也容易。
按照本申请发明的又一方面,存储于可机械读出的存储媒体中的可机械执行的程序,基于一扩充成允许与分支有关的框中记述源程序行,并且允许与分支有关的各个框中记述相应判断条件的扩充树形结构图,生成任意汇编语言的源程序。扩充树形结构图扩充为允许与分支有关的框中记述源程序行,并且允许与分支有关的各个框中记述相应的判断条件。该程序包括:按不同汇编间共同制定的格式记述有目标汇编语言命令记述形式的表格,以及生成汇编语言源程序用的模块。用于生成的模块,基于扩充树形结构图,按照与汇编语言种类独立的规定变换顺序生成汇编语言的源程序。用于生成的模块,在从某个框生成源程序过程中,参照存储器模块所存储的表格内的命令记述形式,并且根据相应框内的源程序行记述和判断条件的记述,生成适合目标汇编语言的命令。
按照本申请发明又一方面,存储于可机械读出的记录媒体的可机械执行的程序,通过允许与分支命令有关的框中记述LONG JUMP命令与SHORT JUMP命令的区别,并允许与分支有关的框中记述源程序行,从而对不同的汇编语言可用共同的格式记述,基于这样扩充的树形结构图,生成任意汇编语言的源程序。该程序包括按不同汇编语言间共同制定的格式记述有成为目标的汇编语言的命令记述形式的表格。该表格将LONG命令和SHORT命令分开存储。该程序还包括一基于树形结构图,并按照区别LONG JUMP命令与SHORT JUMP命令的规定变换顺序生成汇编语言源程序用的模块。用于生成的模块,在从某个框生成源程序过程中,参照表格内的命令记述形式,并根据相应框内的源程序行记述和同LONG JUMP命令与SHORT JUMP命令的区别有关的记述,生成适合目标汇编语言的命令。
按照本申请发明再一方面,存储于可机械读出的记录媒体的可机械执行的程序,基于扩充成允许与条件判断有关的框中记述源程序行,并允许各个框中记述针对与条件判断有关的框的判断条件的树形结构图,生成任意汇编语言的源程序。该程序包括:按不同汇编语言间共同制定的格式记述有目标汇编语言的命令记述形式的表格,以及基于树形结构图,按照与汇编语言种类独立的规定变换顺序生成汇编语言的源程序用的模块。用于生成的模块,在从某个框生成源程序过程中,有时源程序中生成标记行。该程序还包括:检出生成用模块在源程序中实际上连续生成的多个标记用的连续标记检测模块,以及在连续标记检测模块检出的连续生成的多个标记当中,保留某个标记(例如最后一个),删除其它标记用的标记删除模块。
以下结合附图就如下说明的实施例说明本发明。
图1示出的是一例现有格式PAD图。
图2示出的是现有格式if then else(条件判断分支)结构的树形结构图。
图3示出的是现有格式if then(条件判断)结构的树形结构图。
图4示出的是现有格式repeat until(条件判断重复)结构的树形结构图。
图5示出的是现有格式do while(条件判断循环)结构的树形结构图。
图6示出的是现有格式N+1/2结构的树形结构图。
图7示出的是现有格式转移结构的树形结构图。
图8示出的是现有格式标记结构的树形结构图。
图9示出的是现有格式顺序处理的树形结构图。
图10示出的是扩充格式if then else结构的树形结构图。
图11示出的是if then结构的扩充树形结构图。
图12示出的是repeat until结构的扩充树形结构图。
图13示出的是do while结构的扩充树形结构图。
图14示出的是N+1/2结构的扩充树形结构图。
图15示出的是第一实施例所用表格的一般形式。
图16示出的是第一实施例中if then else结构的汇编程序自动生成规则。
图17示出的是if then结构的汇编源程序自动生成规则。
图18示出的是repeat until结构的汇编源程序自动生成规则。
图19示出的是repeat until结构的汇编源程序自动生成规则。
图20示出的是do while结构的汇编源程序自动生成规则。
图21示出的是do while结构的汇编源程序自动生成规则。
图22示出的是N+1/2结构的汇编源程序自动生成规则。
图23示出的是N+1/2结构的汇编源程序自动生成规则。
图24示出的是第一实施例中转移结构的汇编源程序自动生成规则。
图25示出的是第一实施例中标记结构的汇编源程序自动生成规则。
图26示出的是第一实施例顺序处理结构的汇编源程序自动生成规则。
图27是实现本发明实施例装置的计算机系统的框图。
图28示出的是第一实施例所用的具体表格。
图29是第一实施例汇编源程序自动生成处理主程序的流程图。
图30是树形结构图框分析子程序处理的流程图。
图31是树形结构图框分析子程序处理的流程图。
图32是顺序处理子程序的流程图。
图33是由ift hen else结构自动生成汇编源程序的子程序的流程图。
图34是由第一实施例中if then结构自动生成处理汇编源程序的子程序的流程图。
图35是由repeat until结构自动生成汇编源程序的子程序的流程图。
图36是由do while结构自动生成汇编源程序的子程序的流程图。
图37是由N+1/2结构自动生成汇编源程序的子程序的流程图。
图38是由转移结构自动生成汇编源程序的子程序的流程图。
图39是由标记结构自动生成汇编源程序的子程序的流程图。
图40示出的是采用第一实施例装置变换为汇编源程序的树形结构图的例子。
图41是示出图40树形结构图一部分的树形结构图。
图42示出的是图41树形结构图图解文件的存储形式。
图43示出的是又一部分树形结构图。
图44是图43树形结构图图解文件的存储形式的简化示意图。
图45~图49示出的是由树形结构图自动生成汇编源程序的过程。
图50示出的是最终生成的汇编源程序。
图51示出的是第二实施例中if then else结构的扩充树形结构图。
图52示出的是第二实施例中if then结构的扩充树形结构图。
图53示出的是第二实施例中repeat until结构的扩充树形结构图。
图54示出的是第二实施例中do while结构的扩充树形结构图。
图55~图60示出的是第二实施例中N+1/2结构的扩充树形结构图。
图61示出的是第二实施例中转移结构的扩充树形结构图。
图62示出的是第二实施例中标记结构的扩充树形结构图。
图63示出的是第二实施例中顺序处理结构的扩充树形结构图。
图64示出的是第二实施例所用表格的一般形式。
图65示出的是由第二实施例中if then else结构生成汇编源程序的自动生成规则。
图66示出的是由第二实施例中if then结构生成汇编源程序的自动生成规则。
图67和图68示出的是由第二实施例中repeat until结构生成汇编源程序的自动生成规则。
图69和图70示出的是由第二实施例中do while结构生成汇编源程序的自动生成规则。
图71~图76示出的是由第二实施例中N+1/2结构生成汇编源程序的自动生成规则。
图77示出的是由第二实施例中转移结构生成汇编源程序的自动生成规则。
图78示出的是由第二实施例中标记结构生成汇编源程序的自动生成规则。
图79示出的是由第二实施例中顺序处理结构生成汇编源程序的自动生成规则。
图80示出的是第二实施例装置实际采用的表格。
图81示出的是一例用第二实施例装置自动变换为汇编源程序的树形结构图。
图82是第二实施例装置自动生成处理汇编源程序的主程序的流程图。
图83和图84是第二实施例树形结构图框分析处理的子程序的流程图。
图85是由第二实施例顺序处理结构生成汇编源程序的自动生成处理子程序的流程图。
图86和图87是由第二实施例if then else结构生成汇编源程序的自动生成处理子程序的流程图。
图88和图89是由第二实施例if then结构生成汇编源程序的自动生成处理子程序的流程图。
图90~图92是由第二实施例repeat until结构生成汇编源程序的自动生成处理子程序的流程图。
图93~图95是由第二实施例do while结构生成汇编源程序的自动生成处理子程序的流程图。
图96~图102是由第二实施例N+1/2结构生成汇编源程序的自动生成处理子程序的流程图。
图103是由第二实施例转移处理结构生成汇编源程序的自动生成处理子程序的流程图。
图104是由第二实施例标记处理结构生成汇编源程序的自动生成处理子程序的流程图。
图105~图109示出的是用第二实施例装置由树形结构图自动生成汇编源程序的处理过程。
图110示出的是用第二实施例装置最终得到的汇编源程序。
图111示出的是一例用以指出随汇编源程序自动生成处理出现的问题的树形结构图。
图112示出的是由图111示出的树形结构图自动生成的汇编源程序。
图113示出的是从图112的汇编源程序当中删除重复标记的程序。
图114是第三实施例装置所执行的程序当中进行树形结构图框分析的子程序的流程图。
图115是第三实施例装置所执行的程序当中进行树形结构图框分析的子程序的流程图。
第一实施例
就本发明装置进行说明之前,先参照图10~图14说明本装置所用的树形结构图的记述方法。本记述方法其特点在于,做成允许条件判断框中记述源程序一览表,并且在框外适当位置,记述分支用的判断条件。以下参照图10~图14说明各结构。另外,关于分支条件可考虑C(有进位、溢出位)、NC(无进位),Z(零),NZ(非零)等判断条件。
图10示出if then else结构的记述例。如图10所示,条件判断框中可记述程序一览表A,可记述涉及多行的条件判断程序。而且,如图10所示,条件判断框的上下允许记述分支条件“条件1”、“条件2”。另外,这些附图中,与各树形结构图对应,其右下示出各树形结构图的内部存储形式。
图10所示例中,执行一览表A的结果是,条件1为真便执行树形结构图B,条件2为真便执行树形结构图C。该if then else结构结束执行的话,便接着往下执行程序。通过象这样允许条件判断框内记述一览表A,与以往判断框只进行真伪判断不同,本记述方法可认为能使框本身具有判断功能。
而且,图10所示的条件1和条件2可以认为是互补的条件。规定称这类条件互相成立逆条件关系。两条件成立逆条件关系,而且记述有某一条件(例如条件1)的话,即便省略另一条件(例如条件2)的记述,也可以按条件1=伪的情形处理。
图11示记if then结构的记述例。图11(A)、(B)示出的是if then结构不同的记述例,但它们所表示的算法相同。参照图11(A)或(B),先执行条件判断框中的一览表A,然后条件1=真的话,便执行树形结构图B。条件2=真(与条件1=伪同种含义)时什么都不执行,结束if then结构,接着往下执行程序。
图12示出repeat until结构的记述例。本结构中,不仅形成为可在条件判断框内记述一览表A,而且形成为分别在框的左下方和右下方记述循环结束条件和循环继续条件。图12所示的结构,执行树形结构图B之后,再执行一览表A。接下来,其结果条件1=真的话,便结束repeat until结构,条件2=真的话再次从树形结构图B开始执行。该结构执行结束的话,便接着往下执行程序。
图13是do while结构的记述例。图13所示的do while结构形成为允许条件判断框内记述一览表A,并分别在框的左下方和右下方记述循环结束条件和循环继续条件。图13所示的结构,先执行一览表A,其结果条件1=真的话便结束dowhile结构,条件2=真的话便执行树形结构图B,然后再次从一览表A开始执行。本结构执行结束的话,便接着往下执行程序。
图14是N+1/2结构的记述例。本结构形成为允许条件判断框内记述一览表A,并分别在框的左下方和右下方记述循环结束条件和循环继续条件。图14所示的记述例,执行树形结构图B之后执行一览表A,其结果条件1=真的话,便结束N+1/2结构,条件2=真的话便执行树形结构图C,然后再次执行树形结构图B。本结构结束的话,便接着往下执行程序。
这样,该新的记述方法允许树形结构图框外记述判断条件。因此,能够在判断框内记述源程序一览表,利用汇编语言对树形结构图进行记述变得容易,而且如后面所述,能够用相同程序生成系统对各种汇编语言生成源程序。
图15示出按本申请发明自动生成源程序时参照的表格的一般形式。实际使用时,该表格是按表格文件或程序中固定编入的参照用数据表格处理的。按照本发明的汇编语言源程序自动生成装置,对于各种CPU所对应的各种汇编语言可通过维护该表格400来适应。
以下示意图15所示表格400中的记述规则。
图15所示表格400的第一行在“HEADER(首标):”这类记述之后,定义了插入汇编命令行命令之前的行首字符串。此字符串一般采用空格或标签字符。
第二行在“COMMENT:”这类记述之后,定义了应该用于注解行行首的注解字符。具体例有“;”。
第三行在“LABEL:”这类记述之后,定义了应该用于标记定义行中标记符后的字符串。此字符串一般用“:”。
第四行和第五行分别在“JUMP:”这类记述之后,进行有关条件判断转移时所参照的条件判断转移命令和逆条件判断转移命令的定义。另外,这种场合逆条件判断转移命令是指对条件判断转移命令所判断条件的逆条件进行判断的命令。这些程序行的记述规则如下,具体来说,首先是“JUMP:”这类记述,然后按下述顺序记述树形结构图上的条件助记符、树形结构图上的逆条件助记符和条件为真时的汇编转移命令这样三种字符串。
图15中,第四行和第五行是互相成立逆条件关系的。而且,第四行和第五行分别进行有关条件1和条件2的一系列定义。
通过组合该第四行和第五行,按下文所述简单求得条件1=真所对应的转移命令和条件1=伪所对应的汇编条件命令。
条件1=真所对应的汇编转移命令由第四行记述可知为字符串1。
条件1=伪所对应的汇编转移命令可按下文所述求得。首先由第四行记述求得条件1的逆条件为条件2。然后,由表格检索对条件2记述过的程序行。这时,在表格400第五行发现有关条件2的记述。容易理解,条件2=真所对应的汇编转移命令为字符串2。条件2=真与条件1=伪是相同的,因而可求得字符串2是条件1=伪时的汇编转移命令。
在由这种“JUMP:”开始的程序行中,设定字符串1或字符串2为空置空符时表示没有相应命令。这样的话,通过知道字符串1或字符串2是否是空置字符,可以简单定义或参照有没有相应命令。
图15表格400的第六行示出的是绝对转移命令的定义方法。绝对转移命令即为无条件的命令。因而,如第六行所示,将条件助记符和逆条件助记符两者都设定为空置字符。由此示出无条件的绝对转移命令为字符串3。
图10~图14所示的树形结构图其特点在于,设计成可以在条件判断框中记述一览表,而且可以在该框附近记述条件判断框的判断条件。本说明书称这种树形结构图扩充树形结构图。
对如上所述扩充的树形结构图,采用图15所示的表格400内容的话,便可以由扩充树形结构生成汇编源程序,而且,对各种CPU采用相同程序生成规则,并相应于CPU种类变动图15所示表格,便可以生成针对CPU的汇编源程序。
本实施例中,记述于树形结构图框中的一览表等内容是以按照汇编语言命令形式记入为前提的。这时,对于图9所示的顺序处理照原样变换为汇编源程序。这时设法使图4~图8所示的树形结构图和图10~图14所示的树形结构图可以共用,这些树形结构形成为汇编转移命令所需结构,通过自动生成最佳的汇编转移命令和转移去向标记名,实现可以生成与各树形结构执行顺序相对应的汇编源程序一览表的规则。这时源程序生成规则形成为使树形结构中所用的字符、图15表格所定义的字符串和适时自动生成的标记名组合的规则。因而,给出树形结构图和图15所示表格的话,便可以应用源程序生成规则生成源程序。
对于标记名是自动生成的,但以下实施例中,是就每一树形结构图在适当的字符串后面加连续号生成的。采用作为标记名的字符串是任意的,为了便于理解,可以考虑使用加在该树形结构图上的名称。
如前文所述,本发明所用的扩充树形结构图允许以往也采用的图4~图9的记述形式和图10~图14的记述形式。
另外,一般汇编语言中,未必存在与某个条件相对应的转移命令。因而,为了不论汇编语言是哪一种都生成适当的源程序,对源程序自动生成规则,各树形结构图的条件分支部分,仅关注某一方条件,考虑存在和不存在与该条件相对应汇编转移命令两种情形。说明本发明实施例之前,先对各树形结构就通过怎样的方式生成源程序说明该生成规则的具体例。
另外,以下图中“有条件1JUMP命令”指“存在条件1=真便转移的汇编转移命令”。而“无条件1JUMP命令”则指“不存在条件1=真便转移的汇编转移命令”。
图16是对if then else结构的源程序自动生成规则。图16(A)是if then else树形结构,图16(B)是其流程图表现。图16(C)和(D)分别是有条件1JUMP命令时和无元件1JUMP命令时的源程序自动生成规则。另外,如前文所述,是否存在条件1JUMP命令可通过参照图15所示表格400的内容来判别。
先说明图16(C)。该源程序生成规则是有条件1=真所对应的汇编转移命令时的生成规则。图16(C)的第一行示出将条件判断框中的一览表A换成汇编语言的情形。一览表A一般包含多个汇编命令行。为了对一览表A源码化,可通过在各命令的前头加上按图15所示表格400中“行首字符串”定义的字符串来实现。
图16(C)第二行是表示条件1=真时便转移至自动生成的标记1的汇编转移命令。该汇编转移命令,如图15所示表格400所示,通过在适当的转移命令所定义的字符串1上进一步后续自动生成的标记1进行记述得到的。
图16(C)的第三行为注解行。注解行仅由注解字符串组成,用作程序合适的分隔行。
图16(C)的第四行是条件2=真时执行的树形结构图C的汇编源程序自动生成结果。
第五行是树形结构图C执行后,为了转移至if then else结构最后所生成的行。该转移命令采用的是图15表格400第六行示出的绝对转移命令。自动生成标记2作为转移去向地址,加在该绝对转移命令之后。
第六行是注解行。第七行是表示条件1=真时所执行的树形结构图B起始地址的标记行。该行由自动生成的标记1和表明该行为标记的标记字符串组成。该标记字符串可按图15表格400第3行所示形式定义。
图16(C)的第八行是条件1=真时所执行的树形结构图B的汇编源程序自动生成结果。第九行是if then else结构执行结束位置所生成的标记行。自动生成标记2作为该标记名,进一步包含表明该行为标记行的标记字符串。该标记字符串也由图15表格400第3行所记载的形式定义。
图16(D)示出没有条件1=真所对应的汇编转移命令时的源生成规则。图16(D)与图16(C)不同之处在于,不是用条件1=真的汇编转移命令,而是用同条件1=伪等价的条件2=真所对应的汇编转移命令自动生成源程序一览表。所利用的原理是对于这样互补的命令即与逆条件相对应的汇编转移命令,不论哪一种汇编语言必定都存在其中某一种。
if then else结构采用图16(C)和(D)中某一方的话,可以自动生成相应的汇编源程序一览表。用图16(C)和(D)中哪一方可以根据是否有条件1=真时的JUMP命令来判别。
图17示出对于if then结构的源程序自动生成规则。图17(A)和(B)都是if then树形结构,图17(C)是其流程图表现。具体来说,图17(A)和(B)都执行一览表A,因而示出的是,条件1=真的话便执行树形结构图B,条件2=真(条件1=伪)的话便什么都不执行。
图17(D)和(E)示出该if then树形结构所对应的源程序自动生成规则。另外,图17(A)和(B)为了记述if then树形结构表现上的全部变形,只是改变了条件判断后所执行的处理(树形结构图B)在树形结构中的位置,在算法上是完全相同的处理。
图17(D)和(E)示出的源程序自动生成规则分别是有条件2=真所对应的汇编转移命令时的源程序生成规则和没有条件2=真所对应的汇编转移命令时的源程序生成规则。对源程序生成规则中各行记载的内容,由于与图16(C)、(C)各行相同,因而,此后的说明除特别之处不再重复。
图18和图19是对repeat until结构的源程序自动生成规则。图18对应于图12所示的扩充树形结构图,图19对应于图4所示结构。
图18(A)的repeat until结构与图18(B)的流程图等价。有条件2=真所对应的汇编转移命令时和没有条件2=真所对应的汇编转移命令时,分别利用图18(C)和(D)所示的源程序自动生成规则,自动生成汇编源程序。
图19(A)所示的repeat until结构与图19(B)的流程图等价。有条件2=真所对应的汇编转移命令时和没有条件2=真所对应的汇编转移命令时,分别利用图19(C)和(D)所示的源程序自动生成规则,自动生成汇编源程序。
图20和图21是与do while结构相对应的源程序自动生成规则。图20对应于图13所示的扩充树形结构图的do while结构,图21对应于图5所示的树形结构图。
图20(A)示出的do while结构与图20(B)的流程图等价。根据有没有条件1=真所对应的汇编转移命令,利用图20(C)或图20(D)所示的源程序自动生成规则自动生成汇编源程序。
图21(A)和(B)分别对应于图5(A)和(B)所示结构,但只是条件判断框的形状有所不同,其算法不论哪一种都与图21(C)所示的流程图等价。根据有没有条件1=真所对应的汇编转移命令,利用图21(D)或(E)所示的源程序自动生成规则自动生成汇编源程序。
图22和图23示出N+1/2结构所对应的源程序自动生成规则。图22涉及图4所示的扩充树形结构图中的N+1/2结构,图23对应于图6所示的树形结构图。
图22(A)示出的N+1/2结构与图22(B)的流程图等价。根据有没有条件1=真所对应的汇编转移命令,利用图22(C)或(D)所示的自动生成规则自动生成汇编源程序。
图23(A)所示的N+1/2结构与图23(B)的流程图等价。根据有没有条件1=真所对应的汇编转移命令,利用图23(C)或(D)示出的源程序自动生成规则自动生成汇编源程序。
图24示出涉及图7所示转移结构的源程序自动生成规则。该结构进行无条件转移。因此采用按图15表格400的第六行所记载形式定义的绝对转移命令。具体来说,用绝对转移命令行提示的字符串3,如图24(B)所示生成转移命令行和注解行。
图25示出涉及标记结构的源程序自动生成规则。该标记结构对应于图8所示的标记结构。另外,图25(A)示出标记A上下存在树形结构图B和树形结构图C的场合。源程序自动生成过程中,如图25(B)所示,树形结构图B的分析结果与树形结构图C的分析结果之间插入标记行。该标记行用于记述图24所示转移结构的转移去向地址。
图26示出涉及如前文所述的顺序处理结构的源程序自动生成规则。该顺序处理结构对应于图9所示的结构。这时源程序自动生成规则如图26(B)所示包括:对一览表A在其起始位置加上按图15表格400第一行形式定义的行首字符串的程序行和由注解字符组成的注解行。
以下说明由以上扩充树形结构图,用表格,并利用如前文所述的源程序自动生成规则,自动生成汇编源程序的装置的实施例。另外,下面所述处理可在计算机上作为软件实现;对这种处理按流程图示出,但这些处理中的一部分变成为可循环调用的结构。
图27示出实现该装置的典型的计算机系统构成。参照图27,该系统包括:包含CPU(中央处理装置)、主存、输入输出控制装置等在内的主计算机410,与该主计算机410连接的键盘411,打印机412,文档装置414,软盘(FD)驱动器418和CRT(阴极射线管)终端416。主计算机410可以采用典型组成的计算机。文档装置是用来按图解文档存储树形结构图,或存储所生成的源程序文档的。另外,与汇编语言相对应变换用的表格,可以保存于例如文档装置414,并且用时读出到主计算机410的存储器上,也可以在软件中作为固定表格提供。该软件存储于文档装置414,但可以存储于可经FD驱动器418输入输出的FD419进行流通。
图28示出典型微机称为Z80的微机所对应的汇编语言的源程序生成用的表格420。Z-80是典型的8位通用CPU,对于其命令体系是众所周知的。
图28示出的是表格420是第一行为注解行,与源程序自动生成关系不大。第二行定义插入汇编注解行起始位置的行首字符串。本实施例中用8个空格作为该字符串。
第三行定义加在注解行起始位置的注解字符。本实施例中用“;”和四个空格。第四行定义标记行中加在标记后的字符串。本实施例中用“:”。
第五行至第十五行定义了一系列与条件分支有关的转移命令。第五行定义了转移命令“JR”。条件和逆条件两者都定义空置字符。因而,该转移命令“JR”是绝对转移命令。
第六行和第七行定义与条件标志“C”(进位)有关的条件分支命令。条件“C”和“NC”成立逆条件关系。这里,C=真便采用转移命令“JR C,”,NC=真便采用转移命令“JR NC,”。
第八行和第九行定义了与条件标志“Z”(零)有关的条件分支命令。条件“Z”和条件“NZ”(非零)成立逆条件关系。这里,Z=真便采用转移命令“JRZ,”,NZ=真便采用转移命令“JR NZ,”。
第十行和第十一行定义了与条件标志“PO”、“PE”有关的条件分支命令。条件“PO”和条件“PE”成立逆条件关系。这里,PO=真便采用转移命令“JP PO,”,PE=真便采用转移命令“JP PE,”。
第十二行和第十三行字义了与条件标志“P”、“M”有关的条件分支命令。条件“P”和条件“M”成立逆条件关系。这里,P=真便采用转移命令“JP P,”,M=真便采用转移命令“JP M,”。
第十四行和第十五行定义了与条件“B--=0”、“B--<>0”有关的条件分支命令。条件“B--=0”和“B--<>0”成立逆条件关系。这里,不存在“B--=0”=真所对应的转移命令。“B--<>0”=真便采用转移“DJNJ”。另外,条件“B--=0”、“B--<>0”是条件记述,表示“Z-80的B寄存器值减1以后B寄存器值为0便“B--=0”=真,不为0便“B--<>0”=真”。
图29~图39示出图27主计算机410上执行的汇编源程序自动生成用软件的流程图。另外,本实施例是如上所述就Z-80生成汇编源程序的,但图29~图39的流程图并不依赖于作为对象的汇编语言的种类。只要将图28所示表格420换成别的汇编语言所对应的表格就行。以下说明图29~图39示出的流程图。另外,该流程图是实现图16~图26所示源程序自动生成规则的。
参照图29,自动生成算法的主程序首先在步骤B1进行初始化处理。初始化处理对指示树形结构图各框要素的指针和输出的源程序部的指针等,进行各种变元的初始设定。
接着,在步骤B2进行确保源程序缓存器的处理,以暂时存储自动生成的源程序。
接着,在步骤B3读出按图式文档形式存储于文档装置中的树形结构图的图名信息。这时,对哪一树形结构图作变换,可由鼠标器等从例如屏幕上显示的树形结构图名一览表当中选择所需的一个来指定。读出的树形结构图名可按所生成的汇编源程序采用的标记名字符串存储。
接下来,在B4将存储的标记名字符串按所生成的程序字符串的起头标记名输出至源程序缓存器。接着在B5使指示树形结构图要素的指针进至树形结构图的第一框。此时第一框是紧接着树形结构图名信息存储的框。
接着B6执行实际从树形结构图自动生成汇编程序的手续。对于该手续参照图30起的附图进一步详细说明。
B6中的汇编程序2自动生成结束,便将存储有所生成程序的源程序缓冲器的内容输出至文档装置。这时,输出按程序源文档的形式进行。此后,在步骤B8结束自动生成处理。
图30和图31是图29的B6读出的实际从树形结构图生成汇编源程序的图框分析处理的流程图。如前文所述,本算法允许循环调用。因此,首先在图框分析处理的步骤C1中,文档装置确保暂时存储生成的汇编源程序用的工作缓存器。具体来说,进行这种图框分析处理时,可确保用于此的工作缓存器。
接着,在步骤C2、C4、C6、C8、C10、C12、C14和C16的条件判断部分分别判断指示树形结构图要素的指针的示出框与图16~图26树形结构图中的哪一个一致,在步骤C3、C5、C7、C9、C11、C13、C15和C17分别调用一致的树形结构图相对应的树形结构图分析处理程序。
所调用的树形结构分析处理程序包括:分析顺序处理结构的顺序处理程序(C3);分析if then else结构用的if then else处理程序(C5);分析if then结构的if then处理程序(C7);分析repeat until结构用的repeat until处理程序(C9);分析do while结构用的do while结构处理程序(C11);分析N+1/2结构用的N+1/2处理程序(C13);分析JUMP结构的JUMP处理程序(C15);分析标记结构用的标记处理程序(C17)。
这些分析程序结束,分析结果便作为汇编源程序存储于工作缓存器。
因而,参照图31,在步骤C18将该工作缓存器的内容增加到源程序缓存器。
接着,在C19分析不要的工作缓存器,在C20使指示树形结构图的指针移至下一框。
然后,在C21判断指针所指位置是否存在树形结构框。存在树形结构框的话,便转移至图30的C1以继续分析。不存在树形结构框的话,控制便进入C22,使子程序返回。
另外,如前文所述,该图30和图31所示的图框分析处理并非仅由图29的主程序调用,而是也可以由图30中调用的子程序调用的递归子程序。由这些子程序调用该图框分析处理时,该处理构成为使分析结果返回各子程序。
图32是将图30所示C3调用的顺序处理结构变换为汇编源程序用的子程序处理。该处理步骤D1采用图26(B)的自动生成规则,生成汇编源程序一览表,写入工作缓存器。这时执行的处理如图26(B)所示,先向图26(A)所示的图框内的一览表A的起头位置写入行首字符串(由表格得到)。接下来,将具有区分算法含义,并由注解字符串组成的注解行写入工作缓存器后,进行入到D2返回。
图33示出将图30步骤C5调用的if then else结构变换为汇编源程序用的子程序处理流程图。先在步骤E1参照图28的表格420求得是否有条件1=真所对应的转移命令。更具体来说,查询图28表格420各行当中是否存在定义有“条件1”、“条件2”、“字符串”并以“JUMP:”起始的行。判断存在这样对应的转移命令时,控制进入步骤E3,不存在转移命令时,控制进入步骤E2。
步骤E3中,对应于有条件1=真所对应的转移命令时,重新生成2个以后使用的标记名。接着,处理进入步骤E5,采用图16(C)所示的自动生成规则,生成汇编源程序。接着将所生成的汇编源程序写入工作缓存器。另外,图16(C)的第四行和第八行中“树形结构图C分析结果”和“树形结构图B分析结果”是指循环调用图30所示的图框图分析子程序,由图16(A)的if then else结构中所含的树形结构图B结构和树形结构图C结构自动生成的汇编源程序。
这种循环调用中,将当前的工作缓存器指定为输出去向的源程序缓存器,并调用图框分析子程序。图框分析子程序将指定的当前工作缓存器用作为图31步骤C18写入的源程序缓存器。具体来说,自动生成的树形结构图B、树形结构图C的汇编源程序分别从输出到当前工作缓存器的上述图框分析子程序返回图33的子程序。另外,以下图中,有相同的“树形结构图B分析结果”和“树形结构图C分析结果”等记载时,其内容与上述相同。因而,不对其分别重复具体的说明。
再次参见图33,步骤E5的处理一结果,控制便进入E6,结束子程序。
没有条件1=真所对应的转移命令时,控制从步骤E1进入步骤E2,生成2个以后用的标记。接下来,在步骤E4采用图16(D)的生成规则,生成汇编源程序。所生成的汇编源程序存储于工作缓存器。E4以后控制进入E6,子程序结束。
图34将图30的C7所调用的if then结构变换为为汇编源程序的子程序处理。先在F1判断是否存在条件2=真所对应的转移命令。存在条件2=真所对应的转移命令时,控制进入步骤F3,不存在时控制进入步骤F2。
存在条件2=真所对应的转移命令时,在步骤F3重新生成1个以后用的标记名。接着,在步骤F5采用图17(D)所示的自动生成规则,生成汇编源程序。所生成的汇编源程序写入到工作缓存器。此后,控制进入F6,结束该子程序。
而不存在条件2=真所对应的转移命令时,在步骤F2重新生成2个以后用的标记名。接着,在步骤F4采用图17(E)所示的自动生成规则,生成汇编源程序。所生成的汇编源程序写入到工作缓存器,控制进入步骤F6,结束该子程序。
图35示出将图30的C9所调用的repeat until结构变换为汇编源程序的子程序处理。先在步骤G1判断作为对象的框是否图18(A)所示的框。若作为对象的框是图18(A)的框,控制进入G3,若不是,便判断作为对象的框是图19(A)所示的框,控制进入G2。
在G3判断是否存在条件2=真所对应的转移命令。存在相应转移命令的话,控制便进入步骤G7,不存在时控制便进入步骤G6。
在步骤G7重新生成1个以后用的标记名。接下来,在步骤G11将采用图18(C)的自动生成规则生成的汇编源程序写入工作缓存器,使控制进入G12,结束子程序。
在G3判定不存在条件2=真所对应的转移命令时,在G6重新生成2个标记名。此后,在G10采用图18(D)所示的自动生成规则,生成汇编源程序。所生成的汇编源程序写入工作缓存器。此后,控制进入步骤G12,结束该子程序。
另一方面,在G1判断作为对象的框不是图18(A)的框时,便将作为对象的框判断为图19(A)的框,并在步骤G2判断是否有条件2=真所对应的转移命令。有相应转移命令,控制便进入步骤G5,没有便进入G4。
有相应转移命令时,先在步骤G5生成1个以后用的标记名。接着,在步骤G9采用图19(C),生成汇编源程序,写入工作缓存器。此后,控制进入步骤G12,结束该子程序。
而在步骤G2判断没有条件2=真所对应的转移命令时,先在步骤4重新生成2个以后用的标记名。接下来,在G8采用图19(D)自动生成规则,生成汇编源程序,写入工作缓存器。此后在步骤G12,结束该子程序。
图36是将图30中步骤C11调用的do while结构变换为汇编源程序的子程序处理的流程图。而图37是将图30中步骤C12调用的N+1/2结构变换为汇编源程序用的子程序处理的流程图。图36和图37处理程序都与图35的处理程序基本相同,只是与其中作为对象的框的形状和相应的自动生成规则不同。因而对于图36和37,其具体说明不再这里重复。
图38是将图30中C15所调用的JUMP结构变换为汇编源程序用的子程序处理流程图。参照图38先在步骤J1采用图24(B)所示的自动生成规则,生成汇编源程序。所生成的汇编源程序写入工作缓存器,在步骤J2结束该子程序处理。
图39是将图30中C17所调用的标记结构变换为汇编源程序用的子程序处理的流程图。在步骤K1采用图25(B)的自动生成规则,生成汇编源程序,写入工作缓存器。此后控制进入K2,结束该子程序。
举例说明采用上述汇编语言生成装置、实际将树形结构图变换为汇编源程序。图40示出一例扩充树形结构图。该树形结构图的模块名为“testprog”。
图41示出图40树形结构图的前半处,图42示出该树形结构图按怎样的图解文档形式存储。图42中“↓”表示换行。
接下来,图43示出图41所示框当中的“CP”框,图44清楚示出该框图解文件的存储形式。
本发明装置读入这种图解文件,将它变换为汇编源程序。
图45~图48分别在左侧示出树形结构图的变换对象部分,在右侧示出自动生成的汇编源程序。
先起动汇编源程序自动生成主程序。该程序是图29所示的程序。接着,进行变元初始化和源程序缓存器的保留,然后如图45所示读取图40树形结构图的图名“testprog”,输出至源程序缓存器。图45右侧示出此时源程序缓存器的内容。
接着执行图30所示的图框分析处理。该树形结构图的第一个树形结构是图46左侧所示的顺序处理框L1。因而,按图32的处理生成汇编源程序。图46的右侧则示出图31中C18输出至源程序缓存器的结果。
接下来分析的树形结构是图47左侧所示的repeat until结构L2。该框是图53(B)的框,因而控制进入图35的G2。参照图28的表格420的话,可知有条件“B--=0”的逆条件“B--<>0”=真所对应的条件转移命令(表格420的最后一行)。因此,G2的判断结果为YES(“是”),控制进入G5和G9。在G9,通过按照图19(C)进行源程序生成,得到图47右侧示出的工作缓存器内容。
但该repeat until结构中包含图40所示的L3~L10的树形结构(这与图47右侧的“源程序A”部分相对应),所以重新确保工作缓存器2,循环调用图30图框分析处理程序。循环调用所得的图框分析程序接着分析这些框子L3~L10的树形结构,进行源程序自动生成,输出至工作缓存器。图48上侧示出循环分析的一部分树形结构图,图48下侧是输出至第二工作缓存器的一部分树形结构图的源程序分析结果。
象这样由树形结构图的框L3~L10自动生成汇编源程序,输出至第二工作缓存器的结果是图49(A)。接下来图49(B)示出用该结果,工作缓存器中生成的整个repeat until结构L2的汇编源程序。图49(B)的汇编源程序接着在图31的C18中输出至源程序缓存器。
图50示出象这样由图40所示的树形结构图自动生成,并输出至源程序文件的汇编源程序一览表。该汇编源程序一览表是图40所示树形结构图的变换结果。
第二实施例
可是,LONG JUMP命令和SHORT JUMP命令的区别,用以往的树形结构图不能表现。因此,扩充该结构图,以使用于区分这些命令记述载明在树形结构图的一部分中,下文表示扩充树形结构图表示法,使在处理的何处需要LONG JUMP命令一目了然。第二实施例是进而从这种扩充的树形结构图产生汇编源(程序)的实施例。
在下述实施例中,具有非LONG JUMP命令不能转移的范围的源程序一览表以粗线强调源程序一览表框的左端,进而,在该框附近作出“long”的标记。下文,参照图51~63,对该扩充树形结构图的记述方法加以说明。
示于图51的图表示if then结构中的图B结构,若不是LONG JUMP命令,不转移。同时,图B结构还表示由于非LONG JUMP命令不转移,该if then else结构全部若不是LONG JUMP命令也不转移。作为该图的图解文件的保存形式,示于图51的下部。图52以下各图,也在其各自右下处示出与各图对应的图解文件的存贮形式。
图52(A)、(B)均表示if then结构中的图B结构和if then全部结构,若不是LONGJUMP命令不转移。图53(A)、(B)的树形结构图表示repeat until结构中的图B结构,若不是LONG JUMP命令,不转移。图54(A)、(B)、(C)的树形结构图表示do while结构中的图B结构及do while结构全体若不是LONG JUMP命令不转移。
图55~图60均表示N+1/2结构。尤其图55及图56表示图B结构及N+1/2结构全体若不是LONG JUMP命令不转移。图57及图58表示图C结构及N+1/2结构全体若不是LONG JUMP命令不转移。图59和图60表示图B结构和图C结构及N+1/2结构全体若不是LONG JUMP命令均不转移。
图61是表示转移结构本身的图,表示使用的转移命令是LONG JUMP。在图62中示出标记结构的记述,在标记结构中不指定LONG JUMP。图63中表示顺次处理图。在顺次处理图中,框左端标粗线且在其左侧注上“long”,由此表示一览表A若不是LONG JUMP命令不转移。
如上所述的那样,以区分LONG JUMP命令及SHORT JUMP命令加以表示的方式,从扩充的树形结构图生成汇编源程序一览表时,参照的表的形式示于图64。示于图64的表430是在第1实施例中使用过的表400(图15)中,附加与LONGJUMP命令及SHORT JUMP命令相关的信息的表。
在第1实施例的表400中,如其第4行所示,与条件1=真所对应的汇编转移命令以字符串1表示。但,在第2实施例中,汇编转移命令的项目增至两个。如图64第4行所示,作为与条件1=真所对应的汇编转移命令,以定义字符串1和字符串4二者加以确定。这里,字符串1是相应于条件1=真的汇编SHORTJUMP命令,字符串4表示相应于条件1=真的汇编LONG JUMP命令。
在图64中的第5行中,与条件1=伪等价的条件2=真相应的汇编SHORTJUMP命令及汇编LONG JUMP命令分别用字符串2及字符串5加以定义。在第6行中,无条件转移的汇编SHORT JUMP命令及汇编LONG JUMP命令分别用字符串3及字符串6定义。
这样,通过用表定义SHORT JUMP命令和LONG JUMP命令,作为某条件=真对应的汇编转移命令,可根据各种条件判断的结果,简单的求出对应的汇编LONG JUMP命令及SHORT JUMP命令。
由于从如图51~图63所示的那种可区分LONG JUMP命令及SHORT JUMP命令的扩充树形结构图,参照示于图64的表430,对各种CPU,生成适用LONGJUMP命令及SHORT JUMP命令的汇编源程序,所以能得到需要的通用源程序生成规则。下文,对这种普遍的汇编源程序生成规则(算法)进行说明。又,下文说明的汇编源程序生成规则是根据第1实施例中使用的一系列源程序自动生成规则,进而加进汇编语言特有的LONG JUMP命令及SHORT JUMP命令的区别。
在第2实施例装置中使用的自动生成规则与对应的树形结构图及与各树形结构图等价的流程图一起示于图65~图79。且,在这些附图中,“有条件1SHORT JUMP命令”这种记述表示“有条件1=真便SHORT JUMP的命令”。所谓“无条件1SHORT JUMP命令”表示“无条件1=真便SHORT JUMP的转换命令”。所谓“无条件2JUMP命令”表示“不存在条件2=真便转移的命令,既不存在SHORT JUMP命令,也不存在LONG JUMP命令”。在一项生成规则中,记述“无条件1SHORT JUMP命令”和“有条件2LONG JUMP命令”时,表示该生成规则在两种条件为“与”时适用。即,上述条件表示“无条件1=真便SHORT JUMP的转移命令,并且有条件2=真便LONG JUMP的转移命令”。
1张图中定义多个生成规则的场合,其应用优先顺序是图中附加的字母在先的一另高。这是为了优先应用所生成的汇编源程序行数和字节数较少的规则。即,在图65的生成规则(C)~(F)中,最先使用(C),若条件不成立则用(D),若(C)和(D)均不合适,则用(E),若(E)也不合适则用(F),这样自英文字母顺序的起始方起依次使用生成规则。
图65是与if then else结构对应的源程序自动生成规则。图65(A)相应于图51的树形结构,与图65(B)的流程图等价。根据有无与条件1=真相应的SHORTJUMP命令和LONG JUMP命令,以及与条件2=真相应的SHORT JUMP命令和LONG JUMP命令,采用示于图65(C)~(F)的源程序自动生成规则,自动生成汇编源程序。
图66是与if then结构对应的源程序自动生成规则。图66(A)、66(B)分别对应于图52(A)、52(B)。为了记述if then树形结构的各种变形,这些图仅条件判断后所进行处理(图B)的树形结构的位置有所变动,在算法上是相同的,它们与图66(C)的流程图等价。示于图66(D)~(G)的源程序自动生成规则分别是根据有无与条件1=真及条件2=真对应的SHORT JUMP命令及LONG JUMP命令进行使用的规则。
图67和图68表示对应repeat until结构的源程序自动生成规则。图67(A)、图68(A)分别对应于图53(A)和图53(B)。
图67(A)的树形结构图与图67(B)的流程图等价。图67(C)~(F)的源程序自动生成规则是根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,而加以使用的规则。
图68(A)的树形结构与图68(B)的流程图等价。通过根据有无对应于条件1=真、条件2=真的SHORT JUMP命令及LONG JUMP命令,分别使用示于图68(C)~(F)的源程序自动生成规则,自动生成汇编源程序。
图69和图70分别表示与do while结构对应的源程序自动生成规则。图69(A)对应于图54(A)的树形结构图。图70(A)和70(B)分别对于图54(B)和(C)的树形结构图。
图69(A)的树形结构图与图69(B)的流程图等价。图69(A)的do while结构在结构内具有转移时需要的LONG JUMP命令的图B。根据有无条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用图69(C)~(F)所示的源程序自动生成规则,自动生成汇编源程序。
图70(A)及70(B)均与示于图70(C)的流程图等价。根据有无条件1=真。条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用示于图70(D)~(G)的源程序自动生成规则,自动生成汇编源程序。
图71~图76表示与N+1/2结构对应的源程序自动生成规则。
示于图71(A)的N+1/2结构是示于图55的结构,与示于图71(B)的流程图等价。该N+1/2结构在其结构内具有转移时LONG JUMP命令所需要的图B。根据有无条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用图71(C)~(F)自动生成汇编源程序。
图72(A)对应于图56。该N+1/2结构在其内具有存转移时LONG JUMP命令所需要的图B,它与图72(B)的流程图等价。该结构根据有无条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用示于图72(C)~(F)的源程序自动生成规则,自动生成汇编源程序。
图73(A)对应于图57的N+1/2结构。该N+1/2结构在其内具有转移时LONGJUMP命令所需要的图C,它与图73(B)的流程图等价。根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,使用图73(C)~(F)所示的源程序自动生成规则,自动生成汇编源程序。
示于图74(A)的N+1/2结构对应于示于图58的结构。该N+1/2结构在其结构内具有转移时LONG JUMP命令所需要的图C,与图74(B)的流程图等价。根据有无条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用示于图74(C)~(F)的源程序自动生成规则,自动生成汇编源程序。
图75(A)的N+1/2结构相应于图59。该结构在其内具有转移时LONG JUMP命令所需要的图B及图C、它与图75(B)的流程图等价。根据有无条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用图75(C)~(F)的源程序自动生成规则,自动生成汇编源程序。
图76(A)是相应于图60的N+1/2结构。该N+1/2结构在其内具有转移时,LONG JUMP命令所需要的图B及图C,它与图76(B)的流程图等价。根据有无条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,使用图76(C)~(F)的源程序自动生成规则,自动生成汇编源程序。
对转移结构的源程序自动生成现则示于图77。图77(A)是示于图61的转移结构,与此相应的生成输出的源程序示于图77(B)。由于转移结构本身以一行汇编命令表示,转移时不必LONG JUMP命令。但是,因为转移命令本身可成为SHORTJUMP命令或LONG JUMP命令,所以如图77(A)所示,通过在转移结构框的左端加粗线,定义成采用的转移命令为LONG JUMP命令。从而如该场合的图77(B)所示,采用的转移命令是字符串6(参照图64)。
对标记结构的源程序自动生成规则示于图78,在标记结构中不含转移命令,因此,示于图78(B)的源程序自动生成规则与示于图25(B)的第1实施例的源程序自动生成规则没有差异。
对顺次处理结构的源程序生成规则示于图79。示于图79(B)的源程序自动生成规则,与示于图26(B)的第1实施例的生成规则相同。但在该图79的场合,为了转移该顺次处理结构(一览表A),需要LONG JUMP命令。因而,在有转移该顺次处理结构的转移命令时,要使该转移命令为LONG JUMP命令。
对用来将采用上述扩充树形结构图表记形式所记述的树形结构图变换成汇编源程序的第2实施例加以说明。虽然,第2实施例采用与示于图27的第1实施例相同的硬件,但,它用示于图80的表440代替示于图28的第1实施例的表420。且,示于图80的表440是用于自动生成Z-80的汇编源程序的,在产生其它CPU的汇编语言源程序时,要利用与该汇编语言相对应的表。
采用第2实施例变换成汇编源程序的树形结构图的例子示于图81。该图81的树形结构图的图名是“long prog”。使用该树形结构图的具体例子将于后文讲述。
下文说明图80的表440。该表440用于就图64中表示基本考虑方法的表430,表达以Z-80为对象的汇编语言。表440的第1行是注解行,与源程序自动生成无关。
第2行是插入汇编命令行的最前面的行首字符串。在本实施例中,使用字符串“”(8个空格)。第3行是注解行前面所加的注解字符。在本实施例中使用“;”。第4行定义标记行中附加于标记后的字符串。在本实施例中使用“:”。
第5行~第15行是与一系列条件分支有关的SHORT JUMP命令及LONGJUMP命令的定义。第5行定义SHORT JUMP命令“JR”、及LONGJUMP命令“JP”。由于条件及逆条件两者均以空置字符字义,因而显然该转移命令“JR”及“JP”均是绝对转移命令。
第6行和第7行定义与条件标志“C”有关的条件分支命令。条件“C”和条件“NC”互为逆条件关系。其中,若C=真,采用SHORT JUMP命令“JRC,”或LONG JUMP命令“JP C,”;若NC=真,则采用SHORTJUMP命令“JR NC,”或LONG JUMP命令“JP NC,”。
第8行和第9行定义与条件标记“Z”有关的条件分支命令。条件“Z”与条件“NZ”互为逆条件。其中,若Z=真,则采用SHORT JUMP命令“JRZ,”或LONG JUMP命令“JP Z,”;若NZ=真,则采用SHORT JUMP命令“JR NZ,”或LONG JUMP命令“JP NZ,”。
第10行和11行定义与条件标志“PO”,“PE”有关的条件分支命令。条件“P0”与条件“PE”具有逆条件的关系。条件标志“PO”、“PE”均不具有SHORT JUMP命令。然而,即使LONG JUMP命令作为SHORT JUMP命令使用也不会产生特别的问题。因此,为了方便,把LONG JUMP命令作为SHORTJUMP命令加以定义。这里,PO=真时,SHORT JUMP命令及LONG JUMP命令均采用“ JP PO,”;若PE=真,则SHORT JUMP命令、LONG JUMP命令均采用“JP PE,”。
第12行和第13行定义与条件标记“P”、“M”有关的条件分支命令。条件“P”和条件“M”具有逆条件关系。条件标记“P”、“M”均不具有SHORT JUMP命令。然而,即使LONG JUMP命令作为SHORT JUMP命令使用,也不会有特别问题。因此,为了方便,LONG JUMP命令也定义为SHORT JUMP命令。这里,若P=真,SHORT JUMP命令、LONG JUMP命令均采用“JPP,”;若M=真,则SHORT JUMP命令、LONG JUMP命令均采用“JPM,”。
第14行和第15行定义与条件“B--=0”、“B--<>0”有关的条件分支命令。条件B--=0”及条件“B--<>0”互为逆条件。这里,与”B--=0”=真对应的转移命令既不是SHORT JUMP命令,也不是LONG JUMP命令。若“有B--<>0”=真,SHORT JUMP命令“DJNE”,但不存在LONG JUMP命令。由此,源程序自动生成算法参照与“B--<>0”=真对应的LONG JUMP命令时,中断自动生成,输出出错信息。又,“B--=0”、“B--<>0”分别记述若“Z-80的B寄存器值减1后的B寄存器值”为0,则“B--=0”=真,而非0,则“B--<>0”=真。
在本第2实施例的装置中,用于从SHORT JUMP及LONG JUMP记述的扩充树形图,自动生成汇编源程序的具体处理示于图82以下的流程图。又,在本实施例中,虽然说明Z-80的汇编源程序,但若以其它汇编语言用的表代替图80的表440,用相同的流程处理,也能生成别种汇编语言用的源程序。图83~图102的处理,与第1实施例的图框分析处理相同,为可循环调用的结构。
图8是自动生成算法的主程序流程图。该流程的步骤M1~M8分别对应于图29所示第1实施例的主程序的步骤B1~B8,其内容也相同。因而对此的详细说明不再重复。
实际分析树形结构图,生成汇编源程序,并贮存在源程序缓存器中的子程序(即,图框分析处理的流程图)示于图83和84。示于图83和84中的步骤N1~N22分别与示于图30及图31的第1实施例的图框分析处理的各步骤C1~C22相同。因而,不再重复对图83及图84的详细说明。
在本实施例中,树形结构图在具有LONG JUMP结构时也能生成源程序,但实际编程时,往往大部分的树形结构仅含SHORT JUMP命令。仅用SHORT JUMP命令时的汇编程序自动生成规则,能照原样使用第1实施例中使用的流程图中所示的处理。因而以下说明中,在树形结构中没有LONG JUMP的场合沿用对第1实施例中说明的相应结构的自动生成规则。这时的各生成规则的解释使用第1实施例的内容。
图85表示把83的图框分析处理步骤N3调用的顺序处理结构变换成汇编源程序的子程序处理流程图。在步骤P1中,判断在作为对象的顺序处理框中是否有LONG JUMP记述。若元LONG JUMP记述则控制进入P2,执行示于图32的仅有SHORT JUMP时的汇编源程序生成处理。反之,在有LONG JUMP记述时,控制进入P3。在P3中,采用图79(B)的生成规则,生成汇编源程序,写入工作缓存器。在步骤P2或P3后控制进入P4,子程序结束。
图86表示把图83的步骤N5中调用的if then else结构变换成汇编源程序的子程度处理流程图。首先,在步骤Q1,判断在作为对象的if then else结构中是否有LONG JUMP记述。若无LONG JUMP记述,则控制进入步骤Q2,执行示于图33的仅有SHORT JUMP时的汇编源程序生成处理,然后进入步骤Q14,处理结束。
反之,判断Q1中有LONG JUMP记述时,控制进入Q3。Q3中,判断是否有与条件1=真对应的SHORT JUMP命令。当存在与条件1=真对应的SHORTJUMP命令时,控制进入Q4。在Q4中重新生成两个在随后的步骤Q5中使用的标记名。然后,在Q5中,采用示于图65(C)的自动生成规则,生成汇编源程序,写入工作缓存器后,进入图87的步骤Q14,子程序结束。
在步骤Q3中,当判定不存在与条件1=真相对应的SHORT JUMP命令时,控制进入步骤Q6。在Q6中,对是否有与条件2=真对应的LONG JUMP命令进行判断。在存在与条件2=真对应的LONG JUMP命令时,控制进入Q7。在Q7中,重新生成两个在后续Q8中使用的标记名。然后,在Q8中,采用示于图65(D)的自动生成规则,生成汇编源程序,写入工作缓存器后,流程进入图87的Q14,处理结束。
在Q6中,当判定不存在与条件2=真对应的LONG JUMP命令时,流程进入图87的Q9。在Q9中,对是否有与条件1=真对应的LONG JUMP命令进行判定。在存在与条件1=真对应的LONG JUMP命令时,控制进入Q10。在Q10中,重新生成两个在后续Q11中使用的标记名。然后,在步骤Q11中,采用图65(E)的自动生成规则,生成汇编源程序,写入工作缓存器后,流程进入Q14,处理结束。
另一方面,在Q9中,判定不存在与条件1=真对应的LONG JUMP命令时,控制进入Q12。在Q12中,重新生成3个在后续Q13中使用的标记名。然后,在Q13中,采用示于图65(F)的自动生成规则,生成汇编源程序,写入处理缓存器后,流程进入Q14,处理结束。
图88表示用于把图83的N7中调用的if then结构变换成汇编源程序的子程序处理的流程图。图88及图89中的处理步骤R1~R14基本上与图86和图87的处理步骤Q1~Q14相同。在只存在SHORT JUMP命令时,执行图34的if then处理(R2)。当LONG JUMP结构包含在成为对象的框中时,根据有无与条件1=真,条件2=真对应的SHORT JUMP命令及LONG JUMP命令,分别采用图66(D)~(G),生成汇编源程序,写入工作缓存器后,控制进入的R14,该子程序结束。如已叙述的那样,图88和图89的流程与图86和图87的相同,不再重复其详细说明。
图90~图92是用于把图83的N9中调用的、用于把repeat until结构变换成汇编源程序的子程序处理的流程图。在步骤S1中,判断成为对象的repeat until结构中是否存在LONG JUMP记述。若不存在LONG JUMP记述,则控制进入S2,执行由示于图35的从仅有SHORT JUMP命令的repeat until结构,生成汇编源程序的处理,在步骤S3,子程序结束。
在S1中判断为有LONG JUMP记述时,控制进入S4。在S4中,对成为对象的repeat until结构是否为示于图67(A)的框进行判断。若是图67(A)的框,则控制进入S6,否则进入S5。
在S6以下,根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,分别采用图67(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(S8、S10、S14、S16、S20、S22、S24、S26)。然后控制进入S27,该子程序结束。
另一方面,在S4中,当判定不是图67(A)的框时,在S5以下,根据有无对应于条件1=真、条件2=真的SHORT JUMP命令及LONG JUMP命令,采用图68(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(S7,S9,S13,S15,S19、S21、S23、S25)。其后的控制进入S27,该子程序结束。
图93~图95是图83的N11中调用的、用于把do while结构变换成汇编源程序的子程序处理流程图。首先,在T1判定作为对象的do while结构中否有LONGJUMP记述。若没有LONG JUMP记述,则控制进入T2。在T2中执行示于图36的、由仅有SHORT JUMP时的do while处理生成汇编源程序的处理。然后,控制进入T3,该子程序结束。
在T1判定有LONG JUMP记述时,控制进入T4。在T4,对成为对象的do while结构的框是否图69(A)的框加以判定。若是图69(A)的框,则控制进入T6,否则进入T5。
作为处理对象的do while结构的框是图69(A)的框时,在T6以下的步骤,根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,分别采用图69(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(T8、T10、T14、T16、T20、T22、T24、T26)。然后,控制进入T27,该子程序结束。
在控制自T4进入T5时,T5以下的处理中,根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,分别采用图70(D)~(G)的自动生成规则,生成汇编源程序,写入工作缓存器(T7、T9、T13、T15、T19、T21、T23、T25)。然后,控制进入T27,该子程序结束。
图96~图102是图83的N13中调用的、用于把N+1/2结构变换成汇编源程序的子程序处理流程图。参照图96,首先,在U1中,对作为对象的N+1/2结构中是否有LONG JUMP记述,进行判定。若没有LONG JUMP记述,控制进至U2。在U2中,执行根据图37中N+1/2循环处理的汇编源程序的生成处理。然后,控制进入图101的U74,该子程序结束。
另一方面,在U1中判定有LONG JUMP记述时,控制进入U3。在U3中,对作为对象的N+1/2结构是否为图71(A)的框进行判定。判定是图71(A)的框时,控制进入图97的U4。在U4以下的处理中,根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,采用分别示于图71(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(U5、U6、U8、U9、U11、U12、U13、U14)。然后,控制进入图101的U74,该子程序结束。
另一方面,在图96的U3中,判定作为对象的框不是图71(A)的框时,控制进入U15。在U15中,对作为对象的N+1/2结构是否为图72(A)的框进行判定。若是图72(A)的框,则控制进入图98的U16。在U16以下的步骤中,根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,采用分别示于图72(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(U17、U18、U20、U21、U23、U24、U25、U26)。然后,控制进入图101的U74,该子程序结束。
再次回到图96,在U15中,作为对象的结构判定为不是图72(A)的框时,控制进入U27。在U27中,对作为对象的N+1/2结构是否图73(A)的框进行判定。是图73(A)的框时,控制进入图99的U28。在U28以下的处理中,根据有无与条件1=真、条件2=真所对应的SHORT JUMP命令及LONG JUMP命令,采用分别示于图73(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(U29、U30、U32、U33、U35、U36、U37。U38)。然后,该子程序结束。
再次返回图96,在U27中,判定作为对象的结构不是图73(A)的框时,控制进入U39。U39中,对作为对象的N+1/2结构是否图74(A)的框进行判定。若是图74(A)的框,则控制进入图100的U40。U40以下的步骤中,根据有无与条件1=真、条件2=真对应的SHORT JUMP命令及LONG JUMP命令,采用分别示于图74(C)~(F)的自动生成规则,生成汇编源程序,写入工作缓存器(U41、U42、U44、U45、U47、U48、U49、U50)。然后,该子程序结束。
再参看图96,在U39中判定成为对象的结构不是图74(A)的框时,控制进入U51。在U51,判定N+1/2结构是不是图75(A)的框。判定为是图75(A)的框时,控制进入图101的U53。在U53下,根据对应于条件1=真、条件2=真的SHORTJUMP命令及LONG JUMP命令的有无,分别采用图75(C)~(F)所示自动生成规则,生成汇编源程序,写入工作缓存器(U55、U57、U61、U63、U67、U69、U71、U73)。之后,结束该子程序。
在U51中,判定成为对象的不是图75(A)的框时,控制进入图102的U52。在U52下的处理中,根据对应于条件1=真、条件2=真的SHORT JUMP命令及LONG JUMP命令的有无,分别采用图76(C)~(F)所示的自动生成规则,生成汇编源程序,写入工作缓存器(U54、U56、U60、U62、U66、U68、U70、U72)。之后,控制进入U74,结束该子程序。
图103表示图84的N15中被调用的转移处理子程序的流程图。参看图103,在V1中判定在作为对象的JUMP处理结构中是否存在LONG JUMP记述。若没有,控制进入V2,执行图38所示只有SHORT JUMP时的转移处理,然后结束处理(V4)。
相反,若判定有LONG JUMP记述,则控制进入V3。在V3中采用图77(B)所示自动生成规则,生成汇编源程序,写入工作缓存器。其后,控制进入V4,结束该程序。
图104为图84的N17中被调用的、将标记处理结构变换为汇编源程序用的子程序处理的流程图。如先前所述,标记处理结构是一种与LONG JUMP、SHORTJUMP无关的结构。因此,对于标记处理结构的变换,先在步骤W1采用图78(B)所示自动生成规则,生成汇编源程序,写入工作缓存器。然后,控制进入W2,结束该处理。
图105~图110表示使用该第二实施例将图81所示树形结构图“long prog”自动变换为汇编源程序的过程。此时所用的表为图80中表440。
首先,起动图82所示主程序。然后,在对变量初始化及确保源程序缓存器之后,写入图81所示树形结构图的图名“long prog”,并输出给源程序缓存器。树形结构图中被写入部分和输出给源程序缓存器的输出结果分别示于图105(A)和图105(B)。
接着,进入分析图83下面的图框。该图81所示的树形结构图中第一个树形结构为顺序处理框X1。因而,按照图85的处理,自动生成汇编源程序,输出到源程序缓存器。要变换的树形结构和提供给源程序缓存器区的输出结果分别示于图106(A)和(B)。
再参看图81,接着应分析的树形结构是repeat until结构X2。根据图90~92所示流程图,将该结构变换为汇编源程序。根据图90中S1的判断,由于该repeatuntil结构在内部结构中具有LONG JUMP记述的结构,故控制进入S4。根据S4的判断,由于该repeat until结构是图67(A)中的框,故控制进入S5。根据图80的表440。对应于条件(B--=0)=真的转移命令没有SHORT JUMP命令LONGJUMP命令。而且对应于逆条件(B--<>0)=真的转移命令没有LONG JUMP命令,仅有SHORT JUMP命令。因而控制进入S23及S25,得到图107(B)所示结果。其中,由于图107(A)所示repeat until结构内含有图81所示从X3到X10的树形结构(源A),故重新确保第二工作缓存器后,循环调用图83下的图框分析处理。循环调用的图框分析子程序进一步分析X3~X10的树形结构,进行源程序自动生成,送回该结果。图108(A)表示循环分析树形结构图的一部分。图108(B)为输出给第二工作缓存器的对应于图108(A)部分图的源程序分析内容。由此,根据X3~X10的树形结构图自动生成汇编源程序,输出给第二工作缓存器的结果示于图109(A)。
循环调用的图框分析子程序结束时,用图109(A)的结果生成于工作缓存器的repeat until结构X2(图81)的全部汇编源程序示于图19(B)。该汇编源程序如图84N18所示,进一步输出到源程序缓存器。由此,根据图81中X1~X12的树形结构图自动生成输出给源文件的汇编源程序示于图110。通过对图81所示树形结构图自动变换,就能将它们变换为Z-80的汇编源程序。
第三实施例
上述实施例自动生成的源程序一览表,可认为存在如下问题。例如,观察一下将图111所示树形结构图变换为汇编源程序的情况。此时,该树形结构图multif具有结构上有同样返回位置的2个if then结构Y2及Y3。因此,根据上述实施例自动生成汇编源程序的结果,如图112所示,在源程序一览表的同一位置处连续生成2个标记multif2及multif1。
这两个标记的重复没有什么意义,反而增加了源程序的复杂性,白白增加了程序的容量。
因而,在上述同一位置处生成标记的情况下,通过删除不要的标记将该标记名统一到某个,就可防止产生冗余的标记。经上述处理,简化了所生成的汇编源程序,更容易理解,同时,不会白白增加源程序的容量。消除冗余标记后的源程序一览表如图113所示。
作为检测这种冗余标记对标记进行简化的方法,如图114及图115所示,可考虑改变图框分析子程序。图114及图115中的图框分析子程序与图30及图31所示第一实施例中图框分析子程序的不同点在于,在步骤C18之前设有步骤C23~C25,以此删除重复的标记。其它部分,图114及图115与图30及图31相同,这里省略其说明,不再重复。
具体地说,参看图115,首先在步骤C23,判定工作缓存器中最末行是否为标记名。若不是标记名,由于不会引起标记重复,故控制进入C18,将工作缓存器的内容写入源程序缓存器。相反,在C23中判定为工作缓存器的最末行是标记名时,控制进入C24。
在C24中判定源程序缓存器中倒数第二行是否为标记名。若源缓存器的倒数第二行不是标记名时,不会引起标记重复,故控制进入C18。
源程序缓存器倒数第二行是标记名时,控制进入C25。在C25中,改变工作缓存器内汇编源程序中所述的这种标记名,使之与C24所检测到的标记名完全一致,同时处理删除工缓存器中最末行,该处理之后,控制进入C18。
通过施加该C23~C25的处理,在最终生成的汇编源程序中可避免标记名的无用重复。
在如上所述的上述实施例中,相对于PAD图扩充了对应于汇编语言的树形结构图的记述方法,但也能用于其它树形结构图。例如,也适用于结构化的流程图、SPD图、YACC图、HCP图等。而且,在上述实施例中,虽就汇编语言生成源程序的情况进行了说明,但也适用于汇编语言外的非结构化语言。
在上述实施例中,当根据树形结构图自动生成汇编源程序时,为了使用与CVD或汇编语言无关的同一处理程序自动进行生成,故规定基本命令参照表的所述表作为表文件既可制成与自动生成程序分离的形式,在每遇CPU或汇编语言改变时都能保持,也可作为数据表固定留在源程序中,成为一种CPU或一种语言专用。