论文部分内容阅读
摘 要 由于目前程序变换与分析算法的复杂程度越来越高,因此简化处理显得尤为必要。本文主要探讨了程序变换方法在简化Java循环语句中的应用情况,这种方法主要是通过简化JAVA语言的组成结构和语言现象,从而实现简化Java循环语句的目的。
关键词 简化;Java循环语句;程序变换
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2014)23-0036-01
变幻与分析算法的复杂性问题存在于当前很多的程序分析和程序变换等软件中,为了简化程序中的语言,一般的方法就是在程序中使用变换预处理的技术,也就是将复杂的结构通过等价程序替换为简单的结构,从而实现降低程序变换与分析算法的复杂程度。本篇文章探讨了程序变换方法在简化JAVA循环语句中的应用情况,在将for和do-while语句转变为while语句的基础上,借用标准变量来清除retuen、continue以及break等语句,达到简化Java语句的目的。
1 JAVA语言源程序的组成结构
在Java语言编写中,源程序占有重要的地位。程序变换的输入与输出是源程序的主要组成部分,Java语言的源程序可以输出自己下一级的编写程序。其中控制语句在输出与输入中作用,可以采用语句结构的方法来描述,该语句结构同样也是Java语言源程序的组成结构,具体如下:
除了源程序中的控制语句是上述结构,在Java语言中的其他控制语句,只要没有特殊要求的话也按照上述方法来处理自身的语句结构。
2 等价变换程序的方法
在Java语言中的循环语句中,如果语句中含有continue或者break的话,就不能直接进行等价变换,首先要通过使用控制变量达到对语句逻辑的控制。具体而言,Java循环语句的变化方式如表1所表示情况。
根据JAVA循环语句的变换规律,该语言中不仅循环语句可以自己定义一个符号,复合语句也可以自定义符合。Java语言中循环语句和复合语句的定义规则,共同给予了continue和break语句使用标号的权力。其中由于break语句自身的复杂性,break语句使用标号情况可以分为以下三类:
1)第一类 break; 可以进行内层之外的循环运算。
2)第二类 break lab;可以进行lab标号之外语句的循环运算,等价变换程序会忽略break语句和标号下的循环语句,直接执行其他复合语句和循环语句的运算。
3)第三类 break lab;lab;可以进行lab标号之外复合语句的循环预算,同时还可以运算剩下的连续语句。等价变换程序会直接忽略break语句以及标号下的复合语句,直接进行其他复合语句和循环语句的运算。
另一方面,Java语言下continue语句只有两种标号情况,具体如下:
1)第一类continue;可以结束一部分循环语句体,转而执行其他的循环语句体。
2)第二类continue lab;可以结束lab标号之下的循环语句体,终止本轮执行并转到下一次的运算中。等价变换程序会忽略continue语句以及标号之下的语句,直接执行其他复合语句和循环语句的运算。
根据以上两类语句的执行运算规则,结合等价变换程序对复合语句的控制转移作用,该等价变换程序的方法的关键就是对语句执行和跳出进行分别处理。具体来说,就是在Java语言的循环语句中输入endStmt和endLoop两个标号变量,通过这两个变量分别处理语句跳出执行和循环执行的运算,达到等价变换的循环语句的目的。另一方面,为了简化Java语言中的循环语句,必须要清楚程序中的continue和break语句,其中具体的变换步骤可以分为4步:
1)首先就是将控制标志变量输入到Java循环语句中,当执行到循环语句的时候,先设定两个控制变量,将fales定义为开始值。其中endStmti是执行语句控制终止的,而endLoopi是执行循环语句控制跳出的。
2)将endLoop设定为循环语句的条件变量,并进行变量赋值的执行:在运算到continue循环语句的时候,就对结束剩下的语句运算;如果是执行到break循环语句的时候,要引用标志变量endLoop来处理。
3)无论是处理continue语句还是break语句,都要按照Java语言的规则构造相关的条件语句,并在重新开始执行endStmt变量后,附加条件运算剩下的连续语句。
4)在以上程序步骤完成以后,要重新给endLoop赋予初始值,并且循环的执行下去。
3 程序变换的运算方法
由于Java语言中,复合语句和循环语句的前面都可以附件标号,所以为了方便运算,可以将任何一个语句视为一个程序层面。其中数据结构方面,LABEL标号组可以通行于各个程序层之中,FLAG数组是用来为转移控制语句做标识处理,以下简单举例:
输入:s:设定成Java语句中的变换对象
n:将0赋予为初始值
输出:v:设定为Java语句组的变换结果
... ...
辅助函数
执行结束标号的消除
以上面的循环语句程序变换为例,其他无标号的循环语句也可以引用上述的运算方法,最终实现Java语言中循环语句的简化目的。
4 结束语
目前随着程序变换技术的进步,该方法已经逐步在静态分析系统中推广应用,基本满足Java语言程序中简化循环语句的需要,取得了令人满意的效果。
参考文献
[1]王众,廖湖声.用于简化Java循环语句的一种程序变换方法[J].计算机科学技术,2011(6).
[2]邱仲潘,等译.Java高级开发指南[M].电子工业出版社,2010(1).
作者简介
郝兆平(1969-),吉林伊通人,副教授,研究方向:计算机应用技术、会计电算化。
关键词 简化;Java循环语句;程序变换
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2014)23-0036-01
变幻与分析算法的复杂性问题存在于当前很多的程序分析和程序变换等软件中,为了简化程序中的语言,一般的方法就是在程序中使用变换预处理的技术,也就是将复杂的结构通过等价程序替换为简单的结构,从而实现降低程序变换与分析算法的复杂程度。本篇文章探讨了程序变换方法在简化JAVA循环语句中的应用情况,在将for和do-while语句转变为while语句的基础上,借用标准变量来清除retuen、continue以及break等语句,达到简化Java语句的目的。
1 JAVA语言源程序的组成结构
在Java语言编写中,源程序占有重要的地位。程序变换的输入与输出是源程序的主要组成部分,Java语言的源程序可以输出自己下一级的编写程序。其中控制语句在输出与输入中作用,可以采用语句结构的方法来描述,该语句结构同样也是Java语言源程序的组成结构,具体如下:
除了源程序中的控制语句是上述结构,在Java语言中的其他控制语句,只要没有特殊要求的话也按照上述方法来处理自身的语句结构。
2 等价变换程序的方法
在Java语言中的循环语句中,如果语句中含有continue或者break的话,就不能直接进行等价变换,首先要通过使用控制变量达到对语句逻辑的控制。具体而言,Java循环语句的变化方式如表1所表示情况。
根据JAVA循环语句的变换规律,该语言中不仅循环语句可以自己定义一个符号,复合语句也可以自定义符合。Java语言中循环语句和复合语句的定义规则,共同给予了continue和break语句使用标号的权力。其中由于break语句自身的复杂性,break语句使用标号情况可以分为以下三类:
1)第一类 break; 可以进行内层之外的循环运算。
2)第二类 break lab;可以进行lab标号之外语句的循环运算,等价变换程序会忽略break语句和标号下的循环语句,直接执行其他复合语句和循环语句的运算。
3)第三类 break lab;lab;可以进行lab标号之外复合语句的循环预算,同时还可以运算剩下的连续语句。等价变换程序会直接忽略break语句以及标号下的复合语句,直接进行其他复合语句和循环语句的运算。
另一方面,Java语言下continue语句只有两种标号情况,具体如下:
1)第一类continue;可以结束一部分循环语句体,转而执行其他的循环语句体。
2)第二类continue lab;可以结束lab标号之下的循环语句体,终止本轮执行并转到下一次的运算中。等价变换程序会忽略continue语句以及标号之下的语句,直接执行其他复合语句和循环语句的运算。
根据以上两类语句的执行运算规则,结合等价变换程序对复合语句的控制转移作用,该等价变换程序的方法的关键就是对语句执行和跳出进行分别处理。具体来说,就是在Java语言的循环语句中输入endStmt和endLoop两个标号变量,通过这两个变量分别处理语句跳出执行和循环执行的运算,达到等价变换的循环语句的目的。另一方面,为了简化Java语言中的循环语句,必须要清楚程序中的continue和break语句,其中具体的变换步骤可以分为4步:
1)首先就是将控制标志变量输入到Java循环语句中,当执行到循环语句的时候,先设定两个控制变量,将fales定义为开始值。其中endStmti是执行语句控制终止的,而endLoopi是执行循环语句控制跳出的。
2)将endLoop设定为循环语句的条件变量,并进行变量赋值的执行:在运算到continue循环语句的时候,就对结束剩下的语句运算;如果是执行到break循环语句的时候,要引用标志变量endLoop来处理。
3)无论是处理continue语句还是break语句,都要按照Java语言的规则构造相关的条件语句,并在重新开始执行endStmt变量后,附加条件运算剩下的连续语句。
4)在以上程序步骤完成以后,要重新给endLoop赋予初始值,并且循环的执行下去。
3 程序变换的运算方法
由于Java语言中,复合语句和循环语句的前面都可以附件标号,所以为了方便运算,可以将任何一个语句视为一个程序层面。其中数据结构方面,LABEL标号组可以通行于各个程序层之中,FLAG数组是用来为转移控制语句做标识处理,以下简单举例:
输入:s:设定成Java语句中的变换对象
n:将0赋予为初始值
输出:v:设定为Java语句组的变换结果
... ...
辅助函数
执行结束标号的消除
以上面的循环语句程序变换为例,其他无标号的循环语句也可以引用上述的运算方法,最终实现Java语言中循环语句的简化目的。
4 结束语
目前随着程序变换技术的进步,该方法已经逐步在静态分析系统中推广应用,基本满足Java语言程序中简化循环语句的需要,取得了令人满意的效果。
参考文献
[1]王众,廖湖声.用于简化Java循环语句的一种程序变换方法[J].计算机科学技术,2011(6).
[2]邱仲潘,等译.Java高级开发指南[M].电子工业出版社,2010(1).
作者简介
郝兆平(1969-),吉林伊通人,副教授,研究方向:计算机应用技术、会计电算化。