摘 要 由于目前程序變換與分析算法的復(fù)雜程度越來越高,因此簡化處理顯得尤為必要。本文主要探討了程序變換方法在簡化Java循環(huán)語句中的應(yīng)用情況,這種方法主要是通過簡化JAVA語言的組成結(jié)構(gòu)和語言現(xiàn)象,從而實現(xiàn)簡化Java循環(huán)語句的目的。
關(guān)鍵詞 簡化;Java循環(huán)語句;程序變換
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-7597(2014)23-0036-01
變幻與分析算法的復(fù)雜性問題存在于當(dāng)前很多的程序分析和程序變換等軟件中,為了簡化程序中的語言,一般的方法就是在程序中使用變換預(yù)處理的技術(shù),也就是將復(fù)雜的結(jié)構(gòu)通過等價程序替換為簡單的結(jié)構(gòu),從而實現(xiàn)降低程序變換與分析算法的復(fù)雜程度。本篇文章探討了程序變換方法在簡化JAVA循環(huán)語句中的應(yīng)用情況,在將for和do-while語句轉(zhuǎn)變?yōu)閣hile語句的基礎(chǔ)上,借用標(biāo)準(zhǔn)變量來清除retuen、continue以及break等語句,達(dá)到簡化Java語句的目的。
1 JAVA語言源程序的組成結(jié)構(gòu)
在Java語言編寫中,源程序占有重要的地位。程序變換的輸入與輸出是源程序的主要組成部分,Java語言的源程序可以輸出自己下一級的編寫程序。其中控制語句在輸出與輸入中作用,可以采用語句結(jié)構(gòu)的方法來描述,該語句結(jié)構(gòu)同樣也是Java語言源程序的組成結(jié)構(gòu),具體如下:
除了源程序中的控制語句是上述結(jié)構(gòu),在Java語言中的其他控制語句,只要沒有特殊要求的話也按照上述方法來處理自身的語句結(jié)構(gòu)。
2 等價變換程序的方法
在Java語言中的循環(huán)語句中,如果語句中含有continue或者break的話,就不能直接進行等價變換,首先要通過使用控制變量達(dá)到對語句邏輯的控制。具體而言,Java循環(huán)語句的變化方式如表1所表示情況。
根據(jù)JAVA循環(huán)語句的變換規(guī)律,該語言中不僅循環(huán)語句可以自己定義一個符號,復(fù)合語句也可以自定義符合。Java語言中循環(huán)語句和復(fù)合語句的定義規(guī)則,共同給予了continue和break語句使用標(biāo)號的權(quán)力。其中由于break語句自身的復(fù)雜性,break語句使用標(biāo)號情況可以分為以下三類:
1)第一類 break; 可以進行內(nèi)層之外的循環(huán)運算。
2)第二類 break lab;可以進行l(wèi)ab標(biāo)號之外語句的循環(huán)運算,等價變換程序會忽略break語句和標(biāo)號下的循環(huán)語句,直接執(zhí)行其他復(fù)合語句和循環(huán)語句的運算。
3)第三類 break lab;lab;可以進行l(wèi)ab標(biāo)號之外復(fù)合語句的循環(huán)預(yù)算,同時還可以運算剩下的連續(xù)語句。等價變換程序會直接忽略break語句以及標(biāo)號下的復(fù)合語句,直接進行其他復(fù)合語句和循環(huán)語句的運算。
另一方面,Java語言下continue語句只有兩種標(biāo)號情況,具體如下:
1)第一類continue;可以結(jié)束一部分循環(huán)語句體,轉(zhuǎn)而執(zhí)行其他的循環(huán)語句體。
2)第二類continue lab;可以結(jié)束lab標(biāo)號之下的循環(huán)語句體,終止本輪執(zhí)行并轉(zhuǎn)到下一次的運算中。等價變換程序會忽略continue語句以及標(biāo)號之下的語句,直接執(zhí)行其他復(fù)合語句和循環(huán)語句的運算。
根據(jù)以上兩類語句的執(zhí)行運算規(guī)則,結(jié)合等價變換程序?qū)?fù)合語句的控制轉(zhuǎn)移作用,該等價變換程序的方法的關(guān)鍵就是對語句執(zhí)行和跳出進行分別處理。具體來說,就是在Java語言的循環(huán)語句中輸入endStmt和endLoop兩個標(biāo)號變量,通過這兩個變量分別處理語句跳出執(zhí)行和循環(huán)執(zhí)行的運算,達(dá)到等價變換的循環(huán)語句的目的。另一方面,為了簡化Java語言中的循環(huán)語句,必須要清楚程序中的continue和break語句,其中具體的變換步驟可以分為4步:
1)首先就是將控制標(biāo)志變量輸入到Java循環(huán)語句中,當(dāng)執(zhí)行到循環(huán)語句的時候,先設(shè)定兩個控制變量,將fales定義為開始值。其中endStmti是執(zhí)行語句控制終止的,而endLoopi是執(zhí)行循環(huán)語句控制跳出的。
2)將endLoop設(shè)定為循環(huán)語句的條件變量,并進行變量賦值的執(zhí)行:在運算到continue循環(huán)語句的時候,就對結(jié)束剩下的語句運算;如果是執(zhí)行到break循環(huán)語句的時候,要引用標(biāo)志變量endLoop來處理。
3)無論是處理continue語句還是break語句,都要按照J(rèn)ava語言的規(guī)則構(gòu)造相關(guān)的條件語句,并在重新開始執(zhí)行endStmt變量后,附加條件運算剩下的連續(xù)語句。
4)在以上程序步驟完成以后,要重新給endLoop賦予初始值,并且循環(huán)的執(zhí)行下去。
3 程序變換的運算方法
由于Java語言中,復(fù)合語句和循環(huán)語句的前面都可以附件標(biāo)號,所以為了方便運算,可以將任何一個語句視為一個程序?qū)用妗F渲袛?shù)據(jù)結(jié)構(gòu)方面,LABEL標(biāo)號組可以通行于各個程序?qū)又?,F(xiàn)LAG數(shù)組是用來為轉(zhuǎn)移控制語句做標(biāo)識處理,以下簡單舉例:
輸入:s:設(shè)定成Java語句中的變換對象
n:將0賦予為初始值
輸出:v:設(shè)定為Java語句組的變換結(jié)果
... ...
輔助函數(shù)
執(zhí)行結(jié)束標(biāo)號的消除
以上面的循環(huán)語句程序變換為例,其他無標(biāo)號的循環(huán)語句也可以引用上述的運算方法,最終實現(xiàn)Java語言中循環(huán)語句的簡化目的。
4 結(jié)束語
目前隨著程序變換技術(shù)的進步,該方法已經(jīng)逐步在靜態(tài)分析系統(tǒng)中推廣應(yīng)用,基本滿足Java語言程序中簡化循環(huán)語句的需要,取得了令人滿意的效果。
參考文獻(xiàn)
[1]王眾,廖湖聲.用于簡化Java循環(huán)語句的一種程序變換方法[J].計算機科學(xué)技術(shù),2011(6).
[2]邱仲潘,等譯.Java高級開發(fā)指南[M].電子工業(yè)出版社,2010(1).
作者簡介
郝兆平(1969-),吉林伊通人,副教授,研究方向:計算機應(yīng)用技術(shù)、會計電算化。endprint
摘 要 由于目前程序變換與分析算法的復(fù)雜程度越來越高,因此簡化處理顯得尤為必要。本文主要探討了程序變換方法在簡化Java循環(huán)語句中的應(yīng)用情況,這種方法主要是通過簡化JAVA語言的組成結(jié)構(gòu)和語言現(xiàn)象,從而實現(xiàn)簡化Java循環(huán)語句的目的。
關(guān)鍵詞 簡化;Java循環(huán)語句;程序變換
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-7597(2014)23-0036-01
變幻與分析算法的復(fù)雜性問題存在于當(dāng)前很多的程序分析和程序變換等軟件中,為了簡化程序中的語言,一般的方法就是在程序中使用變換預(yù)處理的技術(shù),也就是將復(fù)雜的結(jié)構(gòu)通過等價程序替換為簡單的結(jié)構(gòu),從而實現(xiàn)降低程序變換與分析算法的復(fù)雜程度。本篇文章探討了程序變換方法在簡化JAVA循環(huán)語句中的應(yīng)用情況,在將for和do-while語句轉(zhuǎn)變?yōu)閣hile語句的基礎(chǔ)上,借用標(biāo)準(zhǔn)變量來清除retuen、continue以及break等語句,達(dá)到簡化Java語句的目的。
1 JAVA語言源程序的組成結(jié)構(gòu)
在Java語言編寫中,源程序占有重要的地位。程序變換的輸入與輸出是源程序的主要組成部分,Java語言的源程序可以輸出自己下一級的編寫程序。其中控制語句在輸出與輸入中作用,可以采用語句結(jié)構(gòu)的方法來描述,該語句結(jié)構(gòu)同樣也是Java語言源程序的組成結(jié)構(gòu),具體如下:
除了源程序中的控制語句是上述結(jié)構(gòu),在Java語言中的其他控制語句,只要沒有特殊要求的話也按照上述方法來處理自身的語句結(jié)構(gòu)。
2 等價變換程序的方法
在Java語言中的循環(huán)語句中,如果語句中含有continue或者break的話,就不能直接進行等價變換,首先要通過使用控制變量達(dá)到對語句邏輯的控制。具體而言,Java循環(huán)語句的變化方式如表1所表示情況。
根據(jù)JAVA循環(huán)語句的變換規(guī)律,該語言中不僅循環(huán)語句可以自己定義一個符號,復(fù)合語句也可以自定義符合。Java語言中循環(huán)語句和復(fù)合語句的定義規(guī)則,共同給予了continue和break語句使用標(biāo)號的權(quán)力。其中由于break語句自身的復(fù)雜性,break語句使用標(biāo)號情況可以分為以下三類:
1)第一類 break; 可以進行內(nèi)層之外的循環(huán)運算。
2)第二類 break lab;可以進行l(wèi)ab標(biāo)號之外語句的循環(huán)運算,等價變換程序會忽略break語句和標(biāo)號下的循環(huán)語句,直接執(zhí)行其他復(fù)合語句和循環(huán)語句的運算。
3)第三類 break lab;lab;可以進行l(wèi)ab標(biāo)號之外復(fù)合語句的循環(huán)預(yù)算,同時還可以運算剩下的連續(xù)語句。等價變換程序會直接忽略break語句以及標(biāo)號下的復(fù)合語句,直接進行其他復(fù)合語句和循環(huán)語句的運算。
另一方面,Java語言下continue語句只有兩種標(biāo)號情況,具體如下:
1)第一類continue;可以結(jié)束一部分循環(huán)語句體,轉(zhuǎn)而執(zhí)行其他的循環(huán)語句體。
2)第二類continue lab;可以結(jié)束lab標(biāo)號之下的循環(huán)語句體,終止本輪執(zhí)行并轉(zhuǎn)到下一次的運算中。等價變換程序會忽略continue語句以及標(biāo)號之下的語句,直接執(zhí)行其他復(fù)合語句和循環(huán)語句的運算。
根據(jù)以上兩類語句的執(zhí)行運算規(guī)則,結(jié)合等價變換程序?qū)?fù)合語句的控制轉(zhuǎn)移作用,該等價變換程序的方法的關(guān)鍵就是對語句執(zhí)行和跳出進行分別處理。具體來說,就是在Java語言的循環(huán)語句中輸入endStmt和endLoop兩個標(biāo)號變量,通過這兩個變量分別處理語句跳出執(zhí)行和循環(huán)執(zhí)行的運算,達(dá)到等價變換的循環(huán)語句的目的。另一方面,為了簡化Java語言中的循環(huán)語句,必須要清楚程序中的continue和break語句,其中具體的變換步驟可以分為4步:
1)首先就是將控制標(biāo)志變量輸入到Java循環(huán)語句中,當(dāng)執(zhí)行到循環(huán)語句的時候,先設(shè)定兩個控制變量,將fales定義為開始值。其中endStmti是執(zhí)行語句控制終止的,而endLoopi是執(zhí)行循環(huán)語句控制跳出的。
2)將endLoop設(shè)定為循環(huán)語句的條件變量,并進行變量賦值的執(zhí)行:在運算到continue循環(huán)語句的時候,就對結(jié)束剩下的語句運算;如果是執(zhí)行到break循環(huán)語句的時候,要引用標(biāo)志變量endLoop來處理。
3)無論是處理continue語句還是break語句,都要按照J(rèn)ava語言的規(guī)則構(gòu)造相關(guān)的條件語句,并在重新開始執(zhí)行endStmt變量后,附加條件運算剩下的連續(xù)語句。
4)在以上程序步驟完成以后,要重新給endLoop賦予初始值,并且循環(huán)的執(zhí)行下去。
3 程序變換的運算方法
由于Java語言中,復(fù)合語句和循環(huán)語句的前面都可以附件標(biāo)號,所以為了方便運算,可以將任何一個語句視為一個程序?qū)用?。其中?shù)據(jù)結(jié)構(gòu)方面,LABEL標(biāo)號組可以通行于各個程序?qū)又?,F(xiàn)LAG數(shù)組是用來為轉(zhuǎn)移控制語句做標(biāo)識處理,以下簡單舉例:
輸入:s:設(shè)定成Java語句中的變換對象
n:將0賦予為初始值
輸出:v:設(shè)定為Java語句組的變換結(jié)果
... ...
輔助函數(shù)
執(zhí)行結(jié)束標(biāo)號的消除
以上面的循環(huán)語句程序變換為例,其他無標(biāo)號的循環(huán)語句也可以引用上述的運算方法,最終實現(xiàn)Java語言中循環(huán)語句的簡化目的。
4 結(jié)束語
目前隨著程序變換技術(shù)的進步,該方法已經(jīng)逐步在靜態(tài)分析系統(tǒng)中推廣應(yīng)用,基本滿足Java語言程序中簡化循環(huán)語句的需要,取得了令人滿意的效果。
參考文獻(xiàn)
[1]王眾,廖湖聲.用于簡化Java循環(huán)語句的一種程序變換方法[J].計算機科學(xué)技術(shù),2011(6).
[2]邱仲潘,等譯.Java高級開發(fā)指南[M].電子工業(yè)出版社,2010(1).
作者簡介
郝兆平(1969-),吉林伊通人,副教授,研究方向:計算機應(yīng)用技術(shù)、會計電算化。endprint
摘 要 由于目前程序變換與分析算法的復(fù)雜程度越來越高,因此簡化處理顯得尤為必要。本文主要探討了程序變換方法在簡化Java循環(huán)語句中的應(yīng)用情況,這種方法主要是通過簡化JAVA語言的組成結(jié)構(gòu)和語言現(xiàn)象,從而實現(xiàn)簡化Java循環(huán)語句的目的。
關(guān)鍵詞 簡化;Java循環(huán)語句;程序變換
中圖分類號:TP3 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-7597(2014)23-0036-01
變幻與分析算法的復(fù)雜性問題存在于當(dāng)前很多的程序分析和程序變換等軟件中,為了簡化程序中的語言,一般的方法就是在程序中使用變換預(yù)處理的技術(shù),也就是將復(fù)雜的結(jié)構(gòu)通過等價程序替換為簡單的結(jié)構(gòu),從而實現(xiàn)降低程序變換與分析算法的復(fù)雜程度。本篇文章探討了程序變換方法在簡化JAVA循環(huán)語句中的應(yīng)用情況,在將for和do-while語句轉(zhuǎn)變?yōu)閣hile語句的基礎(chǔ)上,借用標(biāo)準(zhǔn)變量來清除retuen、continue以及break等語句,達(dá)到簡化Java語句的目的。
1 JAVA語言源程序的組成結(jié)構(gòu)
在Java語言編寫中,源程序占有重要的地位。程序變換的輸入與輸出是源程序的主要組成部分,Java語言的源程序可以輸出自己下一級的編寫程序。其中控制語句在輸出與輸入中作用,可以采用語句結(jié)構(gòu)的方法來描述,該語句結(jié)構(gòu)同樣也是Java語言源程序的組成結(jié)構(gòu),具體如下:
除了源程序中的控制語句是上述結(jié)構(gòu),在Java語言中的其他控制語句,只要沒有特殊要求的話也按照上述方法來處理自身的語句結(jié)構(gòu)。
2 等價變換程序的方法
在Java語言中的循環(huán)語句中,如果語句中含有continue或者break的話,就不能直接進行等價變換,首先要通過使用控制變量達(dá)到對語句邏輯的控制。具體而言,Java循環(huán)語句的變化方式如表1所表示情況。
根據(jù)JAVA循環(huán)語句的變換規(guī)律,該語言中不僅循環(huán)語句可以自己定義一個符號,復(fù)合語句也可以自定義符合。Java語言中循環(huán)語句和復(fù)合語句的定義規(guī)則,共同給予了continue和break語句使用標(biāo)號的權(quán)力。其中由于break語句自身的復(fù)雜性,break語句使用標(biāo)號情況可以分為以下三類:
1)第一類 break; 可以進行內(nèi)層之外的循環(huán)運算。
2)第二類 break lab;可以進行l(wèi)ab標(biāo)號之外語句的循環(huán)運算,等價變換程序會忽略break語句和標(biāo)號下的循環(huán)語句,直接執(zhí)行其他復(fù)合語句和循環(huán)語句的運算。
3)第三類 break lab;lab;可以進行l(wèi)ab標(biāo)號之外復(fù)合語句的循環(huán)預(yù)算,同時還可以運算剩下的連續(xù)語句。等價變換程序會直接忽略break語句以及標(biāo)號下的復(fù)合語句,直接進行其他復(fù)合語句和循環(huán)語句的運算。
另一方面,Java語言下continue語句只有兩種標(biāo)號情況,具體如下:
1)第一類continue;可以結(jié)束一部分循環(huán)語句體,轉(zhuǎn)而執(zhí)行其他的循環(huán)語句體。
2)第二類continue lab;可以結(jié)束lab標(biāo)號之下的循環(huán)語句體,終止本輪執(zhí)行并轉(zhuǎn)到下一次的運算中。等價變換程序會忽略continue語句以及標(biāo)號之下的語句,直接執(zhí)行其他復(fù)合語句和循環(huán)語句的運算。
根據(jù)以上兩類語句的執(zhí)行運算規(guī)則,結(jié)合等價變換程序?qū)?fù)合語句的控制轉(zhuǎn)移作用,該等價變換程序的方法的關(guān)鍵就是對語句執(zhí)行和跳出進行分別處理。具體來說,就是在Java語言的循環(huán)語句中輸入endStmt和endLoop兩個標(biāo)號變量,通過這兩個變量分別處理語句跳出執(zhí)行和循環(huán)執(zhí)行的運算,達(dá)到等價變換的循環(huán)語句的目的。另一方面,為了簡化Java語言中的循環(huán)語句,必須要清楚程序中的continue和break語句,其中具體的變換步驟可以分為4步:
1)首先就是將控制標(biāo)志變量輸入到Java循環(huán)語句中,當(dāng)執(zhí)行到循環(huán)語句的時候,先設(shè)定兩個控制變量,將fales定義為開始值。其中endStmti是執(zhí)行語句控制終止的,而endLoopi是執(zhí)行循環(huán)語句控制跳出的。
2)將endLoop設(shè)定為循環(huán)語句的條件變量,并進行變量賦值的執(zhí)行:在運算到continue循環(huán)語句的時候,就對結(jié)束剩下的語句運算;如果是執(zhí)行到break循環(huán)語句的時候,要引用標(biāo)志變量endLoop來處理。
3)無論是處理continue語句還是break語句,都要按照J(rèn)ava語言的規(guī)則構(gòu)造相關(guān)的條件語句,并在重新開始執(zhí)行endStmt變量后,附加條件運算剩下的連續(xù)語句。
4)在以上程序步驟完成以后,要重新給endLoop賦予初始值,并且循環(huán)的執(zhí)行下去。
3 程序變換的運算方法
由于Java語言中,復(fù)合語句和循環(huán)語句的前面都可以附件標(biāo)號,所以為了方便運算,可以將任何一個語句視為一個程序?qū)用妗F渲袛?shù)據(jù)結(jié)構(gòu)方面,LABEL標(biāo)號組可以通行于各個程序?qū)又?,F(xiàn)LAG數(shù)組是用來為轉(zhuǎn)移控制語句做標(biāo)識處理,以下簡單舉例:
輸入:s:設(shè)定成Java語句中的變換對象
n:將0賦予為初始值
輸出:v:設(shè)定為Java語句組的變換結(jié)果
... ...
輔助函數(shù)
執(zhí)行結(jié)束標(biāo)號的消除
以上面的循環(huán)語句程序變換為例,其他無標(biāo)號的循環(huán)語句也可以引用上述的運算方法,最終實現(xiàn)Java語言中循環(huán)語句的簡化目的。
4 結(jié)束語
目前隨著程序變換技術(shù)的進步,該方法已經(jīng)逐步在靜態(tài)分析系統(tǒng)中推廣應(yīng)用,基本滿足Java語言程序中簡化循環(huán)語句的需要,取得了令人滿意的效果。
參考文獻(xiàn)
[1]王眾,廖湖聲.用于簡化Java循環(huán)語句的一種程序變換方法[J].計算機科學(xué)技術(shù),2011(6).
[2]邱仲潘,等譯.Java高級開發(fā)指南[M].電子工業(yè)出版社,2010(1).
作者簡介
郝兆平(1969-),吉林伊通人,副教授,研究方向:計算機應(yīng)用技術(shù)、會計電算化。endprint