專利名稱:編譯方法、調(diào)試方法、編譯程序和調(diào)試程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于將用高級(jí)語言描述的程序轉(zhuǎn)換成目標(biāo)程序的編譯方法、調(diào)試方法、編譯程序和調(diào)試程序。
背景技術(shù):
在近年來的軟件開發(fā)中,程序規(guī)模不斷增大,基于這種情況,具有高可維護(hù)性和高可重用性的面向目標(biāo)語言受到了關(guān)注。面向目標(biāo)語言的典型例子是C++語言。作為替代一直以來傳統(tǒng)地廣泛用于編程的C語言的語言,C++語言正在成為關(guān)注的焦點(diǎn),并且在相關(guān)技術(shù)領(lǐng)域,編程中的語言從C語言轉(zhuǎn)變到C++語言。在這種語言轉(zhuǎn)變中,因?yàn)镃++語言是C語言的高級(jí)兼容語言,故在常規(guī)情況下只要簡單地通過將C語言編譯器替換為C++語言編譯器,就能生成沒有任何操作問題的目標(biāo)代碼。然而,當(dāng)用C語言中敘述的程序在C++語言中編譯時(shí),會(huì)引起代碼大小和執(zhí)行時(shí)間不受歡迎地增長的問題。
針對(duì)該問題的常規(guī)第一解決方案是,使用文獻(xiàn)(見M·A·Ellis、B·Stroustrup著,Takanori Adachi和Hiroshi Koyama譯的“注釋C++參考手冊(cè)”7.4章“連接指配”)中所敘述的關(guān)于程序的連接指配(linkageassignment)。第二解決方案是分析程序中語言規(guī)范的范圍并且盡可能地對(duì)編譯自動(dòng)應(yīng)用子集的語言規(guī)范,如同在日本專利申請(qǐng)公開No.2003-50700中所敘述的。
然而,在第一解決方案中,迫使程序員在編程中考慮連接指配,這阻礙了C語言輕易地向C++語言轉(zhuǎn)變。在第二解決方案中,沒有考慮到與程序中編碼符號(hào)(函數(shù)名、變量名等)相關(guān)的一致性,雖然可以將C++語言編譯成用作內(nèi)建為C++子集規(guī)范的EC++語言。結(jié)果是,無法期望這樣的優(yōu)化,例如基于語言規(guī)范的兼并對(duì)代碼大小和執(zhí)行時(shí)間的縮減。
發(fā)明內(nèi)容
因此,本發(fā)明的主要目的在于提供一種編譯方法,其中程序員可以輕易地將程序轉(zhuǎn)變?yōu)橄蛏霞嫒莸某绦?,而不必注意任何連接指配,并且作為程序規(guī)范的最大兼并的結(jié)果,可以實(shí)現(xiàn)代碼大小和執(zhí)行時(shí)間的縮減,而且本發(fā)明的目的還在于提供能夠輕易地進(jìn)行微調(diào)的調(diào)試方法。
為了解決以上問題,根據(jù)本發(fā)明的編譯方法是一種用于將輸入程序轉(zhuǎn)換成目標(biāo)程序的編譯方法,包括部分語言規(guī)范判定步驟,用于判定在輸入程序中設(shè)置的至少兩個(gè)特定范圍中的語言規(guī)范;判斷步驟,用于判斷所述特定范圍中的語言規(guī)范之間是否存在差別;和部分代碼校正步驟,用于在判斷出所述特定范圍中的語言規(guī)范之間存在差別時(shí),對(duì)特定范圍之一中的至少一部分代碼進(jìn)行校正。
根據(jù)上述方法,由于代碼被校正從而使得它們可以彼此組合在一起,包括部分不同語言規(guī)范的程序可以被組合起來并且以最優(yōu)的語言規(guī)范編譯,因此可以更有效地生成代碼。
優(yōu)選地,在所述部分語言規(guī)范判定步驟中,基于在特定范圍中使用的編程語言的工具性程序判定所述語言規(guī)范。
根據(jù)上述方法,由于程序員可以將包括部分不同語言規(guī)范的程序組合在一起而不校正源程序,并且可以以最優(yōu)的語言規(guī)范編譯該程序,因此可以更有效地生成代碼。
作為上述方法的更加優(yōu)選的模式,在所述部分語言規(guī)范判定步驟中,在所述輸入程序中存在語言規(guī)范控制語句的情況下,基于所述語言規(guī)范控制語句判定所述語言規(guī)范。
根據(jù)上述方法,例如,程序員可以根據(jù)源程序中的#pragma指令來描述所述語言規(guī)范控制語句,并且因此可以自由地選擇語言規(guī)范而不受來自源程序中初始描述的工具性程序的任何影響。
更加優(yōu)選地,在所述語言規(guī)范判定步驟中,在向用于編譯所述輸入程序的編譯系統(tǒng)提供了語言規(guī)范控制指令的情況下,基于所述語言規(guī)范控制指令判定所述語言規(guī)范。
根據(jù)上述方法,例如,程序員基于編譯系統(tǒng)的選項(xiàng)提供語言規(guī)范控制指令,并且由此可以自由地選擇語言規(guī)范而不校正源程序,并且不受來自源程序中初始描述的工具性程序的影響。
更加優(yōu)選地,在所述部分代碼校正步驟中,在所有函數(shù)中的定義語言規(guī)范與引用語言規(guī)范之間存在差別的情況下,具有子集語言規(guī)范的函數(shù)代碼名被改變?yōu)榫哂谐Z言規(guī)范的函數(shù)代碼名。
根據(jù)上述方法,即使在定義的語言規(guī)范和引用的語言規(guī)范之間存在任何差別,也可以將程序組合起來。
作為上述方法的更加優(yōu)選的模式,在所述部分代碼校正步驟中,所有被多重定義的外部函數(shù)都被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中未被多重定義的外部函數(shù),并且當(dāng)所有被多重定義的外部函數(shù)都被改變?yōu)榫哂兴鰡为?dú)函數(shù)名并且在程序中未被多重定義的所述外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
根據(jù)上述方法,使用多重定義函數(shù)的C++程序可以作為C程序進(jìn)行編譯,這提高了代碼生成的效率。
作為上述方法的更加優(yōu)選的模式,在所述部分代碼校正步驟中,所有屬于一名字空間的外部函數(shù)都被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中不屬于所述名字空間的外部函數(shù),并且當(dāng)所有屬于所述名字空間的外部函數(shù)都被改變?yōu)榫哂兴鰡为?dú)函數(shù)名并且不屬于在程序中所述名字空間的所述外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
根據(jù)上述方法,使用所述名字空間的C++程序可以作為C程序編譯,這提高了代碼生成的效率。
作為上述方法的更加優(yōu)選的模式,在所述部分代碼校正步驟中,所有由一模板生成的外部函數(shù)都被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中不是由該模板生成的外部函數(shù),并且當(dāng)所有由該模板生成的外部函數(shù)都被改變?yōu)榫哂性搯为?dú)函數(shù)名并且在程序中不是由該模板生成的外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
根據(jù)上述方法,使用所述名字空間的C++程序可以作為C程序編譯,這提高了代碼生成的效率。
根據(jù)本發(fā)明的調(diào)試方法是一種用于調(diào)試輸入程序的調(diào)試方法,包括部分語言規(guī)范認(rèn)可步驟,用于認(rèn)可在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;和部分語言規(guī)范顯示步驟,用于一起顯示每個(gè)特定范圍中所認(rèn)可的語言規(guī)范及其程序來源。
根據(jù)上述方法,程序員可以輕易地確認(rèn)程序的哪個(gè)部分以何種語言規(guī)范被編譯。結(jié)果是,可以有效地進(jìn)行調(diào)試和微調(diào)操作。
作為上述方法的優(yōu)選模式,該方法進(jìn)一步包括模板開發(fā)顯示步驟,其用于在待分析的目標(biāo)是由所述模板生成的實(shí)例的情況下,顯示其中模板被開發(fā)的源程序。
根據(jù)上述方法,在開發(fā)模板之后,程序員可以輕易地掌握源程序,并且可以有效地進(jìn)行調(diào)試和微調(diào)操作。
作為上述方法的更加優(yōu)選的模式,該方法進(jìn)一步包括子集語言規(guī)范違背部分顯示步驟,其用于在子集的語言規(guī)范被定義在所認(rèn)可的語言規(guī)范中的情況下,顯式地顯示偏離子集的語言規(guī)范的一部分程序的內(nèi)容。
根據(jù)上述方法,程序員可以輕易地掌握偏離子集的部分程序,并且可以更有效地進(jìn)行調(diào)試和微調(diào)操作。
本發(fā)明不僅可以實(shí)現(xiàn)包括這些特征步驟的編譯方法和調(diào)試方法,而且可以實(shí)現(xiàn)使計(jì)算機(jī)執(zhí)行包含在所述編譯方法和所述調(diào)試方法中的這些特征步驟的編譯程序和調(diào)試程序,以及執(zhí)行包含在所述編譯方法和所述調(diào)試方法中的這些特征步驟的編譯裝置和調(diào)試器裝置。進(jìn)一步,顯而易見地,可以通過例如CD-ROM(光盤只讀存儲(chǔ)器)的記錄介質(zhì)和例如互聯(lián)網(wǎng)的傳輸介質(zhì)來分布所述編譯器和調(diào)試器。
根據(jù)本發(fā)明的編譯程序是一種用于將輸入程序轉(zhuǎn)換成目標(biāo)程序的編譯程序,該編譯程序使計(jì)算機(jī)執(zhí)行部分語言規(guī)范判定工具性程序,用于判定在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;用于判斷所述特定范圍之間的語言規(guī)范中是否存在差別的工具性程序;和部分代碼校正工具性程序,用于在判斷出所述特定范圍之間的語言規(guī)范中存在差別的情況下,對(duì)特定范圍之一中的至少一部分代碼進(jìn)行校正。
作為上述程序的優(yōu)選模式,所述部分語言規(guī)范判定工具性程序,基于所述特定范圍中所使用的編程語言的工具性程序來判定所述語言規(guī)范。
作為上述程序的更加優(yōu)選的模式,所述部分語言規(guī)范判定工具性程序在輸入程序中存在語言規(guī)范控制語句的情況下,基于所述語言規(guī)范控制語句判定所述語言規(guī)范。
作為上述程序的更加優(yōu)選的模式,所述部分語言規(guī)范判定工具性程序在向用于編譯所述輸入程序的編譯系統(tǒng)提供了語言規(guī)范控制指令的情況下,基于所述語言規(guī)范控制指令判定所述語言規(guī)范。
作為上述程序的更加優(yōu)選的模式,所述部分代碼校正工具性程序在所有函數(shù)中的定義語言規(guī)范和引用語言規(guī)范之間存在差別的情況下,將具有子集語言規(guī)范的函數(shù)代碼名改變?yōu)榫哂谐Z言規(guī)范的函數(shù)代碼名。
作為上述程序的更加優(yōu)選的模式,所述部分代碼校正工具性程序?qū)⑺斜欢嘀囟x的外部函數(shù)都改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中未被多重定義的外部函數(shù),并且當(dāng)所有被多重定義的外部函數(shù)都被改變?yōu)榫哂性搯为?dú)函數(shù)名并且在程序中未被多重定義的該外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定工具性程序。
作為上述程序的更加優(yōu)選的模式,所述部分代碼校正工具性程序?qū)⑺袑儆谝幻挚臻g的外部函數(shù)都改變?yōu)榫哂袉为?dú)函數(shù)名并且不屬于在程序中所述名字空間的外部函數(shù),并且當(dāng)所有屬于所述名字空間的外部函數(shù)都被改變?yōu)榫哂性摵瘮?shù)名并且不屬于所述名字空間的該外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定功能。
作為上述程序的更加優(yōu)選的模式,所述部分代碼校正工具性程序?qū)⑺杏梢荒0迳傻耐獠亢瘮?shù)都改變?yōu)槌绦蛑芯哂袉为?dú)函數(shù)名并且在不是由該模板生成的外部函數(shù),并且當(dāng)所有由該模板生成的外部函數(shù)都被改變?yōu)樵诔绦蛑芯哂性搯为?dú)函數(shù)名并且不是由該模板生成的外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
根據(jù)本發(fā)明的調(diào)試程序是一種用于調(diào)試輸入程序的調(diào)試程序,所述調(diào)試程序用于使計(jì)算機(jī)執(zhí)行以下工具性程序部分語言規(guī)范認(rèn)可工具性程序,用于認(rèn)可其中輸入程序被設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;和部分語言規(guī)范顯示工具性程序,用于一起顯示每個(gè)特定范圍中所認(rèn)可的語言規(guī)范及其程序來源。
作為上述程序的優(yōu)選模式,該調(diào)試程序用于進(jìn)一步使計(jì)算機(jī)執(zhí)行一模板開發(fā)顯示工具性程序,其用于在分析目標(biāo)是由所述模板生成的實(shí)例的情況下,顯示其中所述模板被開發(fā)的源程序。
作為上述程序的更加優(yōu)選的模式,該調(diào)試程序進(jìn)一步使計(jì)算機(jī)執(zhí)行一子集語言規(guī)范違背顯示步驟,其用于在子集的語言規(guī)范被定義在所認(rèn)可的語言規(guī)范中的情況下,顯式地顯示偏離子集語言規(guī)范的一部分程序的內(nèi)容。
根據(jù)本發(fā)明的編譯方法,包括部分不同語言規(guī)范的程序可以被輕易地組合在一起,并且以最優(yōu)的語言規(guī)范進(jìn)行編譯。結(jié)果是,可以更加有效地生成代碼。進(jìn)一步,根據(jù)本發(fā)明的調(diào)試方法,程序員可以輕易地掌握程序的該部分以何種語言規(guī)范進(jìn)行編譯,以及源程序的哪一部分在其被改變?yōu)樽蛹Z言規(guī)范時(shí)應(yīng)該被校正。結(jié)果是,可以有效地執(zhí)行調(diào)試和微調(diào)操作。
根據(jù)本發(fā)明的編譯方法和調(diào)試方法可以有效地應(yīng)用于針對(duì)諸如移動(dòng)電話和PDA(個(gè)人數(shù)字助理)的嵌入式裝置的編譯方法和調(diào)試方法等,所述嵌入式裝置要求具有小代碼大小的目標(biāo)代碼。
本發(fā)明的這些和其它目的以及優(yōu)點(diǎn)將通過以下對(duì)本發(fā)明優(yōu)選實(shí)施例的描述將變得清晰。在實(shí)施本發(fā)明之后,本領(lǐng)域技術(shù)人員將會(huì)注意到在本說明書中未敘述的許多優(yōu)點(diǎn)。
圖1是根據(jù)本發(fā)明優(yōu)選實(shí)施例由編譯器執(zhí)行的處理步驟的流程圖。
圖2是示出部分語言規(guī)范判定步驟的細(xì)節(jié)的流程圖。
圖3是示出部分代碼校正步驟的細(xì)節(jié)的流程圖。
圖4是根據(jù)優(yōu)選實(shí)施例由調(diào)試器執(zhí)行的處理步驟的流程圖。
圖5是示出部分語言規(guī)范顯示步驟的細(xì)節(jié)的流程圖。
圖6示出具體示例1中使用的程序存儲(chǔ)單元中所存儲(chǔ)的源程序的示例。
圖7示出根據(jù)現(xiàn)有技術(shù)的中間代碼信息的示例。
圖8示出由傳統(tǒng)方法校正的源程序的示例。
圖9示出在具體示例1中使用的源程序被應(yīng)用到部分語言規(guī)范判定步驟之后的中間代碼信息的示例。
圖10示出在具體示例1中使用的源程序被應(yīng)用到部分語言代碼校正步驟之后的中間代碼信息的示例。
圖11示出在具體示例2中用的程序存儲(chǔ)單元中所存儲(chǔ)的源程序的示例。
圖12示出在其中具體示例2中所用源程序以C++語言被編譯的匯編代碼,和在其中具體示例2中所用源程序以C語言被編譯的匯編代碼。
圖13示出在具體示例2中中使用的源程序被應(yīng)用到第一部分語言規(guī)范判定步驟之后中間代碼信息的示例。
圖14示出在具體示例2中中使用的源程序被應(yīng)用到第一部分代碼校正步驟之后中間代碼信息的示例。
圖15示出在具體示例2中中使用的源程序被應(yīng)用到第二部分語言規(guī)范判定步驟之后中間代碼信息的示例。
圖16示出其中根據(jù)本發(fā)明的方法未被使用到具體示例2中所用源程序的匯編代碼,和其中相關(guān)方法被應(yīng)用到具體示例2中所用源程序的匯編代碼。
圖17示出顯示具體示例3中所使用的源程序的調(diào)試器監(jiān)視器。
圖18示出顯示具體示例3中所用源程序的語言規(guī)范信息的調(diào)試器監(jiān)視器。
圖19示出顯示其中具體示例3中所用源程序模板被開發(fā)的源程序的調(diào)試器監(jiān)視器。
圖20示出顯示從具體示例3中所用源程序中的C語言規(guī)范導(dǎo)出的程序的一部分內(nèi)容的調(diào)試器監(jiān)視器。
圖21是傳統(tǒng)程序轉(zhuǎn)換方法(第二解決方案)的流程圖。
具體實(shí)施例方式
以下,參照附圖描述根據(jù)本發(fā)明優(yōu)選實(shí)施例的編譯方法。圖1是由編譯器執(zhí)行的處理步驟的流程圖。
編譯器讀取存儲(chǔ)在程序存儲(chǔ)單元D1中的頭文件和源程序(步驟S1)。編譯器分析所讀取源文件的語法,并且生成符號(hào)表和語法樹(步驟S2)。接下來,編譯器基于所生成的語法樹生成中間代碼(步驟S3)。然后,編譯器對(duì)所生成的中間代碼執(zhí)行各種優(yōu)化處理(步驟S4)。進(jìn)一步,編譯器分配硬件資源,例如寄存器和存儲(chǔ)器,給經(jīng)過優(yōu)化的中間代碼中包括的所有變量(步驟S5),然后將分配了資源的中間代碼轉(zhuǎn)換成目標(biāo)代碼并且輸出其目標(biāo)程序到生成代碼存儲(chǔ)單元D2(步驟S6)。
優(yōu)化步驟S4包括部分語言規(guī)范判定步驟S10、部分代碼校正步驟S11和其它優(yōu)化步驟S12。在部分語言規(guī)范判定步驟S10中,分析中間代碼,并且判定每個(gè)程序的部分范圍中的語言規(guī)范。在部分代碼校正步驟S11中,對(duì)在部分語言規(guī)范判定步驟S10中所判定的每個(gè)程序的部分范圍中的語言規(guī)范進(jìn)行分析,并且對(duì)相應(yīng)范圍中的代碼進(jìn)行校正,從而使其能夠被基于相應(yīng)范圍中的語言規(guī)范的差別而組合。稍后描述部分語言規(guī)范判定步驟S10和部分代碼校正步驟S11的細(xì)節(jié)。不描述其它優(yōu)化步驟S12,因?yàn)檫@是傳統(tǒng)的優(yōu)化步驟,而不是本發(fā)明的主題。
對(duì)源程序輸入步驟S1、語法分析步驟S2、中間代碼生成步驟S3、其它優(yōu)化步驟S12、資源分配步驟S5和目標(biāo)輸出步驟S6不進(jìn)行詳細(xì)描述,因?yàn)樗鼈冾愃朴趥鹘y(tǒng)的步驟而不是本發(fā)明的主要主題。
以下給出對(duì)作為本發(fā)明主題的部分語言規(guī)范判定步驟S10和部分代碼校正步驟S11的描述。圖2是示出部分語言規(guī)范判定步驟S10細(xì)節(jié)的流程圖。作為循環(huán)處理L1,對(duì)于每個(gè)中間代碼執(zhí)行步驟S21-25,所述中間代碼對(duì)應(yīng)于所輸入程序中設(shè)置的至少兩個(gè)特定范圍。在存在分析目標(biāo)的情況下,處理前進(jìn)到步驟S21;而在沒有分析目標(biāo)的情況下,處理前進(jìn)到步驟S11。在步驟S21中,基于分析目標(biāo)的范圍中所用的編程語言的工具性程序判定語言規(guī)范,將語言規(guī)范信息記錄在中間語言中,并且處理前進(jìn)到步驟S22。這里,語言規(guī)范信息是至少能夠判斷其所編譯的是何種語言規(guī)范的信息(例如,當(dāng)其為C++語言時(shí),是諸如“C++”的字符串)。
在步驟S22中,判斷分析目標(biāo)的范圍中是否存在語言規(guī)范控制語句。此處所敘述的語言規(guī)范控制語句是這樣的語句,其中通過例如#pragma指令在源程序中進(jìn)行描述,而將特定操作指定給編譯器。當(dāng)判斷結(jié)果為真時(shí),處理前進(jìn)到步驟S23,而當(dāng)結(jié)果為非真時(shí),處理前進(jìn)到步驟S24。
在步驟S23中,基于語言規(guī)范控制指令判定語言規(guī)范,將語言規(guī)范信息記錄在中間語言中,然后處理前進(jìn)到步驟S24。在步驟S24中,判斷語言規(guī)范控制指令是否提供給編譯系統(tǒng)。此處所敘述的語言規(guī)范控制指令是直接給到編譯系統(tǒng)的指令,從而使得特定操作被作為命令行選項(xiàng)指定給編譯器。當(dāng)判斷結(jié)果為真時(shí),處理前進(jìn)到步驟S25,而當(dāng)結(jié)果為非真時(shí),處理前進(jìn)到循環(huán)處理L1。
圖3是示出部分代碼校正步驟S11的細(xì)節(jié)的流程圖。在循環(huán)處理L2中,步驟S31-S38由所有函數(shù)的每個(gè)中間代碼執(zhí)行。當(dāng)存在分析目標(biāo)時(shí),處理前進(jìn)到步驟S31;而當(dāng)不存在分析目標(biāo)時(shí),處理前進(jìn)到步驟S39。
在步驟S31中,判斷相關(guān)函數(shù)的定義與引用中的語言規(guī)范之間是否有差別。語言規(guī)范之間的差別表示這樣的情況,即函數(shù)定義中的語言規(guī)范在中間代碼中被記錄為“C++”,而函數(shù)引用中的語言規(guī)范在中間代碼中被記錄為“C”。當(dāng)判斷結(jié)果為真,則處理前進(jìn)到步驟S32,而當(dāng)判斷結(jié)果為非真時(shí)前進(jìn)到步驟S33。
在步驟S32,具有子集語言規(guī)范的函數(shù)代碼名被改變?yōu)榫哂谐Z言規(guī)范的函數(shù)代碼名,處理前進(jìn)到步驟S33。
在步驟S33中,判斷相關(guān)函數(shù)是否為被多重定義的外部函數(shù)。多重定義表示這種情況的函數(shù)定義,即函數(shù)名相同但是函數(shù)自變量不同,例如f(void)和f(int)。當(dāng)判斷結(jié)果為真時(shí)處理前進(jìn)到步驟S34,而當(dāng)結(jié)果為非真時(shí)前進(jìn)到步驟S35。
在步驟S34中,相關(guān)函數(shù)被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中沒有被多重定義的外部函數(shù)。接下來,處理前進(jìn)到步驟S35。在步驟S35中,判斷相關(guān)函數(shù)是否為屬于名字空間的外部函數(shù)。屬于名字空間的外部函數(shù)是在作為名字空間S{int f(void)}的名字空間的作用域中聲明的函數(shù)。當(dāng)判斷結(jié)果為真則處理前進(jìn)到步驟S36,當(dāng)結(jié)果為非真則前進(jìn)到步驟S37。
在步驟S36中,相關(guān)函數(shù)被改變?yōu)榫哂袉为?dú)函數(shù)名并且不屬于程序中的名字空間的外部函數(shù)。接下來,處理前進(jìn)到步驟S37。在步驟S37中,判斷相關(guān)函數(shù)是否為由模板生成的外部函數(shù)。這里,由模板生成的外部函數(shù)是由如同在模板<class T>Tf(Ta)中所定義的函數(shù)模板例示的函數(shù)。當(dāng)判斷結(jié)果為真則處理前進(jìn)到步驟S38,當(dāng)結(jié)果為非真則前進(jìn)到循環(huán)處理L2。
在步驟S38中,相關(guān)函數(shù)被改變?yōu)榫哂袉为?dú)函數(shù)名并且不是由程序中模板生成的外部函數(shù)。接下來,處理前進(jìn)到L2。在步驟S39中,判斷步驟S33、S35和S37的判斷結(jié)果中的任意一個(gè)是否為真。當(dāng)判斷結(jié)果是真則處理前進(jìn)到步驟S10,當(dāng)結(jié)果為非真則前進(jìn)到步驟S12。
如上所述,對(duì)中間代碼執(zhí)行包括部分語言規(guī)范判定步驟S10和部分代碼校正步驟S11的優(yōu)化步驟S4,并且然后對(duì)經(jīng)過優(yōu)化的中間代碼執(zhí)行資源分配步驟(步驟S5)和目標(biāo)程序輸出步驟(步驟S6)。因此,程序員可以輕易地將程序轉(zhuǎn)變?yōu)橄蛏霞嫒莸某绦蚨挥米⒁馊魏芜B接指配,并且由于語言規(guī)范的兼并可以最大程度地縮減代碼大小和執(zhí)行時(shí)間。
本發(fā)明不限于對(duì)中間代碼的分析,可以對(duì)任何類型的數(shù)據(jù)進(jìn)行分析,只要該數(shù)據(jù)是表示源程序的語法分析結(jié)果的數(shù)據(jù)。
接下來,參照附圖描述根據(jù)本優(yōu)選實(shí)施例的調(diào)試方法。圖4是由調(diào)試器執(zhí)行的處理步驟的流程圖。調(diào)試器讀取存儲(chǔ)在程序存儲(chǔ)單元D1中的程序(步驟N1)。調(diào)試器分析所讀取的程序,并且轉(zhuǎn)到命令輸入等待步驟N2。接下來,調(diào)試器判斷是否輸入了部分語言規(guī)范顯示命令(步驟N3)。當(dāng)判斷結(jié)果為真,則執(zhí)行用于部分地顯示語言規(guī)范的步驟N10。然后,執(zhí)行用于顯示其它源信息的步驟N11,并且處理前進(jìn)到命令輸入等待步驟N2。當(dāng)結(jié)果為非真時(shí),執(zhí)行另一調(diào)試步驟(步驟N4),并且處理前進(jìn)到命令輸入等待步驟N2。稍后將描述部分語言規(guī)范顯示步驟N10的細(xì)節(jié)。由于其它源顯示步驟N11是用于顯示一般源信息的步驟,并且不是本發(fā)明的主題,因此不對(duì)其進(jìn)行描述。
另外,不詳細(xì)描述程序輸入步驟N1、命令輸入等待步驟N2和另一調(diào)試步驟N4,因?yàn)樗鼈兪穷愃朴趥鹘y(tǒng)步驟的處理步驟,并且不是本發(fā)明的主題。
以下,描述本發(fā)明關(guān)鍵結(jié)構(gòu)的部分語言規(guī)范顯示步驟N10。圖5是示出部分語言規(guī)范顯示步驟N10細(xì)節(jié)的流程圖。在循環(huán)處理L3中,由與所輸入程序的特定范圍對(duì)應(yīng)的每個(gè)調(diào)試信息執(zhí)行步驟N21-N26。在存在分析目標(biāo)時(shí)處理前進(jìn)到步驟N21,在不存在分析目標(biāo)時(shí)處理前進(jìn)到步驟N11。
在步驟N21中,判斷是否存在語言規(guī)范信息。當(dāng)判斷為真則處理前進(jìn)到步驟N22,當(dāng)判斷為非真則前進(jìn)到循環(huán)處理L3。在步驟N22中,基于記錄在調(diào)試信息中的語言規(guī)范信息顯示每個(gè)范圍的語言規(guī)范及其程序來源,然后處理前進(jìn)到步驟N23。
在步驟N23中,判斷分析目標(biāo)是否為由模板生成的實(shí)例。當(dāng)判斷結(jié)果為真則處理前進(jìn)到步驟N24,當(dāng)結(jié)果為非真則前進(jìn)到步驟N25。在步驟N24中,顯示其中模板被開發(fā)的源程序,并且處理前進(jìn)到步驟N25。
在步驟N25中,判斷子集的語言規(guī)范是否被定義為所認(rèn)可的語言規(guī)范。當(dāng)判斷結(jié)果為真則處理前進(jìn)到步驟N26,當(dāng)結(jié)果為非真則前進(jìn)到循環(huán)處理L3。在步驟N26中,清楚地描述了與子集的語言規(guī)范偏離的程序部分的內(nèi)容。
當(dāng)執(zhí)行上述包括部分語言規(guī)范顯示步驟N10的調(diào)試過程時(shí),程序員可以輕易地掌握程序的每個(gè)部分以何種語言規(guī)范被編譯,以及源程序的哪個(gè)部分在其被改變?yōu)樽蛹恼Z言規(guī)范時(shí)應(yīng)該被校正。結(jié)果是,可以有效地執(zhí)行調(diào)試和微調(diào)操作。
以下,參照具體示例更加具體地描述根據(jù)本發(fā)明的編譯方法和調(diào)試方法,在具體示例中,C++語言用作超集的語言規(guī)范而C語言用作子集的語言規(guī)范。
具體示例1圖6示出存儲(chǔ)在程序存儲(chǔ)單元D1中的源程序的示例。以下描述在輸入源程序的情況下的編譯方法。假設(shè)用戶指定<main.cpp>作為C++語言被編譯而<sub.c>作為C語言被編譯??梢圆捎眠@樣的方式指定語言規(guī)范,即在源程序中描述#pragma,然而這類似于基于命令行指定語言規(guī)范的情況,因此在此說明書中省略對(duì)其的描述。圖6中所示的源文件<main.cpp>引用外部函數(shù)f。源文件<sub.c>定義外部函數(shù)f。
參照?qǐng)D7,預(yù)先提及要解決的問題。圖7示出在中間代碼生成步驟S3中生成的分別位于函數(shù)f引用側(cè)和定義側(cè)的中間代碼中的信息的一部分。
在根據(jù)傳統(tǒng)方法編譯具體示例1的情況下,進(jìn)行連接而不考慮分析目標(biāo)的中間代碼的語言規(guī)范。因此,在具體示例1中函數(shù)代碼名不相同(f_Fv_和_f),這導(dǎo)致在連接時(shí)產(chǎn)生錯(cuò)誤。因此,如圖8所示,有必要以用戶校正程序的方式合并函數(shù)代碼名,從而使得連接指配顯式地示出(見“C”)。這樣,傳統(tǒng)上需要校正步驟來在C語言中和在C++語言中使用源,這降低了開發(fā)過程中的效率程度。
接下來,示出本優(yōu)選實(shí)施例的具體示例。在本具體示例中,在函數(shù)作用域的范圍內(nèi)進(jìn)行分析。在部分語言規(guī)范判定步驟S10中,由每個(gè)中間代碼執(zhí)行圖2所示的循環(huán)處理L1(步驟S21-S25),所述中間代碼對(duì)應(yīng)于與中間代碼生成步驟中生成的中間代碼相對(duì)應(yīng)的各個(gè)函數(shù)作用域的范圍。在本具體示例中,假設(shè)用戶指定<main.cpp>以C++語言編譯,而<sub.c>以C語言編譯。因此,步驟S24的判斷結(jié)果為真,則執(zhí)行步驟S25。結(jié)果是,指示語言規(guī)范為C++語言的信息記錄在引用側(cè)的中間代碼中,而指示語言規(guī)范為C語言的信息記錄在定義側(cè)的中間代碼中(見圖9)。
接下來,執(zhí)行部分代碼校正步驟S11。首先,執(zhí)行圖3所示的循環(huán)處理L2(步驟S31-S38)。在本具體示例中,在分別位于定義側(cè)和引用側(cè)的中間代碼的語言規(guī)范信息之間存在差別(C++語言和C語言)。因此,步驟S31的判斷結(jié)果為真,則執(zhí)行步驟S32。相互比較C++語言和C語言,C++語言是超集的語言規(guī)范,而C語言是子集的語言規(guī)范。因此,在具有子集語言規(guī)范的定義側(cè)的中間代碼的函數(shù)代碼名被改變?yōu)樵诰哂谐Z言規(guī)范的引用側(cè)的中間代碼的函數(shù)代碼名(圖10,合并為_f_Fv)。在之后的步驟S33-S38中,判斷出所有的步驟都為非真。
如上所述,通過考慮分析目標(biāo)的中間代碼的語言規(guī)范,使得相同函數(shù)代碼名被合并,并且允許連接而不顯式地指配連接。因此,傳統(tǒng)上為了如同使用C++語言中的源那樣使用C語言中的源所必須的校正源的步驟,變得不必要。結(jié)果是,開發(fā)過程可以達(dá)到提高的效率。
具體示例2圖11示出使用存儲(chǔ)在程序存儲(chǔ)單元D1中的多重定義函數(shù)的源程序的示例。以與多重定義函數(shù)情況下的具體示例相似的方式,對(duì)在其中使用名字空間和模板的源程序進(jìn)行處理,在此省略對(duì)它的描述。以下給出對(duì)輸入了相關(guān)源程序的情況下的編譯方法的描述。假設(shè)<test.cpp>被編譯,而用戶沒有指定語言規(guī)范。
參照?qǐng)D12,預(yù)先指出問題區(qū)域。在根據(jù)傳統(tǒng)方法編譯本具體示例中的源程序<test.cpp>的情況下,所有函數(shù)都被作為C++語言的函數(shù)進(jìn)行編譯,因?yàn)樵谠闯绦蛑惺褂昧俗鳛镃++語言的工具性程序的多重定義函數(shù)。因?yàn)檫@些函數(shù)被作為C++語言的函數(shù)進(jìn)行編譯,即使在函數(shù)體中只使用了C語言的工具性程序,還是會(huì)冗余地生成代碼。圖12示出了“test.cpp”的“voidf(void)”被作為C++語言的函數(shù)進(jìn)行編譯的情況下的代碼生成結(jié)果,和“test.cpp”的“void f(void)”被作為C語言的函數(shù)進(jìn)行編譯的情況下的代碼生成結(jié)果。如同從圖12中清晰所見,與作為C語言的函數(shù)進(jìn)行編譯相比,作為C++語言的函數(shù)進(jìn)行編譯的代碼生成結(jié)果中冗余地生成了代碼。
接下來,示出本優(yōu)選實(shí)施例的另一具體示例。以類似于具體示例1的方式,對(duì)本具體示例的函數(shù)作用域執(zhí)行分析。在部分語言規(guī)范判定步驟S10中,由每個(gè)中間代碼執(zhí)行圖2所示的循環(huán)處理L1(步驟S21-S25),所述中間代碼對(duì)應(yīng)于與中間代碼生成步驟中生成的中間代碼相對(duì)應(yīng)的各個(gè)函數(shù)作用域。在本具體示例中,由于用戶沒有指定語言規(guī)范,步驟S22和S24的判斷結(jié)果均為非真,因此不執(zhí)行步驟S23和S25。因此,基于分析目標(biāo)范圍中所用編程語言的工具性程序而判定的語言規(guī)范信息被記錄在中間代碼中(步驟S21)。在本具體示例中,函數(shù)“void f(void)”和“void f(int)”是具有相同函數(shù)名的多重定義函數(shù),并且是C++語言的工具性程序(函數(shù))。因此,語言規(guī)范為C++語言的信息被記錄在使用這些工具性程序的范圍中的中間代碼中(如圖13所示的所有中間代碼中的C++語言)。
接下來,執(zhí)行部分代碼校正步驟S11。首先,執(zhí)行圖3所示的循環(huán)處理L2(步驟S31-S38)。在本具體示例中,由于定義側(cè)中間代碼的語言規(guī)范信息與引用側(cè)中間代碼的語言規(guī)范信息之間不存在差別(都是C+語言),因此不執(zhí)行步驟S32,而是執(zhí)行步驟S34,因?yàn)橄嚓P(guān)函數(shù)是多重定義函數(shù)。在本具體示例中,如圖14所示,函數(shù)名被改變?yōu)橹T如_ _L1、_ _L2的函數(shù)名,它們是具有單獨(dú)函數(shù)名的外部函數(shù)名并且在程序中未被多重定義,并在此后保持每個(gè)語言規(guī)范和函數(shù)代碼名。這里將多重定義函數(shù)敘述為本具體示例中的一個(gè)例子,然而,函數(shù)名可以被改變?yōu)槌绦蛑芯哂袉为?dú)函數(shù)名并且在程序中未被多重定義的外部函數(shù),其中以類似于多重定義函數(shù)的方式使用名字空間和模板(步驟S36和S38)。
結(jié)果是,執(zhí)行步驟S34,步驟S39的判斷結(jié)果為真,并且再次執(zhí)行部分語言規(guī)范判定步驟S10。在步驟S10的第二次執(zhí)行中,由于多重定義函數(shù)的函數(shù)名被改變?yōu)開 _L1、_ _L2,所以,相關(guān)函數(shù)不被認(rèn)可為多重定義函數(shù)。接下來,在步驟S21記錄表示語言規(guī)范為C語言的信息,并且作為C語言的函數(shù)代碼名被賦給相關(guān)函數(shù)(圖15)。在第二步驟S11的執(zhí)行中沒有造成特定改變,并且處理前進(jìn)到步驟S12及其后的處理步驟。
圖16示出本發(fā)明未應(yīng)用到本具體示例的情況下的代碼生成結(jié)果,和本發(fā)明應(yīng)用到本具體示例的情況下的代碼生成結(jié)果。如圖16清晰所示,較之未應(yīng)用本發(fā)明的情況,在應(yīng)用本發(fā)明的情況下,任何冗余代碼都被刪除了。
具體示例3示出了調(diào)試方法的具體示例。在本具體示例中,假設(shè)根據(jù)本發(fā)明編譯方法記錄在中間代碼中的語言規(guī)范信息也記錄在調(diào)試信息中。圖17示出執(zhí)行調(diào)試程序的監(jiān)視器。當(dāng)部分語言規(guī)范顯示命令被輸入時(shí),執(zhí)行部分語言規(guī)范顯示步驟N10。在本具體示例中,由于假設(shè)語言規(guī)范信息記錄在調(diào)試信息中,因此執(zhí)行步驟N22,并且基于記錄在調(diào)試信息中的語言規(guī)范信息,一起顯示在所輸入程序中設(shè)置的至少兩個(gè)范圍當(dāng)中每個(gè)范圍中的語言規(guī)范及其程序來源。圖18示出語言規(guī)范顯示的示例。該顯示例僅僅示出示例,而且任何方式都是可接受的,只要顯示關(guān)于語言規(guī)范的信息。
接下來,判斷分析目標(biāo)是否為由模板生成的實(shí)例(步驟N23)。在本具體示例中,在分析目標(biāo)是A<int>obj的情況下,因?yàn)閷?shí)例生成自模板,所以判斷結(jié)果為真,并且如圖19所示,顯示其中模板被開發(fā)的源程序。該顯示例僅僅示出示例,而且任何方式都是可接受的,只要顯示關(guān)于其中模板被開發(fā)的源程序的信息。
接下來,判斷子集的語言規(guī)范是否被定義為被認(rèn)可的規(guī)范(步驟N25)。在本具體示例中,由于定義的是作為C++語言的子集規(guī)范的C語言,因此判斷結(jié)果為真。然后,如圖20所示,在語言規(guī)范被判斷為C++語言的范圍內(nèi),偏離C語言語言規(guī)范(模板工具性程序)的一部分的內(nèi)容被顯式地描述。該顯示示例僅僅示出示例,而任何方式都是可接受的,只要顯示關(guān)于偏離子集語言規(guī)范的那部分內(nèi)容的信息。
如從圖18-20清晰所見,當(dāng)使用根據(jù)本發(fā)明的調(diào)試方法時(shí),程序員可以輕易地掌握程序的哪一部分基于何種語言規(guī)范進(jìn)行編譯以及源程序的哪一部分應(yīng)該在其被改變?yōu)樽蛹Z言規(guī)范時(shí)被校正。結(jié)果是,可以有效率地執(zhí)行調(diào)試和微調(diào)操作。
雖然詳細(xì)描述了本發(fā)明的優(yōu)選實(shí)施例,但是應(yīng)該理解,可以對(duì)本發(fā)明進(jìn)行多種修改,并且本發(fā)明意在所附權(quán)利要求中覆蓋所有落入本發(fā)明真正精神和范圍中的這些修改。
權(quán)利要求
1.一種用于將輸入程序轉(zhuǎn)換成目標(biāo)程序的編譯方法,包括部分語言規(guī)范判定步驟,用于判定在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;判斷步驟,用于判斷所述特定范圍中的語言規(guī)范之間是否存在差別;和部分代碼校正步驟,用于在判斷出所述特定范圍中的語言規(guī)范之間存在差別時(shí),對(duì)特定范圍之一中的至少一部分代碼進(jìn)行校正。
2.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分語言規(guī)范判定步驟中,基于在特定范圍中使用的編程語言的工具性程序判定所述語言規(guī)范。
3.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分語言規(guī)范判定步驟中,在所述輸入程序中存在語言規(guī)范控制語句的情況下,基于所述語言規(guī)范控制語句判定所述語言規(guī)范。
4.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分語言規(guī)范判定步驟中,在語言規(guī)范控制指令被提供給用于編譯所述輸入程序的編譯系統(tǒng)的情況下,基于所述語言規(guī)范控制指令判定所述語言規(guī)范。
5.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分代碼校正步驟中,在所有函數(shù)中的定義語言規(guī)范與引用語言規(guī)范之間存在差別的情況下,具有子集語言規(guī)范的函數(shù)代碼名被改變?yōu)榫哂谐Z言規(guī)范的函數(shù)代碼名。
6.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分代碼校正步驟中,所有被多重定義的外部函數(shù)都被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中未被多重定義的外部函數(shù),并且當(dāng)所有被多重定義的外部函數(shù)都被改變?yōu)榫哂性搯为?dú)函數(shù)名并且在程序中未被多重定義的該外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
7.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分代碼校正步驟中,所有屬于一名字空間的外部函數(shù)都被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中不屬于所述名字空間的外部函數(shù),并且當(dāng)所有屬于所述名字空間的外部函數(shù)都被改變?yōu)榫哂兴鰡为?dú)函數(shù)名并且在程序中不屬于所述名字空間的所述外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
8.根據(jù)權(quán)利要求1所述的編譯方法,其中在所述部分代碼校正步驟中,所有由一模板生成的外部函數(shù)都被改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中不是由該模板生成的外部函數(shù),并且當(dāng)所有由該模板生成的外部函數(shù)都被改變?yōu)榫哂兴鰡为?dú)函數(shù)名并且在程序中不是由該模板生成的所述外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
9.一種用于調(diào)試輸入程序的調(diào)試方法,包括部分語言規(guī)范認(rèn)可步驟,用于認(rèn)可在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;和部分語言規(guī)范顯示步驟,用于一起顯示每個(gè)特定范圍中所認(rèn)可的語言規(guī)范及其程序來源。
10.根據(jù)權(quán)利要求9所述的調(diào)試方法,進(jìn)一步包括模板開發(fā)顯示步驟,用于在分析目標(biāo)是由所述模板生成的實(shí)例的情況下,顯示其中模板被開發(fā)的源程序。
11.根據(jù)權(quán)利要求9所述的調(diào)試方法,進(jìn)一步包括用于顯示違背子集語言規(guī)范的部分的步驟,其中在子集語言規(guī)范被定義在所認(rèn)可的語言規(guī)范中的情況下,偏離子集語言規(guī)范的一部分程序的內(nèi)容被顯式地顯示。
12.一種用于將輸入程序轉(zhuǎn)換成目標(biāo)程序的編譯程序,該編譯程序使計(jì)算機(jī)執(zhí)行部分語言規(guī)范判定工具性程序,用于判定在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;用于判斷所述特定范圍中的語言規(guī)范之間是否存在差別的工具性程序;和部分代碼校正工具性程序,用于在判斷出所述特定范圍之間存在差別的情況下,對(duì)特定范圍之一中的至少一部分代碼進(jìn)行校正。
13.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分語言規(guī)范判定工具性程序基于在特定范圍中使用的編程語言的工具性程序判定所述語言規(guī)范。
14.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分語言規(guī)范判定工具性程序在輸入程序中存在語言規(guī)范控制語句的情況下,基于所述語言規(guī)范控制語句判定所述語言規(guī)范。
15.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分語言規(guī)范判定工具性程序在語言規(guī)范控制指令被提供給用于編譯所述輸入程序的編譯系統(tǒng)的情況下,基于所述語言規(guī)范控制指令判定所述語言規(guī)范。
16.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分代碼校正工具性程序在所有函數(shù)中的定義語言規(guī)范與引用語言規(guī)范之間存在差別的情況下,將具有子集語言規(guī)范的函數(shù)代碼名改變?yōu)榫哂谐Z言規(guī)范的函數(shù)代碼名。
17.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分代碼校正工具性程序?qū)⑺斜欢嘀囟x的外部函數(shù)都改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中未被多重定義的外部函數(shù),并且當(dāng)所有被多重定義的外部函數(shù)都被改變?yōu)榫哂性搯为?dú)函數(shù)名并且在程序中未被多重定義的該外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定工具性程序。
18.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分代碼校正工具性程序?qū)⑺袑儆谝幻挚臻g的外部函數(shù)都改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中不屬于所述名字空間的外部函數(shù),并且當(dāng)所有屬于所述名字空間的外部函數(shù)都被改變?yōu)榫哂兴鰡为?dú)函數(shù)名并且在程序中不屬于所述名字空間的所述外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定功能。
19.根據(jù)權(quán)利要求12所述的編譯程序,其中所述部分代碼校正工具性程序?qū)⑺杏梢荒0迳傻耐獠亢瘮?shù)都改變?yōu)榫哂袉为?dú)函數(shù)名并且在程序中不是由該模板生成的外部函數(shù),并且當(dāng)所有由該模板生成的外部函數(shù)都被改變?yōu)榫哂性搯为?dú)函數(shù)名并且在程序中不是由該模板生成的該外部函數(shù)時(shí),再次執(zhí)行部分語言規(guī)范判定步驟。
20.一種用于調(diào)試輸入程序的調(diào)試程序,所述調(diào)試程序使計(jì)算機(jī)執(zhí)行部分語言規(guī)范認(rèn)可工具性程序,用于認(rèn)可在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;和部分語言規(guī)范顯示工具性程序,用于一起顯示每個(gè)特定范圍中所認(rèn)可的語言規(guī)范及其程序來源。
21.根據(jù)權(quán)利要求20所述的調(diào)試程序,其中該程序進(jìn)一步使該計(jì)算機(jī)執(zhí)行一模板開發(fā)顯示工具性程序,其用于在分析目標(biāo)是由所述模板生成的實(shí)例的情況下,顯示其中模板被開發(fā)的源程序。
22.根據(jù)權(quán)利要求20所述的調(diào)試程序,其中該程序進(jìn)一步使該計(jì)算機(jī)執(zhí)行一子集語言規(guī)范違背顯示步驟,其用于在子集語言規(guī)范被定義在所認(rèn)可的語言規(guī)范中的情況下,顯式地顯示偏離子集語言規(guī)范的一部分程序的內(nèi)容。
全文摘要
一種用于將輸入程序轉(zhuǎn)換成目標(biāo)程序的編譯方法,包括部分語言規(guī)范判定步驟,用于判定在輸入程序中設(shè)置的至少兩個(gè)特定范圍的每個(gè)特定范圍中的語言規(guī)范;判斷步驟,用于判斷所述特定范圍中的語言規(guī)范之間是否存在差別;和部分代碼校正步驟,用于在判斷出所述特定范圍中的語言規(guī)范之間存在差別時(shí),對(duì)特定范圍之一中的至少一部分代碼進(jìn)行校正。
文檔編號(hào)G06F9/45GK101071385SQ20071010683
公開日2007年11月14日 申請(qǐng)日期2007年5月10日 優(yōu)先權(quán)日2006年5月11日
發(fā)明者淺尾忍 申請(qǐng)人:松下電器產(chǎn)業(yè)株式會(huì)社