本發(fā)明實(shí)施例涉及軟件形式化驗(yàn)證技術(shù)領(lǐng)域,尤其涉及一種程序語(yǔ)句形式化轉(zhuǎn)換的方法及裝置。
背景技術(shù):
隨著航空技術(shù)的不斷發(fā)展,航空軟件的規(guī)模急劇增加。例如,美國(guó)最新的聯(lián)合攻擊機(jī)F-35的軟件(Final Block 3 Software)計(jì)劃的規(guī)模已經(jīng)達(dá)到了860萬(wàn)行的程序。
隨著軟件規(guī)模的增加,軟件也越來(lái)越復(fù)雜。常規(guī)的基于測(cè)試的方法對(duì)軟件進(jìn)行驗(yàn)證的無(wú)法做到完全測(cè)試,即無(wú)法找出軟件中存在的所有問(wèn)題。因此,形式化驗(yàn)證方法開(kāi)始應(yīng)用于軟件驗(yàn)證。通常專業(yè)人員多采用基于定理證明的形式化驗(yàn)證方法,該方法中需將待驗(yàn)證的程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式。由于軟件規(guī)模較大,這一形式化轉(zhuǎn)換過(guò)程的工作量非常大。
目前,通過(guò)人工方法將待驗(yàn)證的程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式,由于軟件規(guī)模較大,將待驗(yàn)證的程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式的過(guò)程的工作量非常大,效率低,耗費(fèi)大量時(shí)間及人力。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種程序語(yǔ)句形式化轉(zhuǎn)換的方法及裝置,以解決目前通過(guò)人工方法將待驗(yàn)證的程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式,工作量非常大,效率低,耗費(fèi)大量時(shí)間及人力的問(wèn)題。
本發(fā)明實(shí)施例的一個(gè)方面是提供一種程序語(yǔ)句形式化轉(zhuǎn)換的方法,包括:
獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu);
根據(jù)所述程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定所述程序語(yǔ)句的類型;
根據(jù)各所述程序語(yǔ)句的類型,生成所述程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式;
其中,所述程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式用于表示所述程序語(yǔ)句的任意一個(gè)輸出變量值與各輸入變量值之間的關(guān)系。
本發(fā)明實(shí)施例的另一個(gè)方面是提供一種程序語(yǔ)句形式化轉(zhuǎn)換的裝置,包括:
獲取模塊,用于獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu);
確定模塊,用于根據(jù)所述程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定所述程序語(yǔ)句的類型;
處理模塊,用于根據(jù)各所述程序語(yǔ)句的類型,生成所述程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式;
其中,所述程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式用于表示所述程序語(yǔ)句的任意一個(gè)輸出變量值與各輸入變量值之間的關(guān)系。
本發(fā)明實(shí)施例提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法及裝置,通過(guò)獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),根據(jù)所述程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定所述程序語(yǔ)句的類型;根據(jù)所述程序語(yǔ)句的類型,生成所述程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,實(shí)現(xiàn)了將程序語(yǔ)句自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式,大大提高了程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式的效率,節(jié)省了大量時(shí)間及人力。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖;
圖2為本發(fā)明實(shí)施例三提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖;
圖3為本發(fā)明實(shí)施例四提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖;
圖4為本發(fā)明實(shí)施例五提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖;
圖5為本發(fā)明實(shí)施例六提供的程序語(yǔ)句形式化轉(zhuǎn)換的裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明的技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法及裝置適用于采用命令式程序設(shè)計(jì)語(yǔ)言編寫(xiě)的面向過(guò)程的程序。命令式程序設(shè)計(jì)語(yǔ)言是基于動(dòng)作的計(jì)算機(jī)語(yǔ)言,以馮諾依曼計(jì)算機(jī)體系結(jié)構(gòu)為背景。采用命令式程序設(shè)計(jì)語(yǔ)言編寫(xiě)的面向過(guò)程的程序的主結(jié)構(gòu)是由多個(gè)函數(shù)構(gòu)成,函數(shù)包括輸入?yún)?shù)、返回值、計(jì)算過(guò)程,計(jì)算過(guò)程采用一段程序語(yǔ)句實(shí)現(xiàn)。實(shí)現(xiàn)程序所采用的編程語(yǔ)言可以是現(xiàn)有的命令式程序設(shè)計(jì)語(yǔ)言中的任意一種,例如C語(yǔ)言或類C語(yǔ)言的編程語(yǔ)言等。
實(shí)施例一
圖1為本發(fā)明實(shí)施例一提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖。本發(fā)明實(shí)施例針對(duì)目前通過(guò)人工方法將待驗(yàn)證的程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式,工作量非常大,效率低,耗費(fèi)大量時(shí)間及人力的問(wèn)題,提供了程序語(yǔ)句形式化轉(zhuǎn)換的方法,該方法具體步驟如下:
步驟S101、獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu)。
本實(shí)施例中,方法的執(zhí)行主體根據(jù)預(yù)先設(shè)定的程序語(yǔ)句編寫(xiě)所采用的計(jì)算機(jī)語(yǔ)言,可以自動(dòng)獲取程序語(yǔ)句所采用的計(jì)算機(jī)語(yǔ)言的BNF范式(Backus-Naur Form,巴科斯范式),并可以進(jìn)一步確定程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)。
通常BNF范式用于描述計(jì)算機(jī)語(yǔ)言語(yǔ)法的符號(hào)集,通常不同的語(yǔ)法結(jié)構(gòu)的計(jì)算機(jī)語(yǔ)言對(duì)應(yīng)的BNF范式不同。不同的命令式程序設(shè)計(jì)語(yǔ)言的語(yǔ)法結(jié)構(gòu)不同,對(duì)應(yīng)于不同的BNF范式。
本實(shí)施例的方法適用于函數(shù)中實(shí)現(xiàn)計(jì)算過(guò)程的一段程序語(yǔ)句的形式化轉(zhuǎn)換,可以將函數(shù)中的程序語(yǔ)句轉(zhuǎn)化為其對(duì)應(yīng)的邏輯表達(dá)式。
在本發(fā)明的另一實(shí)施方式中,獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),可以采用以下方式實(shí)現(xiàn):獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的BNF范式,根據(jù)所述BNF范式,生成語(yǔ)法分析器,通過(guò)所述語(yǔ)法分析器,生成所述程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法樹(shù)。
其中,待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的BNF范式可以根據(jù)待轉(zhuǎn)換程序語(yǔ)句使用的編程語(yǔ)言確定,根據(jù)編程語(yǔ)言確定其對(duì)應(yīng)的BNF范式的方法可以采用現(xiàn)有技術(shù)用任意一種方法實(shí)現(xiàn),本實(shí)施例不再贅述。
可選的,可以利用現(xiàn)有的語(yǔ)法分析工具,根據(jù)所述BNF范式,生成語(yǔ)法分析器。例如,可以選用Yacc(Yet Another Compiler Compiler),Antlr (Another Tool for Language Recognition),JavaCC(Java Compiler Compiler)等現(xiàn)有的語(yǔ)法分析工具中的任意一種。
步驟S102、根據(jù)程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定程序語(yǔ)句的類型。
本實(shí)施例中,程序語(yǔ)句主要包括以下幾種基礎(chǔ)類型的語(yǔ)句:賦值語(yǔ)句、條件語(yǔ)句、組合語(yǔ)句和循環(huán)語(yǔ)句,不同類型的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu)不同,通過(guò)分析程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)可以確定程序語(yǔ)句的類型。
本發(fā)明實(shí)施例中,執(zhí)行裝置可以自動(dòng)識(shí)別程序語(yǔ)句中的輸入變量和輸出變量,并對(duì)輸入變量做標(biāo)記,以與輸出變量進(jìn)行區(qū)分。例如,可以為輸入變量添加上標(biāo)“0”等標(biāo)記。本實(shí)施例中,帶有上標(biāo)“0”的表達(dá)式表示輸入變量。例如對(duì)于一個(gè)變量,如果其表達(dá)式為v0,表達(dá)式中帶有上標(biāo)“0”,則表示該變量為輸入變量;如果其表達(dá)式為v,表達(dá)式中沒(méi)有上標(biāo)“0”,則表示該變量為輸出變量;如果輸入變量為常數(shù)值,則不帶上標(biāo),以與指數(shù)表達(dá)式進(jìn)行區(qū)分。另外,本實(shí)施例中可以采用現(xiàn)有技術(shù)中的任意一種自動(dòng)識(shí)別程序語(yǔ)句中的輸入變量和輸出變量的方法,本發(fā)明實(shí)施例對(duì)此不做具體限定。
賦值語(yǔ)句包括一個(gè)輸出變量和一個(gè)輸入變量,該輸入變量可以是常量或者是用數(shù)學(xué)表達(dá)式表示的變量值。賦值語(yǔ)句的語(yǔ)法結(jié)構(gòu)可以表示為“x=e1”,其中x表示輸出變量,e1表示輸入變量,“=”是賦值運(yùn)算符。
條件語(yǔ)句包括真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句,其中真值表達(dá)式為輸入變量,第一子語(yǔ)句和第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式作為輸出變量。其中第一子語(yǔ)句和第二子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。賦值語(yǔ)句的語(yǔ)法結(jié)構(gòu)可以表示為“if(e2){S1}else{S2}”,其中e2表示真值表達(dá)式、S1表示第一子語(yǔ)句,S2表示第二子語(yǔ)句。該真值表達(dá)式可以是常量值,或者是用數(shù)學(xué)表達(dá)式表示的變量值。條件語(yǔ)句的語(yǔ)義為:當(dāng)真值表達(dá)式為真時(shí),執(zhí)行第一子語(yǔ)句,反之,當(dāng)真值表達(dá)式為假時(shí),執(zhí)行第二子語(yǔ)句。
組合語(yǔ)句包括至少兩個(gè)子語(yǔ)句,每個(gè)子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。在執(zhí)行時(shí),組合語(yǔ)句中的至少兩個(gè)子語(yǔ)句按照先后順序依次執(zhí)行,在前的子語(yǔ)句的輸出變量可能會(huì)作為在后子語(yǔ)句的輸入變量,此時(shí)在前的子語(yǔ)句的執(zhí)行結(jié)果會(huì)影響在后執(zhí)行的子語(yǔ)句的執(zhí)行結(jié)果。組合語(yǔ)句包括三個(gè)子語(yǔ)句時(shí),該組合語(yǔ)句的語(yǔ)法結(jié)構(gòu)可以表示為“S3;S4;”,其中,S3,S4分別表示該組合語(yǔ)句中按給定的順序排列的兩個(gè)個(gè)子語(yǔ)句。
循環(huán)語(yǔ)句包括循環(huán)條件和循環(huán)體,循環(huán)體包括至少一個(gè)子語(yǔ)句,每個(gè)子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。本實(shí)施例中,可以將循環(huán)語(yǔ)句中的while語(yǔ)句進(jìn)行形式化轉(zhuǎn)換,while語(yǔ)句可以表示為“while(e3){R}”,其中,“while”為循環(huán)語(yǔ)句的關(guān)鍵字中的一種,e3表示循環(huán)條件,R表示循環(huán)體。該循環(huán)條件可以是用數(shù)學(xué)表達(dá)式表示的變量值。另外,循環(huán)語(yǔ)句還可以是現(xiàn)有技術(shù)中其他任意一種其他類型的循環(huán)語(yǔ)句,任意其他類型的循環(huán)語(yǔ)句都可以轉(zhuǎn)換為while語(yǔ)句。對(duì)其他類型的循環(huán)語(yǔ)句的形式化轉(zhuǎn)換可以通過(guò)將其轉(zhuǎn)換為其對(duì)應(yīng)的while語(yǔ)句,再將其對(duì)應(yīng)的while語(yǔ)句進(jìn)行形式化轉(zhuǎn)換來(lái)實(shí)現(xiàn)。本實(shí)施例中,可以采用現(xiàn)有技術(shù)中任意一種將其他類型的循環(huán)語(yǔ)句的形式化轉(zhuǎn)換可以通過(guò)將其轉(zhuǎn)換為其對(duì)應(yīng)的while語(yǔ)句,本實(shí)施例對(duì)此不作具體限定。
本實(shí)施例中,程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)具有可嵌套和可遞歸的特點(diǎn),程序的語(yǔ)法結(jié)構(gòu)可以用語(yǔ)法樹(shù)表示。程序語(yǔ)句的基礎(chǔ)類型為賦值語(yǔ)句和條件語(yǔ)句,組合語(yǔ)句和循環(huán)語(yǔ)句可以表示為多個(gè)賦值語(yǔ)句和/或條件語(yǔ)句嵌套組合的結(jié)果。例如,條件語(yǔ)句包括的第一子語(yǔ)句和第二子語(yǔ)句,其中第一子語(yǔ)句可以是賦值語(yǔ)句,第二子語(yǔ)句可以是條件語(yǔ)句;組合語(yǔ)句包括第三子語(yǔ)句和第四子語(yǔ)句,其中第三子語(yǔ)句為條件語(yǔ)句,第四子語(yǔ)句為賦值語(yǔ)句;或者,第三子語(yǔ)句為賦值語(yǔ)句,第四子語(yǔ)句為組合語(yǔ)句;循環(huán)語(yǔ)句的循環(huán)體包括兩個(gè)子語(yǔ)句,分別為賦值語(yǔ)句和條件語(yǔ)句,則可以理解為該循環(huán)體包括一個(gè)組合語(yǔ)句。
需要說(shuō)明的是,本實(shí)施例中給出的各類型程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)僅為舉例說(shuō)明,各類型的程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)還可以是現(xiàn)有技術(shù)中任意一種對(duì)應(yīng)類型程序語(yǔ)句的語(yǔ)法結(jié)構(gòu),根據(jù)程序語(yǔ)句對(duì)應(yīng)的BNF范式,均可以對(duì)程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)進(jìn)行識(shí)別,本發(fā)明實(shí)施例對(duì)于各類型程序語(yǔ)句的語(yǔ)法結(jié)構(gòu)不做具體限定。
步驟S103、根據(jù)程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
其中,程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式用于表示程序語(yǔ)句的任意一個(gè)輸出變量值與各輸入變量值之間的關(guān)系。
本實(shí)施例中,每一段程序語(yǔ)句本質(zhì)上描述的是輸入變量記載的初始值與輸出變量記載的結(jié)果值的關(guān)系,而輸出變量與輸入變量的關(guān)系可以通過(guò)邏輯表達(dá)式描述出來(lái)的。每段程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式是由多個(gè)由與邏輯運(yùn)算符“∧”連接的子表達(dá)式組成,每個(gè)子表達(dá)式表示一個(gè)輸出變量與其他輸入變量之間的關(guān)系。
本發(fā)明實(shí)施例通過(guò)獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),根據(jù)程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定程序語(yǔ)句的類型;根據(jù)程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,實(shí)現(xiàn)了將程序語(yǔ)句自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式,大大提高了程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式的效率,節(jié)省了大量時(shí)間及人力。
實(shí)施例二
在上述實(shí)施例一的基礎(chǔ)上,本實(shí)施例二中,如果程序語(yǔ)句的類型為賦值語(yǔ)句,根據(jù)程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,具體包括:根據(jù)公式(1),生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
其中,x表示輸出變量,表示輸入變量,A表示將所輸出變量賦值為輸入變量的謂詞表達(dá)式。
本實(shí)施例中,賦值語(yǔ)句包括一個(gè)輸出變量和一個(gè)輸入變量。用x表示輸出變量,用表示輸入變量,賦值語(yǔ)句的語(yǔ)法結(jié)構(gòu)可以表示為將該程序語(yǔ)句轉(zhuǎn)換為形如的邏輯表達(dá)式,其中“=”是賦值運(yùn)算符,A表示將所輸出變量賦值為輸入變量的謂詞表達(dá)式。該邏輯表達(dá)式的含義為將輸入變量值賦值給輸出變量x。
例如,程序語(yǔ)句為“a=5”,類型為賦值語(yǔ)句,對(duì)程序語(yǔ)句進(jìn)行形式轉(zhuǎn)換得到其對(duì)應(yīng)的邏輯表達(dá)式為A(a,5)。
本實(shí)施例中,賦值運(yùn)算符左邊的變量為輸出變量,賦值運(yùn)算符右邊的變量為輸入變量。賦值語(yǔ)句中的輸入變量可以有多個(gè),此時(shí)賦值運(yùn)算符右邊的部分為多個(gè)輸入變量的運(yùn)算表達(dá)式。
例如,程序語(yǔ)句為“a=b+5”,其中,輸入變量為:b+5,此時(shí),輸入變量為用數(shù)學(xué)表達(dá)式表示的變量值,隨著變量b的不同發(fā)生改變。輸出變量為a,對(duì)輸入變量標(biāo)記完成后該程序語(yǔ)句可以表示為“a=b0+5”,類型為賦值語(yǔ)句,對(duì)程序語(yǔ)句進(jìn)行形式轉(zhuǎn)換得到其對(duì)應(yīng)的邏輯表達(dá)式為A(a,b0+5)。
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為賦值語(yǔ)句,將該程序語(yǔ)句轉(zhuǎn)換為實(shí)現(xiàn)了類型為賦值語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式。
實(shí)施例三
圖2為本發(fā)明實(shí)施例三提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖。在上述實(shí)施例二基礎(chǔ)上,本實(shí)施例三中,如果程序語(yǔ)句的類型為條件語(yǔ)句,程序語(yǔ)句包括真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句。如圖2所示,根據(jù)該程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,具體包括以下步驟:
步驟S201、獲取程序語(yǔ)句的真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句。
本實(shí)施例中,根據(jù)程序語(yǔ)句的類型,自動(dòng)獲取程序語(yǔ)句的真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句。這一過(guò)程可以在根據(jù)程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定程序語(yǔ)句的類型的過(guò)程中同時(shí)進(jìn)行。
本實(shí)施例中,根據(jù)程序語(yǔ)句的語(yǔ)法結(jié)構(gòu),識(shí)別出真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句的過(guò)程,可以采用現(xiàn)有技術(shù)中任意一種方法實(shí)現(xiàn),本發(fā)明實(shí)施例對(duì)此不做具體限定。
步驟S202、根據(jù)第一子語(yǔ)句和第二子語(yǔ)句的類型,分別生成第一子語(yǔ)句和第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
其中,第一子語(yǔ)句和第二子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。
條件語(yǔ)句的語(yǔ)義為:當(dāng)真值表達(dá)式為真時(shí),執(zhí)行第一子語(yǔ)句,反之,當(dāng)真值表達(dá)式為假時(shí),執(zhí)行第二子語(yǔ)句。
本實(shí)施例中,條件語(yǔ)句的語(yǔ)法結(jié)構(gòu)有可嵌套和可遞歸的特點(diǎn),條件語(yǔ)句中的各個(gè)子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。在生成該條件語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式之前,首先生成各個(gè)子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。生成各個(gè)子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的方法可以遞歸使用生成各類型的程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的方法。
例如,給定類型為條件語(yǔ)句的程序語(yǔ)句,對(duì)該程序語(yǔ)句中的輸入變量用上標(biāo)“0”進(jìn)行標(biāo)記后如下:
if(a0>b0){x=1}else{x=2}
在上述步驟S201中,根據(jù)該程序語(yǔ)句的類型以及語(yǔ)法結(jié)構(gòu),可以獲取到該程序語(yǔ)句的真值表達(dá)式為a0>b0,第一子語(yǔ)句為x=1,第二子語(yǔ)句為x=2。第一子語(yǔ)句和第二子語(yǔ)句均為類型為賦值語(yǔ)句的程序語(yǔ)句。在該步驟中,根據(jù)第一子語(yǔ)句的類型是賦值語(yǔ)句,根據(jù)上述實(shí)施例中生成類型為賦值語(yǔ)句的程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的方法,可以生成第一子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式A(x,1),記為r1。同理,第二子語(yǔ)句的類型是賦值語(yǔ)句,可以生成第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式A(x,2),記為r2。
步驟S203、根據(jù)公式(2),生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式;
其中,表示真值表達(dá)式,r1表示第一子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,r2表示第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,→為蘊(yùn)含運(yùn)算符,∧為與運(yùn)算符,為非運(yùn)算符。
在公式(2)所示的邏輯表達(dá)式中,當(dāng)e0為真時(shí),為永真式,該邏輯表達(dá)式可以簡(jiǎn)化為與條件語(yǔ)句中當(dāng)真值表達(dá)式為真時(shí),執(zhí)行第一子語(yǔ)句的語(yǔ)義一致。反之,當(dāng)e0為假時(shí),e0→r1為永真式,該邏輯表達(dá)式可以簡(jiǎn)化為與條件語(yǔ)句中當(dāng)真值表達(dá)式為假時(shí),執(zhí)行第二子語(yǔ)句的語(yǔ)義一致。
該步驟中,根據(jù)上述步驟S202中生成的第一子語(yǔ)句和第二子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式r1和r2,根據(jù)公式(2)生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
例如,基于上述步驟S202中的舉例,給定類型為條件語(yǔ)句的程序語(yǔ)句,對(duì)該程序語(yǔ)句中的輸入變量用上標(biāo)“0”進(jìn)行標(biāo)記后如下:
if(a0>b0){x=1}else{x=2}
該程序語(yǔ)句的真值表達(dá)式為a0>b0,第一子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式為A(x,1),第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式為A(x,2),根據(jù)公式(2)可以得到程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式如下:
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為條件語(yǔ)句,自動(dòng)獲取程序語(yǔ)句的真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句,分別生成第一子語(yǔ)句和第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,并自動(dòng)生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,實(shí)現(xiàn)了類型為條件語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式
實(shí)施例四
圖3為本發(fā)明實(shí)施例四提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖。在上述實(shí)施例三基礎(chǔ)上,本實(shí)施例四中,如果程序語(yǔ)句的類型為組合語(yǔ)句,程序語(yǔ)句包括至少兩個(gè)子語(yǔ)句。如圖3所示,根據(jù)該程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,具體包括以下步驟:
步驟S301、按照各子語(yǔ)句的執(zhí)行順序,將至少兩個(gè)子語(yǔ)句劃分為第三子語(yǔ)句和第四子語(yǔ)句,第三子語(yǔ)句在第四子語(yǔ)句之前。
本實(shí)施例中,程序語(yǔ)句包括至少兩個(gè)子語(yǔ)句,當(dāng)程序語(yǔ)句包含子語(yǔ)句的個(gè)數(shù)大于2時(shí),將程序語(yǔ)句中的多個(gè)子語(yǔ)句按照各子語(yǔ)句的執(zhí)行順序,劃分為第三子語(yǔ)句和第四子語(yǔ)句,其中第三子語(yǔ)句和第四子語(yǔ)句相當(dāng)于包括至少一個(gè)子語(yǔ)句的程序語(yǔ)句。如果第三子語(yǔ)句包括多個(gè)子語(yǔ)句,則第三語(yǔ)句相當(dāng)于一個(gè)類型為組合語(yǔ)句的程序語(yǔ)句。同理,如果第四子語(yǔ)句包括多個(gè)子語(yǔ)句,則第四語(yǔ)句相當(dāng)于一個(gè)類型為組合語(yǔ)句的程序語(yǔ)句。另外,第三子語(yǔ)句和第四子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。
例如,待轉(zhuǎn)換的程序語(yǔ)句包括3個(gè)子語(yǔ)句,該程序語(yǔ)句表示為:A1;A2;A3,則可以將該程序語(yǔ)句進(jìn)行劃分,得到第三子語(yǔ)句為:A1;A2,得到第四子語(yǔ)句為A3。此時(shí),第三子語(yǔ)句的類型為組合語(yǔ)句,第四子語(yǔ)句的類型可以根據(jù)A3的語(yǔ)法結(jié)構(gòu)進(jìn)行確定,A3可以是任意一種類型的程序語(yǔ)句。
步驟S302、生成第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式。
本實(shí)施例中,組合語(yǔ)句的語(yǔ)法結(jié)構(gòu)有可嵌套和可遞歸的特點(diǎn),組合語(yǔ)句中的第三子語(yǔ)句和第四子語(yǔ)句可以是任意一種類型的程序語(yǔ)句。在生成該組合語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式之前,首先生成各個(gè)子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。生成各個(gè)子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的方法可以嵌套使用生成各類型的程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的方法。
步驟S303、對(duì)第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式進(jìn)行整合處理,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
本實(shí)施例中,每段程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式是由多個(gè)由與邏輯運(yùn)算符“∧”連接的子表達(dá)式組成,每個(gè)子表達(dá)式表示一個(gè)輸出變量與其他輸入變量之間的關(guān)系。將待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式中的多個(gè)子表達(dá)式可以用多個(gè)子表達(dá)式的集合來(lái)表示。待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的多個(gè)子表達(dá)式的集合稱為關(guān)系集合,記為Ω:
其中,li表示第i個(gè)輸出變量的變量名,R0表示輸入變量的集合,Vi(li,R0)表示用于表示輸出變量li與輸入變量的集合R0中各輸入變量之間的關(guān)系的子表達(dá)式。n為待轉(zhuǎn)換的程序語(yǔ)句中輸出變量的個(gè)數(shù),<li,Vi(li,R0)>表示由li和Vi(li,R0)組成的元組。待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的關(guān)系集合可以表示為由li和Vi(li,R0)組成的元組的集合。
進(jìn)一步地,第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的關(guān)系集合可以分別表示為Ω1和Ω2。該步驟中,對(duì)第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式進(jìn)行整合處理,可以通過(guò)對(duì)第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的關(guān)系集合Ω1和Ω2進(jìn)整合處理,得到待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的關(guān)系集合,并根據(jù)待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的關(guān)系集合,確定的該程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的方法來(lái)實(shí)現(xiàn)。最終得到待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的關(guān)系集合可以記為Ω3。
具體的,對(duì)Ω1和Ω2進(jìn)整合處理,得到Ω3可以采用如下方式實(shí)現(xiàn):
第一,帶入處理。
如果Ω2中的某些輸入變量與Ω1中的某些輸出變量的變量名一致,由于第三子語(yǔ)句的執(zhí)行在第四子語(yǔ)句之前,Ω1中這些輸出變量可能會(huì)作為Ω2中的輸入變量,對(duì)Ω2中的輸出變量的結(jié)果值產(chǎn)生影響,故將Ω1中的這些輸出變量對(duì)應(yīng)的子表達(dá)式帶入到Ω2中,得到的新的關(guān)系集合記為Ω2′。
具體地,將Ω1中的這些輸出變量對(duì)應(yīng)的子表達(dá)式帶入到Ω2中,得到的新的關(guān)系集合記為Ω2′具體實(shí)現(xiàn)方式如下:
如果Ω2中的某些輸入變量與Ω1中的某些輸出變量的變量名一致,將Ω2中的這些輸入變量稱作Ω2中的同名輸入變量,將Ω1中的這些輸出變量稱作Ω1中的同名輸出變量。
組合語(yǔ)句可以表示為多個(gè)賦值語(yǔ)句和/或條件語(yǔ)句嵌套組合的結(jié)果。組合語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式中的任意一個(gè)輸入變量li對(duì)應(yīng)的子表達(dá)式Vi(li,R0)可以表示為如下所示的兩種結(jié)構(gòu)的表達(dá)式中的一種:(1)直接賦值的表達(dá)式:A(li,e0);(2)多層嵌套的條件語(yǔ)句對(duì)應(yīng)的條件賦值的表達(dá)式可以簡(jiǎn)化為多個(gè)形如的蘊(yùn)含表達(dá)式經(jīng)與運(yùn)算符連接在一起的結(jié)構(gòu):其中m為其中被與運(yùn)算符連接在一起的蘊(yùn)含表達(dá)式的個(gè)數(shù),m為正整數(shù),表示條件語(yǔ)句中任意一個(gè)蘊(yùn)含表達(dá)中的真值表達(dá)式。
對(duì)于Ω2中的任何一個(gè)同名輸入變量li對(duì)應(yīng)的子表達(dá)式Vi(li,R0),如果Vi(li,R0)可以表示為直接賦值的表達(dá)式A(li,e0),則將Ω2中的同名輸入變量li全部替換為e0。如果Vi(li,R0)可以表示為條件賦值的表達(dá)式首先在Ω2中增加一個(gè)與li對(duì)應(yīng)的輸出變量li′,以及l(fā)i′對(duì)應(yīng)的子表達(dá)式Vi(li′,R0),然后將Ω2中的同名輸入變量li全部替換為li′。其中,li′對(duì)應(yīng)的子表達(dá)中輸出變量li′與輸入變量集合R0中的各輸入變量之間的關(guān)系,與輸出變量li與輸入變量集合R0各輸入變量之間的關(guān)系相同,<li′,Vi(li′,R0)>可以看作是<li,Vi(li,R0)>的副本。
經(jīng)過(guò)上述替換處理后的Ω2作為第一步中得到的新的關(guān)系集合Ω2′,Ω2′中的不存在任何一個(gè)輸入變量與Ω1中的輸出變量的變量名一致。
例如,給定類型為組合語(yǔ)句的程序語(yǔ)句,對(duì)該程序語(yǔ)句中的輸入變量用上標(biāo)“0”進(jìn)行標(biāo)記后如下:
if(a0>b0){x=1}else{x=2};
if(x0==1){y=a0}else{y=x0+b0};
該組合語(yǔ)句中的第三子語(yǔ)句為if(a0>b0){x=1}else{x=2},第四子語(yǔ)句為if(x0==1){y=a0}else{y=x0+b0}。
根據(jù)上述實(shí)施例的方法可得到第三子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式為第四子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式為
進(jìn)一步地,可以得到第三子語(yǔ)句對(duì)應(yīng)的關(guān)系集合Ω1,Ω1={<x,(a0>b0→A(x,1))∧(a0≤b0→A(x,2))>}。Ω1中包括一個(gè)變量名為x的輸出變量,Ω1對(duì)應(yīng)的輸入變量的集合以及,第四子語(yǔ)句對(duì)應(yīng)的關(guān)系集合Ω2,Ω2中包括一個(gè)變量名為y的輸出變量,Ω2對(duì)應(yīng)的輸入變量的集合
其中,變量名為x0的輸入變量中,上標(biāo)0僅用于區(qū)分輸入變量和輸出變量,Ω1中用x表示的輸出變量與Ω2中用x0表示的輸入變量的變量名一致,且第三子語(yǔ)句對(duì)應(yīng)的表達(dá)式為條件賦值的表達(dá)式的結(jié)構(gòu)。在該步驟中,首先在Ω2中增加一個(gè)與Ω1的輸出變量x對(duì)應(yīng)的輸出變量x′,以及x′對(duì)應(yīng)的子表達(dá)式
然后,將Ω2中所有的x0替換為x′,得到Ω′2:
Ω′2={<x′,(a0>b0→A(x′,1))∧(a0≤b0→A(x′,2))>,
到此,完成將Ω1中的同名輸出變量對(duì)應(yīng)的子表達(dá)式帶入到Ω2中,得到的新的關(guān)系集合Ω2′的處理過(guò)程。
第二,合并處理。
如果Ω2′中的某些輸出變量與Ω1中的某些輸出變量的變量名一致,則將Ω2′中的這些輸出變量與Ω1中的這些同名的輸出變量合并,得到合并后的Ω2′,作為關(guān)系集合Ω3;其他在Ω2′中不存在同名的輸出變量的Ω1中的輸出變量,可以直接加入到Ω3中,得到最終的關(guān)系集合Ω3。
本實(shí)施例中,對(duì)于Ω′2中任意一個(gè)輸出變量li對(duì)應(yīng)的子表達(dá)式Vi(li,R0),可以分為以下兩種情況:(1)直接覆蓋。這種情況下,無(wú)論Ω1中的變量名為li的輸出變量對(duì)應(yīng)的子表達(dá)式是什么,Ω′2中變量名為li的輸出變量對(duì)應(yīng)的子表達(dá)式一定會(huì)覆蓋掉該輸出變量原有的值;即,Ω′2中變量名為li的輸出變量不會(huì)受Ω1中的變量名為li的輸出變量的影響。(2)條件覆蓋。這種情況下,Ω′2中變量名為li的輸出變量對(duì)應(yīng)的子表達(dá)式由Ω1與Ω′2兩個(gè)關(guān)系集合中對(duì)應(yīng)于輸出變量li的子表達(dá)式共同決定;即,Ω′2中變量名為li的輸出變量會(huì)受Ω1中的變量名為li的輸出變量的影響。
本實(shí)施例中,對(duì)于Ω′2中任意一個(gè)輸出變量li對(duì)應(yīng)的子表達(dá)式Vi(li,R0),如果該Vi(li,R0)為直接賦值的邏輯表達(dá)式,則輸出變量li對(duì)應(yīng)的子表達(dá)式屬于直接覆蓋的情況。如果Vi(li,R0)為條件賦值的邏輯表達(dá)式,對(duì)該輸出變量li對(duì)應(yīng)的子表達(dá)式屬于直接覆蓋的情況還是條件覆蓋的情況進(jìn)行判定。
具體地,如果該輸出變量li對(duì)應(yīng)的子表達(dá)式為條件賦值的邏輯表達(dá)式,可以表示為:其中,m為Ω′2中輸出變量li對(duì)應(yīng)的子表達(dá)式中真值表達(dá)式的個(gè)數(shù),Cj表示條件語(yǔ)句中任意一個(gè)真值表達(dá)式。
獲取輸出變量li對(duì)應(yīng)的表達(dá)式中所有真值表達(dá)式中的原子公式的集合T。枚舉集合T中每個(gè)原子公式的真值取值的可能,如果對(duì)于每一種可能,有且只有一個(gè)真值表達(dá)式為真,則該輸出變量li對(duì)應(yīng)的子表達(dá)式是一個(gè)全條件賦值的邏輯表達(dá)式,可以確定該輸出變量li對(duì)應(yīng)的子表達(dá)式為直接覆蓋的情況。其中,全條件賦值的邏輯表達(dá)式滿足無(wú)論該邏輯表達(dá)式取什么值,都可以將該邏輯表達(dá)式簡(jiǎn)化為一個(gè)直接賦值的邏輯表達(dá)式。
如果存在一種集合T中原子公式的真值取值,可以使每個(gè)真值表達(dá)式的值均為假,即存在使得所有真值表達(dá)式均為假的情況,則該輸出變量li對(duì)應(yīng)的子表達(dá)式是一個(gè)非全條件賦值的邏輯表達(dá)式,可以確定該輸出變量li對(duì)應(yīng)的子表達(dá)式為條件覆蓋的情況。
進(jìn)一步的,對(duì)于Ω′2中任意一個(gè)變量名為li的輸出變量,如果Ω1中存在變量名為li的輸出變量,則將Ω2′中的輸出變量li與Ω1中輸出變量li合并,可以采用如下方式實(shí)現(xiàn):
如果確定該輸出變量li對(duì)應(yīng)的子表達(dá)式屬于直接覆蓋,則無(wú)需將Ω1中與輸出變量li變量名相同的輸出變量合并到Ω′2中,Ω′2中該輸出變量li對(duì)應(yīng)的子表達(dá)式無(wú)需變更。
如果確定該輸出變量li對(duì)應(yīng)的子表達(dá)式屬于條件覆蓋,將該輸出變量li對(duì)應(yīng)的子表達(dá)式與Ω1中與輸出變量li變量名相同的輸出變量合并,合并后,該輸出變量li對(duì)應(yīng)的最終的子表達(dá)式可以表示為:其中,Ω′2[li]指的是在關(guān)系集合Ω′2中關(guān)于輸出變量li的表達(dá)式,Ω1[li]指的是在關(guān)系集合Ω1中關(guān)于輸出變量li的表達(dá)式。
例如,給定以下組合語(yǔ)句:
if(c1){x=1}else if(c2){x=2};
if(c3){x=3}else if(c4){x=4}else if(c5){x=5};
該組合語(yǔ)句中的第三子語(yǔ)句為if(c1){x=1}else if(c2){x=2},第四子語(yǔ)句為if(c3){x=3}else if(c4){x=4}else if(c5){x=5}。根據(jù)上述方法可以得到第三子語(yǔ)句對(duì)應(yīng)的關(guān)系集合第三子語(yǔ)句對(duì)應(yīng)的關(guān)系集合該舉例中,不存在Ω2中的某些輸入變量與Ω1中的某些輸出變量的變量名一致,因此進(jìn)行第一步的帶入處理之后,得到的新的Ω′2與原來(lái)的Ω2一致。
Ω1中輸出變量x對(duì)應(yīng)的表達(dá)式為Ω′2中輸出變量x對(duì)應(yīng)的表達(dá)式為
當(dāng)c3、c4和c5均為假時(shí),Ω′2[x]中的各子表達(dá)式(c3→A(x,3))、的值為真,此時(shí),Ω′2[x]為永真式。即存在使得所有真值表達(dá)式均為假的情況,因此,可以確定Ω′2[x]為條件覆蓋的情況。Ω′2[x]中包括3個(gè)真值表達(dá)式,分別為c3、c4和c5,將Ω1[x]和Ω′2[x]合并為的形式:
即,
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為組合語(yǔ)句,自動(dòng)按照各子語(yǔ)句的執(zhí)行順序,將至少兩個(gè)子語(yǔ)句劃分為第三子語(yǔ)句和第四子語(yǔ)句,第三子語(yǔ)句在第四子語(yǔ)句之前;生成第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式;對(duì)第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式進(jìn)行整合處理,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。實(shí)現(xiàn)了類型為組合語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式。
實(shí)施例五
圖4為本發(fā)明實(shí)施例五提供的程序語(yǔ)句形式化轉(zhuǎn)換的方法的流程示意圖。在上述實(shí)施例四基礎(chǔ)上,本實(shí)施例五中,如果程序語(yǔ)句的類型為循環(huán)語(yǔ)句,程序語(yǔ)句包括循環(huán)條件和循環(huán)體,循環(huán)體包括至少一個(gè)子語(yǔ)句。如圖4所示,根據(jù)該程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,具體包括以下步驟:
步驟S401、獲取預(yù)先設(shè)定的程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式。
其中,程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式是用于表示該程序語(yǔ)句的循環(huán)體經(jīng)過(guò)執(zhí)行的次數(shù)與該程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式之間的關(guān)系。
本實(shí)施例中,類型為循環(huán)語(yǔ)句的程序語(yǔ)句包括循環(huán)條件和循環(huán)體,循環(huán)體包括至少一個(gè)子語(yǔ)句。可以將循環(huán)體包括至少一個(gè)子語(yǔ)句作為一個(gè)組合語(yǔ)句,執(zhí)行該循環(huán)語(yǔ)句相當(dāng)于多次執(zhí)行組合語(yǔ)句。
本實(shí)施例中,用F(q)表示進(jìn)行q次的循環(huán)執(zhí)行之后程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式可以由技術(shù)人員根據(jù)實(shí)際需要進(jìn)行設(shè)定。
步驟S402、根據(jù)循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,確定程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式。
本實(shí)施例中,由于循環(huán)條件的真值可能會(huì)受循環(huán)體執(zhí)行結(jié)果的影響,根據(jù)循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,可以求得程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式,具體可以采用現(xiàn)有技術(shù)中任意一種求解通項(xiàng)公式項(xiàng)數(shù)的方法來(lái)實(shí)現(xiàn)。
本實(shí)施例中程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式可以表示為e(q),e(q)的真值可以在程序語(yǔ)句循環(huán)t次之后內(nèi)由真變?yōu)榧佟?/p>
步驟S403、程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式,以及循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
本實(shí)施例中,首先,根據(jù)程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式,可以計(jì)算得到循環(huán)次數(shù)為0時(shí)程序語(yǔ)句的條件表達(dá)式e(0),即進(jìn)入循環(huán)體時(shí)的循環(huán)條件對(duì)應(yīng)的真值表達(dá)式。然后,根據(jù)e(0),以及F(q),可以確定循環(huán)執(zhí)行t次之后該程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式可以表示為:e(0)→F(t)。
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為循環(huán)語(yǔ)句,獲取預(yù)先設(shè)定的循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,根據(jù)循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,確定程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式;程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式,以及循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。實(shí)現(xiàn)了類型為循環(huán)語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式。
實(shí)施例六
圖5為本發(fā)明實(shí)施例六提供的程序語(yǔ)句形式化轉(zhuǎn)換的裝置的結(jié)構(gòu)示意圖。本發(fā)明實(shí)施例提供的程序語(yǔ)句形式化轉(zhuǎn)換的裝置可以執(zhí)行程序語(yǔ)句形式化轉(zhuǎn)換的方法實(shí)施例提供的處理流程。如圖5所示,該裝置包括:獲取模塊501、確定模塊502和處理模塊503。
其中,獲取模塊501用于獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu)。
確定模塊502用于根據(jù)程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定程序語(yǔ)句的類型。
處理模塊503用于根據(jù)各程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
其中,程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式用于表示程序語(yǔ)句的任意一個(gè)輸出變量值與各輸入變量值之間的關(guān)系。
可選地,在本發(fā)明的另一實(shí)施例方式中,獲取模塊還用于:獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的BNF范式;根據(jù)BNF范式,生成語(yǔ)法分析器;通過(guò)語(yǔ)法分析器,生成程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法樹(shù)。
本發(fā)明實(shí)施例提供的裝置可以具體用于執(zhí)行上述實(shí)施例一所提供的方法實(shí)施例,具體功能此處不再贅述。
本發(fā)明實(shí)施例通過(guò)獲取待轉(zhuǎn)換的程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),根據(jù)程序語(yǔ)句對(duì)應(yīng)的語(yǔ)法結(jié)構(gòu),確定程序語(yǔ)句的類型;根據(jù)程序語(yǔ)句的類型,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,實(shí)現(xiàn)了將程序語(yǔ)句自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式,大大提高了程序語(yǔ)句轉(zhuǎn)換為邏輯表達(dá)式的效率,節(jié)省了大量時(shí)間及人力。
實(shí)施例七
在上述實(shí)施例六的基礎(chǔ)上,在本實(shí)施例中,處理模塊還用于:
如果程序語(yǔ)句的類型為賦值語(yǔ)句,程序語(yǔ)句包括一個(gè)輸出變量和一個(gè)輸入變量,根據(jù)公式(1),生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式;
其中,x表示輸出變量,表示輸入變量,A表示將所輸出變量賦值為輸入變量的謂詞表達(dá)式。
本發(fā)明實(shí)施例提供的裝置可以具體用于執(zhí)行上述實(shí)施例二所提供的方法實(shí)施例,具體功能此處不再贅述。
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為賦值語(yǔ)句,將該程序語(yǔ)句轉(zhuǎn)換為實(shí)現(xiàn)了類型為賦值語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式。
實(shí)施例八
在上述實(shí)施例七的基礎(chǔ)上,在本實(shí)施例中,處理模塊還用于:
如果程序語(yǔ)句的類型為條件語(yǔ)句,則程序語(yǔ)句包括真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句;
獲取程序語(yǔ)句的真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句;
分別根據(jù)第一子語(yǔ)句和第二子語(yǔ)句的類型,生成第一子語(yǔ)句和第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式;
根據(jù)公式(2),生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式;
其中,表示真值表達(dá)式,r1表示第一子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,r2表示第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
本發(fā)明實(shí)施例提供的裝置可以具體用于執(zhí)行上述實(shí)施例三所提供的方法實(shí)施例,具體功能此處不再贅述。
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為條件語(yǔ)句,自動(dòng)獲取程序語(yǔ)句的真值表達(dá)式、第一子語(yǔ)句和第二子語(yǔ)句,分別生成第一子語(yǔ)句和第二子語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,并自動(dòng)生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式,實(shí)現(xiàn)了類型為條件語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式
實(shí)施例九
在上述實(shí)施例八的基礎(chǔ)上,在本實(shí)施例中,處理模塊還用于:
如果程序語(yǔ)句的類型為組合語(yǔ)句,則程序語(yǔ)句包括至少兩個(gè)子語(yǔ)句;
按照各子語(yǔ)句的執(zhí)行順序,將至少兩個(gè)子語(yǔ)句劃分為第三子語(yǔ)句和第四子語(yǔ)句,第三子語(yǔ)句在第四子語(yǔ)句之前;
生成第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式;
對(duì)第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式進(jìn)行整合處理,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
本發(fā)明實(shí)施例提供的裝置可以具體用于執(zhí)行上述實(shí)施例四所提供的方法實(shí)施例,具體功能此處不再贅述。
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為組合語(yǔ)句,自動(dòng)按照各子語(yǔ)句的執(zhí)行順序,將至少兩個(gè)子語(yǔ)句劃分為第三子語(yǔ)句和第四子語(yǔ)句,第三子語(yǔ)句在第四子語(yǔ)句之前;生成第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式;對(duì)第三子語(yǔ)句和第四子語(yǔ)句分別對(duì)應(yīng)的邏輯表達(dá)式進(jìn)行整合處理,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。實(shí)現(xiàn)了類型為組合語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式。
實(shí)施例十
在上述實(shí)施例九的基礎(chǔ)上,在本實(shí)施例中,處理模塊還用于:
如果程序語(yǔ)句的類型為循環(huán)語(yǔ)句,則程序語(yǔ)句包括循環(huán)條件和循環(huán)體,循環(huán)體包括至少一個(gè)子語(yǔ)句;
獲取預(yù)先設(shè)定的循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式;
根據(jù)循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,確定程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式;
程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式,以及循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。
本發(fā)明實(shí)施例提供的裝置可以具體用于執(zhí)行上述實(shí)施例五所提供的方法實(shí)施例,具體功能此處不再贅述。
本發(fā)明實(shí)施例通過(guò)根據(jù)程序語(yǔ)句的類型,如果程序語(yǔ)句的類型為循環(huán)語(yǔ)句,獲取預(yù)先設(shè)定的循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,根據(jù)循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,確定程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式;程序語(yǔ)句的循環(huán)次數(shù)的條件表達(dá)式,以及循環(huán)體對(duì)應(yīng)的邏輯表達(dá)式的通項(xiàng)公式,生成程序語(yǔ)句對(duì)應(yīng)的邏輯表達(dá)式。實(shí)現(xiàn)了類型為循環(huán)語(yǔ)句的程序語(yǔ)句的自動(dòng)轉(zhuǎn)化為對(duì)應(yīng)的邏輯表達(dá)式。
在本發(fā)明所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用硬件加軟件功能單元的形式實(shí)現(xiàn)。
上述以軟件功能單元的形式實(shí)現(xiàn)的集成的單元,可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。上述軟件功能單元存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(Read-Only Memory,ROM)、隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
本領(lǐng)域技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,僅以上述各功能模塊的劃分進(jìn)行舉例說(shuō)明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的裝置的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。