反编译电子表格中的循环的制作方法

文档序号:6427017阅读:220来源:国知局
专利名称:反编译电子表格中的循环的制作方法
技术领域
本发明涉及反编译电子表格中的循环。
背景技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排、会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境上。更具体地,电子表格程序被用在各种不同的环境中。在一些更专业的环境中,电子表格被用在技术计算中。例如,域专员可使用电子表格来构件和运行模型并且从这一形式所提供的快速原型构造中获益。然而,当输入对模型的改变时,使用电子表格作为编程语言的基本局限使得它们很难重用并且维护。例如,电子表格通常能够表达在常规的编程语言中是循环的计算。然而,这些计算按照空间而非按照时间来表达。由此,电子表格内的“循环”可能变得非常大、具有固定大小、并且在电子表格上并不是明显可见的。这些困难使用户很难识别和改变与电子表格内的循环相关联的表达式。

发明内容
本发明涉及用来反编译电子表格中的循环的方法、系统和计算机程序产品。削减电子表格以标识电子表格内的多个公式。生成多个公式的规范化表示。多个公式的规范化表示指示电子表格内的单元格位置之间的相对差异。计算多个公式之间的依赖性。基于多个公式之间的所计算的依赖性,计算电子表格的单元格之间的任何循环引用。具有检测到的循环引用的单元格被标记为迭代计算的一部分。对于所标记的单元格中的一个或多个,从多个公式的规范化表示中标识重复公式的一个或多个模式。确定重复公式的一个或多个模式表示至少一个循环。从多个公式中计算用于至少一个循环的循环输入数据和循环输出数据。提供本发明内容是为了以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用来帮助确定所要求保护的主题的范围。本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。


