專利名稱:反編譯電子表格中的循環(huán)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及反編譯電子表格中的循環(huán)。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響社會的許多方面。的確,計(jì)算機(jī)系統(tǒng)處理信息的能力已轉(zhuǎn)變了人們生活和工作的方式。計(jì)算機(jī)系統(tǒng)現(xiàn)在通常執(zhí)行在計(jì)算機(jī)系統(tǒng)出現(xiàn)以前手動執(zhí)行的許多任務(wù)(例如,文字處理、日程安排、會計(jì)等)。最近,計(jì)算機(jī)系統(tǒng)彼此耦合并耦合到其他電子設(shè)備以形成計(jì)算機(jī)系統(tǒng)和其他電子設(shè)備可以在其上傳輸電子數(shù)據(jù)的有線和無線計(jì)算機(jī)網(wǎng)絡(luò)。因此,許多計(jì)算任務(wù)的執(zhí)行分布在多個不同的計(jì)算機(jī)系統(tǒng)和/或多個不同的計(jì)算環(huán)境上。更具體地,電子表格程序被用在各種不同的環(huán)境中。在一些更專業(yè)的環(huán)境中,電子表格被用在技術(shù)計(jì)算中。例如,域?qū)T可使用電子表格來構(gòu)件和運(yùn)行模型并且從這一形式所提供的快速原型構(gòu)造中獲益。然而,當(dāng)輸入對模型的改變時,使用電子表格作為編程語言的基本局限使得它們很難重用并且維護(hù)。例如,電子表格通常能夠表達(dá)在常規(guī)的編程語言中是循環(huán)的計(jì)算。然而,這些計(jì)算按照空間而非按照時間來表達(dá)。由此,電子表格內(nèi)的“循環(huán)”可能變得非常大、具有固定大小、并且在電子表格上并不是明顯可見的。這些困難使用戶很難識別和改變與電子表格內(nèi)的循環(huán)相關(guān)聯(lián)的表達(dá)式。
發(fā)明內(nèi)容
本發(fā)明涉及用來反編譯電子表格中的循環(huán)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。削減電子表格以標(biāo)識電子表格內(nèi)的多個公式。生成多個公式的規(guī)范化表示。多個公式的規(guī)范化表示指示電子表格內(nèi)的單元格位置之間的相對差異。計(jì)算多個公式之間的依賴性?;诙鄠€公式之間的所計(jì)算的依賴性,計(jì)算電子表格的單元格之間的任何循環(huán)引用。具有檢測到的循環(huán)引用的單元格被標(biāo)記為迭代計(jì)算的一部分。對于所標(biāo)記的單元格中的一個或多個,從多個公式的規(guī)范化表示中標(biāo)識重復(fù)公式的一個或多個模式。確定重復(fù)公式的一個或多個模式表示至少一個循環(huán)。從多個公式中計(jì)算用于至少一個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)。提供本發(fā)明內(nèi)容是為了以簡化的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用來幫助確定所要求保護(hù)的主題的范圍。本發(fā)明的附加特征和優(yōu)點(diǎn)將在以下描述中敘述,且其一部分根據(jù)本描述將是顯而易見的,或可通過對本發(fā)明的實(shí)踐來獲知。本發(fā)明的特征和優(yōu)點(diǎn)可通過在所附權(quán)利要求書中特別指出的工具和組合來實(shí)現(xiàn)和獲得。本發(fā)明的這些和其他特征將通過以下描述和所附權(quán)利要求書變得更加顯而易見,或可通過對下文中所述的本發(fā)明的實(shí)踐來領(lǐng)會。
為了描述可獲得本發(fā)明的上述和其它優(yōu)點(diǎn)和特征的方式,將通過參考附圖中示出的本發(fā)明的具體實(shí)施例來呈現(xiàn)以上簡要描述的本發(fā)明的更具體描述。可以理解,這些附圖只描繪了本發(fā)明的各典型實(shí)施例,并且因此不被認(rèn)為是對其范圍的限制,將通過使用附圖并利用附加特征和細(xì)節(jié)來描述和解釋本發(fā)明,在附圖中圖1示出了便于反編譯電子表格中的循環(huán)的示例計(jì)算機(jī)體系結(jié)構(gòu)。圖2示出了用來反編譯電子表格中的循環(huán)的示例方法的流程圖。圖3示出了在數(shù)組內(nèi)表示電子表格的重疊部分的示例。圖4示出了用于電子表格的數(shù)據(jù)視圖和對應(yīng)的公式視圖。
具體實(shí)施例方式本發(fā)明涉及用來反編譯電子表格中的循環(huán)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。削減電子表格以標(biāo)識電子表格內(nèi)的多個公式。生成多個公式的規(guī)范化表示。多個公式的規(guī)范化表示指示電子表格內(nèi)的單元格位置之間的相對差異。計(jì)算多個公式之間的依賴性。基于多個公式之間的所計(jì)算的依賴性,計(jì)算電子表格的單元格之間的任何循環(huán)引用。具有檢測到的循環(huán)引用的單元格被標(biāo)記為迭代計(jì)算的一部分。對于所標(biāo)記的單元格中的一個或多個,從多個公式的規(guī)范化表示中標(biāo)識重復(fù)公式的一個或多個模式。確定重復(fù)公式的一個或多個模式表示至少一個循環(huán)。從多個公式中計(jì)算用于至少一個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)。本發(fā)明的各實(shí)施例可以包括或利用包括諸如例如一個或多個處理器和系統(tǒng)存儲器的計(jì)算機(jī)硬件的專用或通用計(jì)算機(jī),這將在以下做出進(jìn)一步討論。本發(fā)明范圍內(nèi)的各實(shí)施例還包括用來攜帶或存儲計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計(jì)算機(jī)可讀介質(zhì)。這類計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的任何可用介質(zhì)。存儲計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物理存儲介質(zhì)。攜帶計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施例可包括至少兩種完全不同的計(jì)算機(jī)可讀介質(zhì)計(jì)算機(jī)存儲介質(zhì)和傳輸介質(zhì)。計(jì)算機(jī)存儲介質(zhì)包括RAM,ROM, EEPROM,CD-ROM或其他光盤存儲,磁盤存儲或其他磁存儲設(shè)備,或可用來存儲計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當(dāng)信息通過網(wǎng)絡(luò)或另一通信連接(硬連線、無線、或硬連線或無線的組合)傳輸或提供給計(jì)算機(jī)時,該計(jì)算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用來攜帶計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置并可由通用或?qū)S糜?jì)算機(jī)訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。此外,在到達(dá)各種計(jì)算機(jī)系統(tǒng)組件之后,計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動地傳送到計(jì)算機(jī)存儲介質(zhì)(或者相反)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終傳送到計(jì)算機(jī)系統(tǒng)RAM和/或計(jì)算機(jī)系統(tǒng)處的較不易失的計(jì)算機(jī)存儲介質(zhì)。由此,應(yīng)當(dāng)理解,計(jì)算機(jī)存儲介質(zhì)可被包括在同樣(或甚至主要)利用傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。計(jì)算機(jī)可執(zhí)行指令例如包括,當(dāng)在處理器處執(zhí)行時使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼,諸如匯編語言等中間格式指令,或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解的是,所附權(quán)利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括個人計(jì)算機(jī)、臺式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動電話、PDA、尋呼機(jī)、路由器、交換機(jī)等。本發(fā)明也可以在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)踐。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲器存儲設(shè)備中。本發(fā)明的各實(shí)施例通過走查電子表格上的依賴圖來檢測循環(huán)。當(dāng)遇到節(jié)點(diǎn)時,在電子表格的規(guī)范化表示(例如,RlCl表示法)中尋找相同公式的序列。當(dāng)標(biāo)識到相同公式時,這些公式可表示循環(huán)。分析單元格的空間結(jié)構(gòu)以確定哪些單元格要被存儲在數(shù)組中,以及哪些單元格可以是循環(huán)攜帶的依賴性。圖1示出了便于反編譯電子表格中的循環(huán)的示例計(jì)算機(jī)體系結(jié)構(gòu)100。參考圖1, 計(jì)算機(jī)體系結(jié)構(gòu)100包括公式解析器101、規(guī)范化器102、依賴性計(jì)算器103、循環(huán)引用計(jì)算器104、單元格標(biāo)記器106、模式標(biāo)識器107、循環(huán)標(biāo)識器108、以及輸入/輸出計(jì)算器109。 所描繪的組件中的每一個通過系統(tǒng)總線或通過諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”) 以及甚至因特網(wǎng)等網(wǎng)絡(luò)(或作為其一部分)彼此連接。因此,所描繪的組件中的每一個以及任何其他連接的計(jì)算機(jī)系統(tǒng)和它們的組件都能夠創(chuàng)建消息相關(guān)數(shù)據(jù)并通過系統(tǒng)總線或網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報(bào)和利用IP數(shù)據(jù)報(bào)的其他更高層協(xié)議, 諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡單郵件傳輸協(xié)議(“SMTP”)
寸乂 O一般而言,計(jì)算機(jī)體系結(jié)構(gòu)100可用來標(biāo)識電子表格內(nèi)的循環(huán)和它們對應(yīng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)。公式解析器101被配置成接收電子表格,解析該電子表格來尋找公式,并且輸出電子表格內(nèi)的任何公式。規(guī)范化器102被配置成接收一個或多個公式,規(guī)范化這些公式,并且輸出對應(yīng)的規(guī)范化公式。規(guī)范化公式可包括將公式轉(zhuǎn)換成不同的引用格式。例如,公式能夠從諸如例如Al格式等對列使用字母且對行使用數(shù)字來標(biāo)識單元格的引用格式轉(zhuǎn)換成諸如例如RlCl格式等對列和行兩者都使用數(shù)字來標(biāo)識單元格的引用格式。例如,在單元格B3中具有諸如“=A1+A2”等相對引用的公式按照RlCl表示法是 “=R[-2]C[-1]+R[-1]C[-1]”。另一方面,具有諸如“=$A$1+$A$2”等絕對引用的公式不管它包含在哪一個單元格中都是“=R1C1+R2C2”。依賴性計(jì)算器103被配置成接收一個或多個公式,標(biāo)識這些公式之間的依賴性, 并且輸出所標(biāo)識的依賴性。循環(huán)引用計(jì)算器104被配置成接收依賴性,標(biāo)識依賴性中的循環(huán)引用,并且輸出循環(huán)引用。單元格標(biāo)記器106被配置成接收循環(huán)引用,將具有檢測到的循環(huán)引用的單元格標(biāo)記為迭代計(jì)算的一部分,并且輸出所標(biāo)記的單元格。模式標(biāo)識器被配置成接收一個或多個規(guī)范化公式的所標(biāo)記的單元格,標(biāo)識重復(fù)公式,并且輸出相同公式。重復(fù)公式能夠是除了行或列偏移量之外否則是相同的公式。循環(huán)標(biāo)識器108被配置成接收重復(fù)公式,標(biāo)識相同公式內(nèi)的循環(huán),并且輸出所標(biāo)識的循環(huán)。輸入 \輸出計(jì)算器109被配置成接收一個或多個循環(huán)和對應(yīng)的規(guī)范化公式,標(biāo)識用于循環(huán)的輸入數(shù)據(jù)和輸出數(shù)據(jù),并且輸出所標(biāo)識的輸入數(shù)據(jù)和輸出數(shù)據(jù)。圖2示出了用來反編譯電子表格中的循環(huán)的示例方法200的流程圖。方法200將參考計(jì)算機(jī)體系機(jī)構(gòu)100的組件和數(shù)據(jù)來描述。方法200包括解析電子表格以標(biāo)識該電子表格內(nèi)的多個公式的動作(動作201)。 例如,公式解析器101可接收電子表格111。從電子表格111,公式解析器101可解析電子表格111以標(biāo)識公式112,包括公式112A,112B,112C等。公式解析器101可將公式112發(fā)送給規(guī)范化器102和依賴性計(jì)算器103。方法200包括生成多個公式的規(guī)范化表示的動作,該多個公式的規(guī)范化表示指示電子表格內(nèi)的單元格位置之間的相對差異(動作202)。例如,規(guī)范化器102可接收來自公式解析器101的公式112。從公式112,規(guī)范化器102可將公式112規(guī)范化成規(guī)范化公式 112N。規(guī)范化器102可將規(guī)范化公式112N輸出給模式標(biāo)識器107和輸入/輸出計(jì)算器109。規(guī)范化公式112N中的每一個規(guī)范化公式可對應(yīng)于公式112中的一個公式。例如, 規(guī)范化公式112AN對應(yīng)于公式112A,規(guī)范化公式112BN對應(yīng)于公式112B,規(guī)范化公式112CN 對應(yīng)于公式112C等。在一些實(shí)施例中,規(guī)范化器102通過將公式從Al格式轉(zhuǎn)換成RlCl格式來規(guī)范化公式。例如,規(guī)范化器102可接收Al格式的公式112,并且可將公式112轉(zhuǎn)換成 RlCl格式的公式112N。方法200包括計(jì)算多個公式之間的依賴性的動作(動作203)。例如,依賴性計(jì)算器103可接收來自公式解析器101的公式112。從公式112,依賴性計(jì)算器103可計(jì)算公式 112內(nèi)的公式之間的依賴性113。依賴性計(jì)算器103可將依賴性113發(fā)送給循環(huán)引用計(jì)算器104。依賴性可包括第一公式使用由第二公式生成的變量值,從而對第二公式的任何改變可更改第一公式的結(jié)果。方法200包括基于多個公式之間的所計(jì)算的依賴性,檢測電子表格的單元格之間的任何循環(huán)引用的動作(動作204)。例如,循環(huán)引用計(jì)算器104可接收依賴性113。從依賴性113,循環(huán)引用計(jì)算器104可基于依賴性113來檢測電子表格111的單元格之間的循環(huán)引用114。循環(huán)引用計(jì)算器104可將循環(huán)引用發(fā)送給單元格標(biāo)記器106。單元格之間的循環(huán)引用可包括彼此互相引用的單元格。例如,單元格A3中的公式可引用單元格B5,并且單元格B5中的公式也可以引用單元格A3。方法200包括將具有檢測到的循環(huán)引用的單元格標(biāo)記為迭代計(jì)算的一部分的動作(動作205)。例如,單元格標(biāo)記器106可接收循環(huán)引用114。從循環(huán)引用114,單元格標(biāo)記器106可將(電子表格111的)與循環(huán)引用114相對應(yīng)的單元格(所標(biāo)記的單元格116) 標(biāo)記為迭代計(jì)算的一部分。單元格標(biāo)記器可將所標(biāo)記的單元格116發(fā)送給模式標(biāo)識器107。 迭代計(jì)算可包括重復(fù)地執(zhí)行可能是重復(fù)模式的類似計(jì)算。方法200包括對于所標(biāo)記的單元格中的一個或多個,從多個公式的規(guī)范化表示中標(biāo)識重復(fù)公式的一個或多個模式的動作(動作206)。例如,模式標(biāo)識器107可接收所標(biāo)記的單元格116和規(guī)范化公式112N。模式標(biāo)識器107可從所標(biāo)記的單元格116和規(guī)范化公式 112N中標(biāo)識重復(fù)公式117N。重復(fù)公式是除了行或列偏移量之外否則是相同的公式。模式標(biāo)記器107可將重復(fù)公式117發(fā)送給循環(huán)標(biāo)識器108。相同(重復(fù))公式可指示電子表格 111內(nèi)的循環(huán)的可能性。方法200包括確定重復(fù)公式的一個或多個模式表示至少一個循環(huán)的動作(動作 207)。例如,循環(huán)標(biāo)識器108可接收相同(重復(fù))公式117。循環(huán)標(biāo)識器108可從相同公式117中標(biāo)識循環(huán)118。循環(huán)標(biāo)識器108可將循環(huán)118發(fā)送給輸入/輸出計(jì)算器109。循環(huán)118可表示基于電子表格111內(nèi)的依賴數(shù)據(jù)的一系列相同迭代計(jì)算。方法200包括從多個公式中計(jì)算用于至少一個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的動作(動作208)。例如,輸入/輸出計(jì)算器109可接收規(guī)范化公式112N和循環(huán)118。 輸入/輸出計(jì)算器109可從規(guī)范化公式112N和循環(huán)118中計(jì)算用于循環(huán)118的輸入數(shù)據(jù) 121和輸出數(shù)據(jù)122。輸入數(shù)據(jù)121和輸出數(shù)據(jù)122可用來生成用于實(shí)現(xiàn)循環(huán)118的語義的其它代碼(例如,諸如C#,C++, Visual Basic等的編程語言代碼)。在標(biāo)識循環(huán)和對應(yīng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)后,其它模塊可在編程語言代碼中表示循環(huán)語義。例如,循環(huán)118、輸入數(shù)據(jù)121和輸出數(shù)據(jù)122可用來在0#代碼中表示循環(huán)118 的語義。其他模塊還可更新電子表格以示出循環(huán)語義。例如,可更新電子表格111以示出循環(huán)118的語義。在一些實(shí)施例中,對電子表格的重疊部分取用于循環(huán)的輸入和/或輸出數(shù)據(jù)。在這些實(shí)施例中,可使用數(shù)組來便于對輸入和輸出數(shù)據(jù)進(jìn)行更高效的處理。圖3示出了在數(shù)組302中表示電子表格的重疊部分的示例。如圖所示,循環(huán)311、312和313使用電子表格301內(nèi)的重疊范圍的單元格。循環(huán) 311使用B2:C8,循環(huán)311使用C4:E10,并且循環(huán)311使用D9。不同類型的陰影視覺上表示在電子表格301內(nèi)不同的范圍如何重疊。數(shù)組302可用來存儲范圍B2:E10。垂直陰影標(biāo)識數(shù)組302的不被循環(huán)311、312和313中的任一個使用的各部分。為了引用電子表格301內(nèi)的特定范圍的單元格,使用對數(shù)組302的索引。例如,范圍B2:C8由數(shù)組302中的位置1,1至7,2表示。類似地,范圍C4:ElO由數(shù)組302中的位置 3,2至9,4表示。D9由數(shù)組302中的位置8,3表示。因此,單元格本質(zhì)上被分成其自己的變量。數(shù)組的使用能提高效率,并且用來產(chǎn)生更可讀的代碼。因此,在一個或多個階段中可標(biāo)識循環(huán)和對應(yīng)的數(shù)據(jù)。例如,公式可被解析成RlCl 表示法。從結(jié)果單元格開始,可走查所有可能的依賴性的圖??蓹z測可能的環(huán),并且將那些單元格標(biāo)記為迭代計(jì)算循環(huán)的一部分。在一些實(shí)施例中,可考慮走查依賴性的次序。次序能有助于確定電子表格的哪些部分可以是循環(huán)的一部分,并且哪些部分可能不是。該判定能通過將絕對引用與相對引用分開并且使用單元格范圍作為循環(huán)可能存在的提示來促進(jìn)。隨后,通過觀察結(jié)果中的相同公式的模式可動態(tài)地匹配循環(huán)。例如,匹配可比較采用RlCl表示法的公式。在適當(dāng)?shù)木S度(例如,行或列)中變化的相同(重復(fù))公式可被放置在循環(huán)中??深愃频貦z測嵌套循環(huán)。隨后能夠通過檢查所收集的公式來標(biāo)識輸入和輸出數(shù)據(jù)。從活躍度分析中可確定哪些單元格是循環(huán)的輸入以及哪些單元格是循環(huán)的輸出。輸入和輸出在適當(dāng)時能被存儲在數(shù)組中,并且可利用索引表達(dá)式。循環(huán)迭代之間的重疊和所生成的循環(huán)攜帶賦值也視需要來解決。圖4示出了用于電子表格401的數(shù)據(jù)視圖和對應(yīng)的公式視圖?,F(xiàn)在參考電子表格 401的公式視圖來描述標(biāo)識電子表格內(nèi)的循環(huán)語義的更詳細(xì)的示例。公式的初始(或單純)翻譯是C2 = 0. 05C3 = 536. 821623012139C7 = C$3-D7C8 = C$3-D8C9 = C$3-D9ClO = C$3-D10Cll = C$3-D11C12 = C$3-D12D7 = E6*C$2/12D8 = E7*C$2/12D9 = E8*C$2/12DlO = E9*C$2/12Dll = E10*C$2/12D12 = E11*C$2/12E2 = SUM(D7:D12)E3 = E6-E12E6 = 100000E7 = E6-C7E8 = E7-C8E9 = E8-C9ElO = E9-C10Ell = ElO-CllE12 = E11-C12在調(diào)整了計(jì)算次序之后,將E2選為輸出單元格。對具有“相同” RlCl表示法的公式進(jìn)行編組。例如,用來計(jì)算D7、C7和E7的RlCl表示法與用來計(jì)算D8、C8和E8,用來計(jì)算D9、C9和E9,用來計(jì)算D10, ClO和E10,以及用來計(jì)算Dl 1、Cll和Ell的RlCl表示法相同。用于D12的RlCl表示法也與D列中的其它值相同。C2 = 0. 05C3 = 536. 821623012139E6 = 100000D7 = E6*C$2/12C7 = C$3-D7E7 = E6-C7
D8 = E7*C$2/12C8 = C$3-D8E8 = E7-C8D9 = E8*C$2/12C9 = C$3-D9E9 = E8-C9DlO = E9*C$2/12ClO = C$3-D10ElO = E9-C10Dll = E10*C$2/12Cll = C$3-D11Ell = ElO-CllD12 = E11*C$2/12E2 = SUM(D7:D12)當(dāng)處理公式時,只要檢測到重復(fù)公式就執(zhí)行匹配循環(huán)的嘗試。因此,例如,當(dāng)發(fā)出 D8時,檢查整個計(jì)算以尋找可能的模式。C2 = 0. 05C3 = 536. 821623012139E6 = 100000D7 = E6*C$2/12C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12還沒有檢測模式。然而,當(dāng)發(fā)出D9時,現(xiàn)在有兩個循環(huán)迭代C7、E7、D8和C8、E8、 D9。C2 = 0. 05C3 = 536. 821623012139E6 = 100000D7 = E6*C$2/12C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12C8 = C$3-D8E8 = E7-C8D9 = E8*C$2/12這些是重復(fù)的。即,這些本質(zhì)上是相同計(jì)算,但是移位了一個單元格。因此,為它們創(chuàng)建循環(huán)。該循環(huán)在第一次迭代之后將行偏移量加一。這得到C2 = 0. 05C3 = 536. 821623012139
E6 = 100000D7 = E6*C$2/12開始循環(huán)(行偏移量=+1,迭代=2)C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12結(jié)束循環(huán)C9 = C$3-D9E9 = E8-C9DlO = E9*C$2/12ClO = C$3-D10ElO = E9-C10Dll = E10*C$2/12Cll = C$3-D11Ell = ElO-CllD12 = E11*C$2/12E2 = SUM(D7:D12)繼續(xù)所有的迭代,該循環(huán)得到C2 = 0. 05C3 = 536. 821623012139E6 = 100000D7 = E6*C$2/12開始循環(huán)(行偏移量=+1,迭代=5)C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12結(jié)束循環(huán)E2 = SUM(D7:D12)匹配數(shù)組得到C7 = ZEROS (5)D7 = ZEROS (6)E6 = ZEROS (6)C2 = 0. 05C3 = 536.821623012139E6[l] = 100000D7[l] = E6[1]*C$2/12for i in 1. . 5C7[i] = C3-D7[i]E6[i+1] = E6[i]-C7[i]
D7[i+1] = E6[i+l]*C2/12endE2 = SUM(D7)此外,不必要的數(shù)組能被消除。能夠使用數(shù)據(jù)流檢測來實(shí)現(xiàn)一些數(shù)組能被降級到標(biāo)量。例如,C7從來沒有作為數(shù)組被讀取或在循環(huán)之外被訪問過。由此,C7能夠從數(shù)組被降級到只是循環(huán)主體中的標(biāo)量。這也避免了初始賦值‘C7 = kros (幻’。類似的分析對數(shù)
組E6成立。
D7 = ZEROS (6)
C2 = 0. 05
C3 = 536. 821623012139
E6 = 100000
D7[l] = E6*C2/12
for i in 1. . 5
C7 = C3-D7[i]
E7 = E6-C7
D7[l+i] = E7*C2/12
E6 = E7
end
E2 = SUM(D7)
或者,這些公式能按以下方式在循環(huán)中匹配
D7 = E6*C$2/12
C7 = C$3-D7
E7 = E6-C7
D8 = E7*C$2/12
C8 = C$3-D8
E8 = E7-C8
得到最終代碼
D7 = ZEROS (6)
C2 = 0. 05
C3 = 536. 821623012139
E6 = 100000
for i in 1. . 5
D7[l+i] = E6*C2/12
C7 = C3-D7[i]
E7 = E6-C7
E6 = E7
end
D7[6] = E6*C2/12
E2 = SUM(D7)
當(dāng)一定范圍的單元格在同一列或同一行內(nèi)時,諸如,分別例如D7:D12或A3:F3,在同一列或同一行中的一定范圍的單元格而非其它單元格上進(jìn)行匹配可得到更適當(dāng)?shù)钠ヅ?。另外,?dāng)其他數(shù)據(jù)在電子表格中時,能夠用最小的進(jìn)一步分析來拆分循環(huán)。例如, 考慮將誤差“+1000”引入單元格D10。本發(fā)明拆分循環(huán),而無需額外的分析。因此,本發(fā)明的各實(shí)施例對于與電子表格中的其它公式不匹配的公式是穩(wěn)健的。結(jié)果代碼可以是D7 = ZEROS (6)E6 = ZEROS (3)C3 = 536. 821623012139E6[l] = 100000C2 = 5%D7[l] = E6[1]*C2/12for i in 1. . 2by 1C7 = C3_D7[i]E6[l+i] = E6[i]-C7D7[l+i] = E6[l+i]*C2/12endC9 = C3-D7 [3]E9 = E6 [3] ~C9D7[4] = E9*C2/12+1000// 引入誤差for j in 1. . 2by 1ClO = C3-D7[3+j]ElO = E9-C10D7[4+j] = E10*C2/12E9 = ElOendE2 = SUM(D7)常量輸入可以按類似的方式來匹配。給定具有下列公式的電子表格B3 = 1B4 = 3B5 = 5B6 = 7B7 = 9B8 = 11C4 = B3+B4C5 = B4+B5C6 = B5+B6C7 = B6+B7C8 = B7+B8D4 = C4*2
D5 = C5*2D6 = C6*2D7 = C7*2D8 = C8*2E4 = SUM(D4:D8)可產(chǎn)生下列代碼D4 = ZEROS (5)B3 = 1. . by 2for i in 1. . 5C4 = B3[i]+B3[l+i]D4[i]=C4*2endE4 = SUM(D4)循環(huán)依賴性和嵌套循環(huán)也可以被處理。例如,對于電子表格,其中每個公式是B2 = IF($A$1, COMPLEX (0, 0) , IF(IMABS(B2) > = 4, COMPLEX (4,0), IMSUM(IMPOWER(B2,2),COMPLEX(B$l,$A2))))循環(huán)依賴性和循環(huán)可在整個B2:GT202區(qū)域上被處理,得到
A2=l.. by -0.01 Bl 二-1.5..by 0.01 iterative for loop for i in 1..201for j in 1..201 if Al
B2[i,j]=COMPLEX(0,0) else
ifIMABS(B2[i,j])>=4
B2[i,j]=COMPLEX(4,0) else
B2[i,j]=IMSUM(IMPOWER(B2[i,j],2),COMPLEX(B 1 [j],A2[i])) end end end end
end"iterative-for (迭代for) ”構(gòu)造捕捉在循環(huán)中出現(xiàn)的迭代計(jì)算的語義。 "iterative-for”構(gòu)造的類似實(shí)現(xiàn)可以是類似“for-loop”(for循環(huán))的("for temp in 1.. 100”)。各實(shí)現(xiàn)也可具有更復(fù)雜的語義,例如,更接近地模仿電子表格程序(例如, Microsoft Excel ) calc (計(jì)算)引擎。循環(huán)分析的結(jié)果可以按各種方式來使用。電子表格可被更新并且用另外的GUI支持來示出循環(huán)。例如,循環(huán)可以被不同地著色、修飾、或封閉在可折疊區(qū)域中。循環(huán)分析結(jié)果可被導(dǎo)出到文本文件或在審計(jì)工具中使用來標(biāo)識遺漏的潛在循環(huán)。本發(fā)明可被具體化為其他具體形式而不背離其精神或本質(zhì)特征。所描述的實(shí)施例在所有方面都應(yīng)被認(rèn)為僅是說明性而非限制性的。從而,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種在包括一個或多個處理器和系統(tǒng)存儲器的計(jì)算機(jī)系統(tǒng)處的用來標(biāo)識電子表格 (111)內(nèi)的循環(huán)語義的方法,其特征在于,所述方法包括解析所述電子表格(111)以標(biāo)識所述電子表格(111)內(nèi)的多個公式(112)的動作; 生成所述多個公式(112N)的規(guī)范化表示的動作,所述多個公式的所述規(guī)范化表示指示所述電子表格(111)內(nèi)的單元格位置之間的相對差異; 計(jì)算所述多個公式(112)之間的依賴性(113)的動作;基于所述多個公式(11 之間的所計(jì)算的依賴性(113),檢測所述電子表格(111)的單元格之間的任何循環(huán)引用(114)的動作;將具有檢測到的循環(huán)引用的單元格(116)標(biāo)記為迭代計(jì)算的一部分的動作; 對于所標(biāo)記的單元格(116)中的一個或多個,從所述多個公式(112)的所述規(guī)范化表示中標(biāo)識重復(fù)公式(117)的一個或多個模式的動作;確定重復(fù)公式的所述一個或多個模式表示至少一個循環(huán)(118)的動作;以及從所述多個公式(112)中計(jì)算用于所述至少一個循環(huán)(118)的循環(huán)輸入數(shù)據(jù)(121)和循環(huán)輸出數(shù)據(jù)(122)的動作。
2.如權(quán)利要求1所述的方法,其特征在于,生成所述多個公式的規(guī)范化表示的所述動作包括將所述多個公式轉(zhuǎn)換成RlCl表示法的動作。
3.如權(quán)利要求2所述的方法,其特征在于,確定重復(fù)公式的所述一或多個模式表示至少一個循環(huán)的所述動作包括標(biāo)識除了下列之一之外相同的公式的動作行和列偏移量。
4.如權(quán)利要求1所述的方法,其特征在于,確定重復(fù)公式的所述一個或多個模式表示至少一個循環(huán)的所述動作包括為循環(huán)確定迭代次數(shù)的動作。
5.如權(quán)利要求1所述的方法,其特征在于,確定重復(fù)公式的所述一個或多個模式表示至少一個循環(huán)的所述動作包括標(biāo)識嵌套循環(huán)的動作。
6.如權(quán)利要求1所述的方法,其特征在于,計(jì)算用于所述循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的所述動作包括檢測用于所述循環(huán)的數(shù)據(jù)來自所述電子表格內(nèi)的一定范圍的單元格的動作;以及將來自所述一定范圍的單元格的所述數(shù)據(jù)存儲在數(shù)組中的動作。
7.如權(quán)利要求6所述的方法,其特征在于,確定相同公式的所述一個或多個模式表示至少一個循環(huán)的所述動作包括確定重復(fù)公式的所述一個或多個模式表示多個循環(huán)的動作。
8.如權(quán)利要求7所述的方法,其特征在于,計(jì)算用于至少一個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的所述動作包括計(jì)算用于所述多個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的動作。
9.如權(quán)利要求8所述的方法,其特征在于,計(jì)算用于所述多個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的所述動作包括檢測用于第一循環(huán)的數(shù)據(jù)來自所述電子表格內(nèi)的第一范圍的單元格的動作;以及檢測用于第二循環(huán)的數(shù)據(jù)來自所述電子表格內(nèi)的第二范圍的單元格的動作,其中所述第一范圍的單元格和所述第二范圍的單元格至少部分重疊。
10.如權(quán)利要求9所述的方法,其特征在于,還包括創(chuàng)建包含所述第一范圍的單元格中的所有單元格和所述第二范圍的單元格中的所有單元格的數(shù)組的動作。
11.如權(quán)利要求10所述的方法,其特征在于,還包括確定所述數(shù)組內(nèi)要被所述第一和第二范圍的單元格覆蓋的最小區(qū)域的動作,包括 將來自所述數(shù)組內(nèi)的所述第一范圍的單元格變換成第一數(shù)組的動作; 將來自所述第一范圍的單元格的數(shù)據(jù)存儲在所述第一數(shù)組中的動作; 將來自所述數(shù)組內(nèi)的所述第二范圍的單元格變換成第二數(shù)組的動作; 將來自所述第二范圍的單元格的數(shù)據(jù)存儲在所述第二數(shù)組中的動作。
12.—種供在計(jì)算機(jī)系統(tǒng)處使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品實(shí)現(xiàn)一種用來標(biāo)識電子表格內(nèi)的循環(huán)語義的方法,所述計(jì)算機(jī)程序產(chǎn)品包括其上存儲有計(jì)算機(jī)可執(zhí)行指令的一個或多個計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令當(dāng)在處理器處執(zhí)行時使所述計(jì)算機(jī)系統(tǒng)執(zhí)行所述方法,其特征在于,所述方法包括以下動作解析所述電子表格(111)以標(biāo)識所述電子表格(111)內(nèi)的多個公式(112); 生成所述多個公式(112N)的規(guī)范化表示,所述多個公式的所述規(guī)范化表示指示所述電子表格(111)內(nèi)的單元格位置之間的相對差異; 計(jì)算所述多個公式(112)之間的依賴性(113);基于所述多個公式(112)之間的所計(jì)算的依賴性(113),檢測所述電子表格(111)的單元格之間的任何循環(huán)引用(114);將具有檢測到的循環(huán)引用的單元格(116)標(biāo)記為迭代計(jì)算的一部分; 對于所標(biāo)記的單元格(116)中的一個或多個,從所述多個公式(112)的所述規(guī)范化表示中標(biāo)識重復(fù)公式(117)的一個或多個模式;確定重復(fù)公式的所述一個或多個模式表示至少一個循環(huán)(118);以及從所述多個公式(112)中計(jì)算用于所述至少一個循環(huán)(118)的循環(huán)輸入數(shù)據(jù)(121)和循環(huán)輸出數(shù)據(jù)(122)。
13.如權(quán)利要求12所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,在執(zhí)行時使所述計(jì)算機(jī)系統(tǒng)計(jì)算用于所述至少一個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時使所述計(jì)算機(jī)系統(tǒng)計(jì)算用于多個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的計(jì)算機(jī)可執(zhí)行指令。
14.如權(quán)利要求13所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,在執(zhí)行時使所述計(jì)算機(jī)系統(tǒng)計(jì)算用于所述多個循環(huán)的循環(huán)輸入數(shù)據(jù)和循環(huán)輸出數(shù)據(jù)的計(jì)算機(jī)可執(zhí)行指令包括在執(zhí)行時使所述計(jì)算機(jī)系統(tǒng)執(zhí)行以下動作的計(jì)算機(jī)可執(zhí)行指令檢測用于第一循環(huán)的數(shù)據(jù)來自所述電子表格內(nèi)的第一范圍的單元格;以及檢測用于第二循環(huán)的數(shù)據(jù)來自所述電子表格內(nèi)的第二范圍的單元格,其中所述第一范圍的單元格和所述第二范圍的單元格至少部分重疊。
15.一種計(jì)算機(jī)系統(tǒng),其特征在于,所述計(jì)算機(jī)系統(tǒng)包括 一個或多個處理器;系統(tǒng)存儲器;以及其上存儲有計(jì)算機(jī)可執(zhí)行指令的一個或多個計(jì)算機(jī)存儲介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令表示公式解析器(101)、規(guī)范化器(10 、依賴性計(jì)算器(10 、循環(huán)引用計(jì)算器(104)、單元格標(biāo)記器(106)、模式標(biāo)識器(107)、循環(huán)標(biāo)識器(108)、以及輸入/輸出計(jì)算器(109),其中計(jì)算機(jī)可執(zhí)行指令被共同配置成解析所述電子表格(111)以標(biāo)識所述電子表格(111)內(nèi)的多個公式(112); 生成所述多個公式(112N)的規(guī)范化表示,所述多個公式的所述規(guī)范化表示指示所述電子表格(111)內(nèi)的單元格位置之間的相對差異; 計(jì)算所述多個公式(112)之間的依賴性(113);基于所述多個公式(112)之間的所計(jì)算的依賴性(113),檢測所述電子表格(111)的單元格之間的任何循環(huán)引用(114);將具有檢測到的循環(huán)引用的單元格(116)標(biāo)記為迭代計(jì)算的一部分; 對于所標(biāo)記的單元格(116)中的一個或多個,從所述多個公式(112)的所述規(guī)范化表示中標(biāo)識重復(fù)公式(117)的一個或多個模式;確定重復(fù)公式的所述一個或多個模式表示至少一個循環(huán)(118);以及從所述多個公式(112)中計(jì)算用于所述至少一個循環(huán)(118)的循環(huán)輸入數(shù)據(jù)(121)和循環(huán)輸出數(shù)據(jù)(122)。
全文摘要
本發(fā)明涉及用來反編譯電子表格中的循環(huán)的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。本發(fā)明的各實(shí)施例通過走查電子表格上的依賴圖來檢測循環(huán)。當(dāng)遇到節(jié)點(diǎn)時,在電子表格的規(guī)范化表示(例如,R1C1表示法)中尋找相同公式的序列。當(dāng)標(biāo)識到相同公式時,這些公式可表示循環(huán)。分析單元格的空間結(jié)構(gòu)以確定哪些單元格要存儲在數(shù)組中,以及哪些單元格可能是循環(huán)攜帶的依賴性。
文檔編號G06F17/24GK102289429SQ201110172799
公開日2011年12月21日 申請日期2011年6月16日 優(yōu)先權(quán)日2010年6月17日
發(fā)明者C·O·哈根洛赫, J·B·梅瑟利, J·J·于根寧, J·M·斯托爾 申請人:微軟公司