为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中图1示出了便于反编译电子表格中的循环的示例计算机体系结构。图2示出了用来反编译电子表格中的循环的示例方法的流程图。图3示出了在数组内表示电子表格的重叠部分的示例。图4示出了用于电子表格的数据视图和对应的公式视图。
具体实施例方式本发明涉及用来反编译电子表格中的循环的方法、系统和计算机程序产品。削减电子表格以标识电子表格内的多个公式。生成多个公式的规范化表示。多个公式的规范化表示指示电子表格内的单元格位置之间的相对差异。计算多个公式之间的依赖性。基于多个公式之间的所计算的依赖性,计算电子表格的单元格之间的任何循环引用。具有检测到的循环引用的单元格被标记为迭代计算的一部分。对于所标记的单元格中的一个或多个,从多个公式的规范化表示中标识重复公式的一个或多个模式。确定重复公式的一个或多个模式表示至少一个循环。从多个公式中计算用于至少一个循环的循环输入数据和循环输出数据。本发明的各实施例可以包括或利用包括诸如例如一个或多个处理器和系统存储器的计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明范围内的各实施例还包括用来携带或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这类计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。携带计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质计算机存储介质和传输介质。计算机存储介质包括RAM,ROM, EEPROM,CD-ROM或其他光盘存储,磁盘存储或其他磁存储设备,或可用来存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用来携带计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动地传送到计算机存储介质(或者相反)。例如,通过网络或数据链路接收的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终传送到计算机系统RAM和/或计算机系统处的较不易失的计算机存储介质。由此,应当理解,计算机存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码,诸如汇编语言等中间格式指令,或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解的是,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。本发明的各实施例通过走查电子表格上的依赖图来检测循环。当遇到节点时,在电子表格的规范化表示(例如,RlCl表示法)中寻找相同公式的序列。当标识到相同公式时,这些公式可表示循环。分析单元格的空间结构以确定哪些单元格要被存储在数组中,以及哪些单元格可以是循环携带的依赖性。图1示出了便于反编译电子表格中的循环的示例计算机体系结构100。参考图1, 计算机体系结构100包括公式解析器101、规范化器102、依赖性计算器103、循环引用计算器104、单元格标记器106、模式标识器107、循环标识器108、以及输入/输出计算器109。 所描绘的组件中的每一个通过系统总线或通过诸如例如局域网(“LAN”)、广域网(“WAN”) 以及甚至因特网等网络(或作为其一部分)彼此连接。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统和它们的组件都能够创建消息相关数据并通过系统总线或网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议, 诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)
寸乂 O一般而言,计算机体系结构100可用来标识电子表格内的循环和它们对应的输入数据和输出数据。公式解析器101被配置成接收电子表格,解析该电子表格来寻找公式,并且输出电子表格内的任何公式。规范化器102被配置成接收一个或多个公式,规范化这些公式,并且输出对应的规范化公式。规范化公式可包括将公式转换成不同的引用格式。例如,公式能够从诸如例如Al格式等对列使用字母且对行使用数字来标识单元格的引用格式转换成诸如例如RlCl格式等对列和行两者都使用数字来标识单元格的引用格式。例如,在单元格B3中具有诸如“=A1+A2”等相对引用的公式按照RlCl表示法是 “=R[-2]C[-1]+R[-1]C[-1]”。另一方面,具有诸如“=$A$1+$A$2”等绝对引用的公式不管它包含在哪一个单元格中都是“=R1C1+R2C2”。依赖性计算器103被配置成接收一个或多个公式,标识这些公式之间的依赖性, 并且输出所标识的依赖性。循环引用计算器104被配置成接收依赖性,标识依赖性中的循环引用,并且输出循环引用。单元格标记器106被配置成接收循环引用,将具有检测到的循环引用的单元格标记为迭代计算的一部分,并且输出所标记的单元格。模式标识器被配置成接收一个或多个规范化公式的所标记的单元格,标识重复公式,并且输出相同公式。重复公式能够是除了行或列偏移量之外否则是相同的公式。循环标识器108被配置成接收重复公式,标识相同公式内的循环,并且输出所标识的循环。输入 \输出计算器109被配置成接收一个或多个循环和对应的规范化公式,标识用于循环的输入数据和输出数据,并且输出所标识的输入数据和输出数据。图2示出了用来反编译电子表格中的循环的示例方法200的流程图。方法200将参考计算机体系机构100的组件和数据来描述。方法200包括解析电子表格以标识该电子表格内的多个公式的动作(动作201)。 例如,公式解析器101可接收电子表格111。从电子表格111,公式解析器101可解析电子表格111以标识公式112,包括公式112A,112B,112C等。公式解析器101可将公式112发送给规范化器102和依赖性计算器103。方法200包括生成多个公式的规范化表示的动作,该多个公式的规范化表示指示电子表格内的单元格位置之间的相对差异(动作202)。例如,规范化器102可接收来自公式解析器101的公式112。从公式112,规范化器102可将公式112规范化成规范化公式 112N。规范化器102可将规范化公式112N输出给模式标识器107和输入/输出计算器109。规范化公式112N中的每一个规范化公式可对应于公式112中的一个公式。例如, 规范化公式112AN对应于公式112A,规范化公式112BN对应于公式112B,规范化公式112CN 对应于公式112C等。在一些实施例中,规范化器102通过将公式从Al格式转换成RlCl格式来规范化公式。例如,规范化器102可接收Al格式的公式112,并且可将公式112转换成 RlCl格式的公式112N。方法200包括计算多个公式之间的依赖性的动作(动作203)。例如,依赖性计算器103可接收来自公式解析器101的公式112。从公式112,依赖性计算器103可计算公式 112内的公式之间的依赖性113。依赖性计算器103可将依赖性113发送给循环引用计算器104。依赖性可包括第一公式使用由第二公式生成的变量值,从而对第二公式的任何改变可更改第一公式的结果。方法200包括基于多个公式之间的所计算的依赖性,检测电子表格的单元格之间的任何循环引用的动作(动作204)。例如,循环引用计算器104可接收依赖性113。从依赖性113,循环引用计算器104可基于依赖性113来检测电子表格111的单元格之间的循环引用114。循环引用计算器104可将循环引用发送给单元格标记器106。单元格之间的循环引用可包括彼此互相引用的单元格。例如,单元格A3中的公式可引用单元格B5,并且单元格B5中的公式也可以引用单元格A3。方法200包括将具有检测到的循环引用的单元格标记为迭代计算的一部分的动作(动作205)。例如,单元格标记器106可接收循环引用114。从循环引用114,单元格标记器106可将(电子表格111的)与循环引用114相对应的单元格(所标记的单元格116) 标记为迭代计算的一部分。单元格标记器可将所标记的单元格116发送给模式标识器107。 迭代计算可包括重复地执行可能是重复模式的类似计算。方法200包括对于所标记的单元格中的一个或多个,从多个公式的规范化表示中标识重复公式的一个或多个模式的动作(动作206)。例如,模式标识器107可接收所标记的单元格116和规范化公式112N。模式标识器107可从所标记的单元格116和规范化公式 112N中标识重复公式117N。重复公式是除了行或列偏移量之外否则是相同的公式。模式标记器107可将重复公式117发送给循环标识器108。相同(重复)公式可指示电子表格 111内的循环的可能性。方法200包括确定重复公式的一个或多个模式表示至少一个循环的动作(动作 207)。例如,循环标识器108可接收相同(重复)公式117。循环标识器108可从相同公式117中标识循环118。循环标识器108可将循环118发送给输入/输出计算器109。循环118可表示基于电子表格111内的依赖数据的一系列相同迭代计算。方法200包括从多个公式中计算用于至少一个循环的循环输入数据和循环输出数据的动作(动作208)。例如,输入/输出计算器109可接收规范化公式112N和循环118。 输入/输出计算器109可从规范化公式112N和循环118中计算用于循环118的输入数据 121和输出数据122。输入数据121和输出数据122可用来生成用于实现循环118的语义的其它代码(例如,诸如C#,C++, Visual Basic等的编程语言代码)。在标识循环和对应的输入数据和输出数据后,其它模块可在编程语言代码中表示循环语义。例如,循环118、输入数据121和输出数据122可用来在0#代码中表示循环118 的语义。其他模块还可更新电子表格以示出循环语义。例如,可更新电子表格111以示出循环118的语义。在一些实施例中,对电子表格的重叠部分取用于循环的输入和/或输出数据。在这些实施例中,可使用数组来便于对输入和输出数据进行更高效的处理。图3示出了在数组302中表示电子表格的重叠部分的示例。如图所示,循环311、312和313使用电子表格301内的重叠范围的单元格。循环 311使用B2:C8,循环311使用C4:E10,并且循环311使用D9。不同类型的阴影视觉上表示在电子表格301内不同的范围如何重叠。数组302可用来存储范围B2:E10。垂直阴影标识数组302的不被循环311、312和313中的任一个使用的各部分。为了引用电子表格301内的特定范围的单元格,使用对数组302的索引。例如,范围B2:C8由数组302中的位置1,1至7,2表示。类似地,范围C4:ElO由数组302中的位置 3,2至9,4表示。D9由数组302中的位置8,3表示。因此,单元格本质上被分成其自己的变量。数组的使用能提高效率,并且用来产生更可读的代码。因此,在一个或多个阶段中可标识循环和对应的数据。例如,公式可被解析成RlCl 表示法。从结果单元格开始,可走查所有可能的依赖性的图。可检测可能的环,并且将那些单元格标记为迭代计算循环的一部分。在一些实施例中,可考虑走查依赖性的次序。次序能有助于确定电子表格的哪些部分可以是循环的一部分,并且哪些部分可能不是。该判定能通过将绝对引用与相对引用分开并且使用单元格范围作为循环可能存在的提示来促进。随后,通过观察结果中的相同公式的模式可动态地匹配循环。例如,匹配可比较采用RlCl表示法的公式。在适当的维度(例如,行或列)中变化的相同(重复)公式可被放置在循环中。可类似地检测嵌套循环。随后能够通过检查所收集的公式来标识输入和输出数据。从活跃度分析中可确定哪些单元格是循环的输入以及哪些单元格是循环的输出。输入和输出在适当时能被存储在数组中,并且可利用索引表达式。循环迭代之间的重叠和所生成的循环携带赋值也视需要来解决。图4示出了用于电子表格401的数据视图和对应的公式视图。现在参考电子表格 401的公式视图来描述标识电子表格内的循环语义的更详细的示例。公式的初始(或单纯)翻译是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在调整了计算次序之后,将E2选为输出单元格。对具有“相同” RlCl表示法的公式进行编组。例如,用来计算D7、C7和E7的RlCl表示法与用来计算D8、C8和E8,用来计算D9、C9和E9,用来计算D10, ClO和E10,以及用来计算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)当处理公式时,只要检测到重复公式就执行匹配循环的尝试。因此,例如,当发出 D8时,检查整个计算以寻找可能的模式。C2 = 0. 05C3 = 536. 821623012139E6 = 100000D7 = E6*C$2/12C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12还没有检测模式。然而,当发出D9时,现在有两个循环迭代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这些是重复的。即,这些本质上是相同计算,但是移位了一个单元格。因此,为它们创建循环。该循环在第一次迭代之后将行偏移量加一。这得到C2 = 0. 05C3 = 536. 821623012139
E6 = 100000D7 = E6*C$2/12开始循环(行偏移量=+1,迭代=2)C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12结束循环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)继续所有的迭代,该循环得到C2 = 0. 05C3 = 536. 821623012139E6 = 100000D7 = E6*C$2/12开始循环(行偏移量=+1,迭代=5)C7 = C$3-D7E7 = E6-C7D8 = E7*C$2/12结束循环E2 = SUM(D7:D12)匹配数组得到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)此外,不必要的数组能被消除。能够使用数据流检测来实现一些数组能被降级到标量。例如,C7从来没有作为数组被读取或在循环之外被访问过。由此,C7能够从数组被降级到只是循环主体中的标量。这也避免了初始赋值‘C7 = kros (幻’。类似的分析对数
组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)
或者,这些公式能按以下方式在循环中匹配
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)
当一定范围的单元格在同一列或同一行内时,诸如,分别例如D7:D12或A3:F3,在同一列或同一行中的一定范围的单元格而非其它单元格上进行匹配可得到更适当的匹配。另外,当其他数据在电子表格中时,能够用最小的进一步分析来拆分循环。例如, 考虑将误差“+1000”引入单元格D10。本发明拆分循环,而无需额外的分析。因此,本发明的各实施例对于与电子表格中的其它公式不匹配的公式是稳健的。结果代码可以是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)可产生下列代码D4 = ZEROS (5)B3 = 1. . by 2for i in 1. . 5C4 = B3[i]+B3[l+i]D4[i]=C4*2endE4 = SUM(D4)循环依赖性和嵌套循环也可以被处理。例如,对于电子表格,其中每个公式是B2 = IF($A$1, COMPLEX (0, 0) , IF(IMABS(B2) > = 4, COMPLEX (4,0), IMSUM(IMPOWER(B2,2),COMPLEX(B$l,$A2))))循环依赖性和循环可在整个B2:GT202区域上被处理,得到
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) ”构造捕捉在循环中出现的迭代计算的语义。 "iterative-for”构造的类似实现可以是类似“for-loop”(for循环)的("for temp in 1.. 100”)。各实现也可具有更复杂的语义,例如,更接近地模仿电子表格程序(例如, Microsoft Excel ) calc (计算)引擎。循环分析的结果可以按各种方式来使用。电子表格可被更新并且用另外的GUI支持来示出循环。例如,循环可以被不同地着色、修饰、或封闭在可折叠区域中。循环分析结果可被导出到文本文件或在审计工具中使用来标识遗漏的潜在循环。本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
权利要求
1.一种在包括一个或多个处理器和系统存储器的计算机系统处的用来标识电子表格 (111)内的循环语义的方法,其特征在于,所述方法包括解析所述电子表格(111)以标识所述电子表格(111)内的多个公式(112)的动作; 生成所述多个公式(112N)的规范化表示的动作,所述多个公式的所述规范化表示指示所述电子表格(111)内的单元格位置之间的相对差异; 计算所述多个公式(112)之间的依赖性(113)的动作;基于所述多个公式(11 之间的所计算的依赖性(113),检测所述电子表格(111)的单元格之间的任何循环引用(114)的动作;将具有检测到的循环引用的单元格(116)标记为迭代计算的一部分的动作; 对于所标记的单元格(116)中的一个或多个,从所述多个公式(112)的所述规范化表示中标识重复公式(117)的一个或多个模式的动作;确定重复公式的所述一个或多个模式表示至少一个循环(118)的动作;以及从所述多个公式(112)中计算用于所述至少一个循环(118)的循环输入数据(121)和循环输出数据(122)的动作。
2.如权利要求1所述的方法,其特征在于,生成所述多个公式的规范化表示的所述动作包括将所述多个公式转换成RlCl表示法的动作。
3.如权利要求2所述的方法,其特征在于,确定重复公式的所述一或多个模式表示至少一个循环的所述动作包括标识除了下列之一之外相同的公式的动作行和列偏移量。
4.如权利要求1所述的方法,其特征在于,确定重复公式的所述一个或多个模式表示至少一个循环的所述动作包括为循环确定迭代次数的动作。
5.如权利要求1所述的方法,其特征在于,确定重复公式的所述一个或多个模式表示至少一个循环的所述动作包括标识嵌套循环的动作。
6.如权利要求1所述的方法,其特征在于,计算用于所述循环的循环输入数据和循环输出数据的所述动作包括检测用于所述循环的数据来自所述电子表格内的一定范围的单元格的动作;以及将来自所述一定范围的单元格的所述数据存储在数组中的动作。
7.如权利要求6所述的方法,其特征在于,确定相同公式的所述一个或多个模式表示至少一个循环的所述动作包括确定重复公式的所述一个或多个模式表示多个循环的动作。
8.如权利要求7所述的方法,其特征在于,计算用于至少一个循环的循环输入数据和循环输出数据的所述动作包括计算用于所述多个循环的循环输入数据和循环输出数据的动作。
9.如权利要求8所述的方法,其特征在于,计算用于所述多个循环的循环输入数据和循环输出数据的所述动作包括检测用于第一循环的数据来自所述电子表格内的第一范围的单元格的动作;以及检测用于第二循环的数据来自所述电子表格内的第二范围的单元格的动作,其中所述第一范围的单元格和所述第二范围的单元格至少部分重叠。
10.如权利要求9所述的方法,其特征在于,还包括创建包含所述第一范围的单元格中的所有单元格和所述第二范围的单元格中的所有单元格的数组的动作。
11.如权利要求10所述的方法,其特征在于,还包括确定所述数组内要被所述第一和第二范围的单元格覆盖的最小区域的动作,包括 将来自所述数组内的所述第一范围的单元格变换成第一数组的动作; 将来自所述第一范围的单元格的数据存储在所述第一数组中的动作; 将来自所述数组内的所述第二范围的单元格变换成第二数组的动作; 将来自所述第二范围的单元格的数据存储在所述第二数组中的动作。
12.—种供在计算机系统处使用的计算机程序产品,所述计算机程序产品实现一种用来标识电子表格内的循环语义的方法,所述计算机程序产品包括其上存储有计算机可执行指令的一个或多个计算机可读介质,所述计算机可执行指令当在处理器处执行时使所述计算机系统执行所述方法,其特征在于,所述方法包括以下动作解析所述电子表格(111)以标识所述电子表格(111)内的多个公式(112); 生成所述多个公式(112N)的规范化表示,所述多个公式的所述规范化表示指示所述电子表格(111)内的单元格位置之间的相对差异; 计算所述多个公式(112)之间的依赖性(113);基于所述多个公式(112)之间的所计算的依赖性(113),检测所述电子表格(111)的单元格之间的任何循环引用(114);将具有检测到的循环引用的单元格(116)标记为迭代计算的一部分; 对于所标记的单元格(116)中的一个或多个,从所述多个公式(112)的所述规范化表示中标识重复公式(117)的一个或多个模式;确定重复公式的所述一个或多个模式表示至少一个循环(118);以及从所述多个公式(112)中计算用于所述至少一个循环(118)的循环输入数据(121)和循环输出数据(122)。
13.如权利要求12所述的计算机程序产品,其特征在于,在执行时使所述计算机系统计算用于所述至少一个循环的循环输入数据和循环输出数据的计算机可执行指令包括在执行时使所述计算机系统计算用于多个循环的循环输入数据和循环输出数据的计算机可执行指令。
14.如权利要求13所述的计算机程序产品,其特征在于,在执行时使所述计算机系统计算用于所述多个循环的循环输入数据和循环输出数据的计算机可执行指令包括在执行时使所述计算机系统执行以下动作的计算机可执行指令检测用于第一循环的数据来自所述电子表格内的第一范围的单元格;以及检测用于第二循环的数据来自所述电子表格内的第二范围的单元格,其中所述第一范围的单元格和所述第二范围的单元格至少部分重叠。
15.一种计算机系统,其特征在于,所述计算机系统包括 一个或多个处理器;系统存储器;以及其上存储有计算机可执行指令的一个或多个计算机存储介质,所述计算机可执行指令表示公式解析器(101)、规范化器(10 、依赖性计算器(10 、循环引用计算器(104)、单元格标记器(106)、模式标识器(107)、循环标识器(108)、以及输入/输出计算器(109),其中计算机可执行指令被共同配置成解析所述电子表格(111)以标识所述电子表格(111)内的多个公式(112); 生成所述多个公式(112N)的规范化表示,所述多个公式的所述规范化表示指示所述电子表格(111)内的单元格位置之间的相对差异; 计算所述多个公式(112)之间的依赖性(113);基于所述多个公式(112)之间的所计算的依赖性(113),检测所述电子表格(111)的单元格之间的任何循环引用(114);将具有检测到的循环引用的单元格(116)标记为迭代计算的一部分; 对于所标记的单元格(116)中的一个或多个,从所述多个公式(112)的所述规范化表示中标识重复公式(117)的一个或多个模式;确定重复公式的所述一个或多个模式表示至少一个循环(118);以及从所述多个公式(112)中计算用于所述至少一个循环(118)的循环输入数据(121)和循环输出数据(122)。
全文摘要
本发明涉及用来反编译电子表格中的循环的方法、系统和计算机程序产品。本发明的各实施例通过走查电子表格上的依赖图来检测循环。当遇到节点时,在电子表格的规范化表示(例如,R1C1表示法)中寻找相同公式的序列。当标识到相同公式时,这些公式可表示循环。分析单元格的空间结构以确定哪些单元格要存储在数组中,以及哪些单元格可能是循环携带的依赖性。
文档编号G06F17/24GK102289429SQ201110172799
公开日2011年12月21日 申请日期2011年6月16日 优先权日2010年6月17日
发明者C·O·哈根洛赫, J·B·梅瑟利, J·J·于根宁, J·M·斯托尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1