运算次序的图形表示的制作方法

文档序号:6532874阅读:225来源:国知局
运算次序的图形表示的制作方法
【专利摘要】在源代码查看器或编辑器引擎中生成并显示源代码的一部分的运算次序的图形表示。图形表示可以按照多种不同格式与源代码同时可视地显示在同一窗口中,或显示在独立的窗口中。图形表示的各种显示格式可采取以下形式:线表示、树表示、数字排序、颜色高亮文本、颜色高亮运算符等等。运算次序的图形表示帮助查看源代码的用户理解源代码执行过程中运算被执行的次序。
【专利说明】运算次序的图形表示
[0001]背景
[0002]计算机程序根据一定的运算次序来执行表达式中的运算(operat1n)。运算次序是一个规则集,该规则集指定表达式中的哪些运算符优先于其他运算符。例如,数学表达式2+3x4可被求值如下:其中加法运算符优先于乘法运算符,由此产生值20(即,(2+3)x4 =20)。替代地,同一数学表达式可被求值如下:其中乘法运算符优先于加法运算符,由此产生值24(即,2+(3x4) =24)。在不指定运算次序的情况下,可能产生不一致的结果。
[0003]运算次序通常由编写该计算机程序(例如,应用、脚本等)的编程语言的语法来指定。每种编程语言可使用一种不同的运算次序来对表达式求值。当用户观看或者编辑用不熟悉的编程语言编写的源代码时,不同的运算次序可能为用户带来问题。此外,某些编程语言的语法的细微差别可能很复杂,由此使得运算次序难以确定。


【发明内容】

[0004]提供本概述是为了以简化的形式介绍将在以下【具体实施方式】中进一步描述的选择的概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
[0005]源代码是用编程语言编写的,该编程语言具有指定运算被执行的方式的语言模型或语法。具体而言,运算次序指定编程语言中使用的运算符相对于其他运算符的优先关系。将运算次序的图形表示连同源代码一起显示,使得用户能够理解运算被执行的次序。这在开发和维护源代码的过程中是有益的。
[0006]该图形表示可以按照多种不同格式可视地显示。图形表示的各种显示格式可采取以下形式:线表不、树表不、数字排序、颜色闻売文本、颜色闻売运算符等等。该图形表不可以显示可按任何次序执行而不影响结果的运算。图形表示的各部分可被折叠和/或用特定字符遮掩(ghost)。
[0007]通过阅读下面的详细描述并参考相关联的附图,这些及其他特点和优点将变得显而易见。应该理解,前面的概括说明和下面的详细描述只是说明性的,不会对所要求保护的各方面形成限制。
[0008]附图简述
[0009]图1解说用于生成和显示运算次序的图形表示的第一示例性系统。
[0010]图2解说用于生成和显示运算次序的图形表示的第二示例性系统。
[0011]图3A-3F解说为了运算的顺序执行而格式化的运算次序的图形表示的各实施例。
[0012]图4A-4J解说为了运算的并行和顺序执行而格式化的运算次序的图形表示的各实施例。
[0013]图5解说一表达式的图形表示,其中仅该表达式的运算符被显示在运算次序的图形表示中。
[0014]图6解说选择性地遮掩和折叠运算次序的图形表示的一些部分。
[0015]图7A-7C解说运算次序的图形表示在显示器上的放置的各实施例。
[0016]图8解说动态生成的运算次序的图形表示。
[0017]图9是解说用于生成所显示的源代码的一部分的图形表示的示例性方法的流程图。
[0018]图10是示出操作环境的框图。
[0019]图11是解说第一示例性计算设备的框图。
[0020]图12是解说第二示例性计算设备的框图。
[0021]图13是示出示例性服务器的框图。

【具体实施方式】
[0022]各实施例涉及源代码的所选部分的运算次序的图形表示的生成及显示。运算次序的图形表示可以被可视地显示以帮助用户(例如,开发者、程序员等)更完整地理解源代码的所选部分的执行流程。图形表示可以按照多种不同格式与源代码同时可视地显示在同一窗口中,或显示在独立的窗口中。图形表示的各种显示格式可采取以下形式:线表示、树表不、数字排序、颜色闻売文本、颜色闻売运算符等等。运算次序的图形表不帮助查看源代码的用户理解源代码执行过程中运算被执行的次序。这种知识可被用户用来调试、测试和/或编辑源代码以实现其意图。
[0023]现在将注意力转向对利用运算次序的图形表示的第一示例性系统的讨论。参考图1,示出用于生成和显示运算次序的图形表示的示例性系统100的框图。虽然图1中示出的系统100具有按照某种拓扑结构的有限数量的元素,但可以理解,系统100可以视给定实现的需要而包括按照替代拓扑结构的更多或更少元素。
[0024]系统100可包括计算设备102,该计算设备可以是能够执行可编程指令的任何类型的电子设备,这些设备为诸如但不限于:移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持式计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务器、工作站、小型机、大型机、巨型机、网络设备、web设备、分布式计算系统、多处理器系统或其组合。
[0025]计算设备102可包括能够显示源代码108的源代码查看器104和编辑器引擎106。源代码查看器104可以是使用户(例如,程序员、开发者等)能够查看源代码108的软件应用。编辑器引擎106可以是程序员用来查看、编辑、和/或创建源代码的软件应用。源代码108可以是计算机程序指令序列,该序列在被处理器执行时致使该处理器根据规定的任务来执行方法和/或操作。源代码108可以是可使用任何适当的高级、低级、面向对象、可视、编译和/或解释性编程语言实现的软件应用、程序代码、程序、过程、模块、代码段、程序栈、中间件、固件、方法、例程、网页、可执行代码、脚本文件等等。
[0026]当在源代码查看器104或编辑器引擎106中查看源代码时,用户可选择该源代码108中该用户希望查看其运算次序的部分。输入选择器110可被用户用来标识源代码中对其次序感兴趣的部分。输入选择器I1可以是光标位置112和/或高亮器114。光标位置112是光标被放置的位置,其标识感兴趣的源代码部分。高亮器114可以是源代码中的阴影部分,其标识感兴趣的源代码。应当注意,输入选择器110可以是用户可用来标识感兴趣的源代码的任何机制。
[0027]输入分析器116接收该源代码中用户或程序已选择来进行运算次序分析的部分。输入分析器116还可基于语言模型或用户选项来寻找该分析所需要的整个语句。输入分析器116可从源代码查看器104接收源代码的静态选择的部分。源代码的静态选择的部分是从静态源代码列表标识的。源代码的静态选择的部分可以通过光标位置、高亮文本等来指定。输入分析器116可识别被指定的源代码的量不是完整的表达式或语句,如由语言模型或用户选项所指定的。在此情况下,输入分析器116可将附加的文本或字符结合到源代码的所选部分中以补全该表达式或语句。
[0028]输入分析器116也可从动态模块选择器107接收源代码的动态选择的部分。源代码的动态选择的部分在用户生成该源代码、测试该源代码和/或编辑该源代码的同时被实时标识。
[0029]动态模块选择器107确定源代码中用户想要显示其相应运算次序的部分。在一些情况下,用户可通过高亮文本来标识源代码的该部分。在其他情况下,动态模块选择器107必须从输入选择器110 (诸如光标位置112)确定来确定源代码的该部分。例如,如果光标位置112被放置在一行源代码中间,则动态模块选择器107确定该行中的什么字符要包括在该源代码部分中,以便获得经补全的表达式。
[0030]此外,动态模块选择器107可能必须推断该源代码中用户选择以进行运算次序分析的部分。在实时编辑上下文中,诸如用编辑器引擎来编辑,用户可能没有完成在源代码中的键入,或者即便用户已选择了源代码的一部分以进行运算次序分析也仍在进行编辑。根据语言模型或用户选项,该源代码的可被选择的部分不是完整的表达式或语句。在此情形中,动态模块选择器107必须推断该用户的动作来确定是否包括附加字符、等待用户继续键入并键入逻辑代码分隔符等等。
[0031]例如,为了解说动态模块选择器107的角色,考虑以下源代码部分。
[0032]void cClass::DoSomething(int*a, int b,int c,int d) {(I)
[0033]a+ = 2 ;(2)
[0034]CrashSystemO ;(3)
[0035]int e = *a++ ;(4)
[0036]int f = *a I ++ ;(5)
[0037]if(e+f>b*c*d) {(6)
[0038]OopsDontCrashSystem () ;(7)
[0039]在第(5)行中,有光标“ I ”,其被置于该行中间在字符“a”之后且在“++”之前。动态模块选择器107将识别在此光标位置后有附加文本,并且包括该源代码的所选择部分中的第(5)行的文本的剩余部分,使得完整表达式被包括在内。从而,动态模块选择器107将确定所选择的源代码部分是“int f = *a++; ”。应当注意,输入分析器116具有相同能力以捕捉附加文本和字符到源代码的静态选择的部分中,如在以上代码示例中指出的。
[0040]源代码的所选择的部分可被解析器118用来生成一数据结构,该数据结构代表该所选择的代码部分的句法结构。解析器118利用用于编写该源代码的语言模型122 (诸如编程语言的语法)以确定所选择的代码部分的句法结构。语言模型122或语法包括规则集,该规则集被用来将令牌集转换为该编程语言的句法结构。被用来对表达式求值的运算次序是该语法中固有的。
[0041]解析器118可生成解析树,解析树代表所选代码部分的句法结构。解析树可包含代表变量的叶节点以及代表被应用到表达式中的变量的运算符的内部节点。替代地,解析器118可利用其它数据结构来代表所选代码部分的句法结构,诸如而不限于:散列表、向量坐坐寸寸ο
[0042]解析器118可接收一个或多个解析器选项120,解析器选项被用来定制运算次序,其被用于图形表示。例如,用户可通过解析器选项120指定:对于所选源代码部分,函数名的求值不应当被考虑在运算次序中。同样,用户可通过解析器选项120指定:所选源代码部分不应当包括包含小于50个字符的代码行。还可通过解析器选项120指定其他用户偏好。
[0043]图形表示模块124利用解析树来生成运算次序的图形表示。图新表示模块124可接收图形表示选项126,该图形表示选项指定用户期望的图形表示的格式。例如,图形表示选项126可包括线表示格式、树表示格式、数字排序格式、着色文本格式、基于字体的文本格式等等。此外,图形表示选项126可指定使用该格式来代表优先关系的方式。例如,线表示格式具有按分层次序在每一运算上方放置一行。运算的优先关系可以通过按从下到上次序放置各行来指定,其中底部的线表示第一运算,且其上每一条线按照在底部上以上示出的次序来指定。类似地,在从上倒下次序中,顶部的线可被指定为表示第一运算,而底部线以下的每一条线按照其下示出的次序来执行。
[0044]图形引擎128可被用来为用户将图形表示显示到显示器130上。图形引擎128可以是管理将对象(诸如运算次序的图形表示)渲染到显示器130上的窗口中的软件应用。显示器130是与计算设备102相关联的屏幕或者视觉显示单元。
[0045]图2解说用于生成和显示运算次序的图形表示的第二示例性系统200的框图。虽然图2中示出的系统200具有按照某种拓扑结构的有限数量的元素,但可以理解,系统200可以视给定实现的需要而包括按照替代拓扑结构的更多或更少元素。
[0046]在系统200中,服务器202可被用来存储源代码卷,其可被用户通过源代码查看器104来查看,该源代码查看器由服务器202托管。用户可利用来自用户的计算设备201的web浏览器206来通过服务器的源代码查看器104查看源代码。当源代码存储在服务器202中时,解析器118可被用来生成源代码的存储在服务器的解析树储存库210中的解析树或其他句法表示。当用户期望查看源代码的一部分的运算次序时,web浏览器206可从服务器202请求响应的解析树。服务器202可向用户的计算设备102提供该解析树,图形表示模块124可使用该解析树来根据用户的图形表示选项126将运算次序生成到显示器130上。
[0047]参考图2,系统200可包括通过网络204通信耦合于服务器202的计算设备201。计算设备201和服务器202可以是能够执行可编程指令的任何类型的电子设备,这些设备为诸如但不限于:移动设备、个人数字助理、移动计算设备、智能电话、蜂窝电话、手持式计算机、服务器、服务器阵列或服务器场、web服务器、网络服务器、因特网服务器、工作站、小型机、大型机、巨型机、网络设备、web设备、分布式计算系统、多处理器系统或其组合。网络204可以是任何类型的通信基础结构,其帮助计算设备201和服务器202之间的电子通信,并且在下面针对图10中示出的通信框架更详细地描述。
[0048]计算设备201可包括web浏览器206、图形表示模块124、图形表示选项126、图形引擎128、以及显示器。Web浏览器206可被用来通过源代码查看器104查看托管在服务器202上的源代码。用户可通过web浏览器206请求源代码的特定部分的运算次序。源代码的解析树或句法表示可从服务器202获得。图形表示模块124可接收该解析树并且生成相应的运算次序,该运算次序被图形引擎128显示在显示器130上。
[0049]服务器202可包括源代码查看器104、输入分析器116、解析器118、解析器选项120、语言模型122、源代码储存库208、以及解析树储存库210。每当将源代码上传到服务器202以存储到源代码储存库208中时,解析器118可被激活以生成该源代码的解析树。解析器选项120可指定:解析器118可在源代码的任何部分已被修改时或者在源代码被存储、查看或编辑特定时刻重新生成解析树。各实施例不限于这种方式。
[0050]解析树可能已被存储在解析树储存库210中。源代码查看器104可接收对与源代码的特定部分相关联的解析树的请求,该解析树可从解析树储存库210检索。输入分析器116、解析器118、解析器选项120、以及语言模型122按照与上面针对图1描述的类似的范式操作。
[0051]尽管图1和2中示出的系统100、200具有按照特定配置的有限数量的元素,然而应当理解,系统100、200可包括按照替代配置的更多或更少的元素。例如,动态模块选择器107、输入分析器116、解析器118、和/或图形表示模块124可被结合到源代码查看器104、编辑器引擎106、集成开发环境、操作系统、云服务、编译器、云服务的高速缓存、电子邮件客户端、操作系统、和/或其组合中。进一步,用户可在计算设备102上,利用web编辑器、web服务客户端等来访问托管在图2中示出的服务器202上的源代码。
[0052]在其他实施例中,图2中示出的系统200的元素可按照替代配置来布置。流入,月艮务器202可托管编辑器引擎106,该编辑器引擎可通过驻留在客户端设备102上的web浏览器206或其他应用来访问。在另一示例中,源代码可被存储在服务器202中并且通过驻留在计算设备201上的源代码查看器、编辑器引擎、web编辑器等来查看。在编辑器引擎从计算设备访问源代码的情况下,动态模块选择器107可驻留于计算设备201或服务器202上。在其他实施例中,源代码可被存储在计算设备201中且与源代码相关联的解析树可存储在服务器202上。计算设备201可在源代码的开发和维护过程中的各种时刻将源代码传送到服务器202,以供服务器上的解析器生成相关联的解析树。在此实施例中,服务器202被用来生成、存储、以及托管解析树以供计算设备201在需要时使用。
[0053]在各个实施例中,在此描述的系统100、200可包括具有多个元件、程序、过程、模块的计算机实现的系统。如此处所使用地,这些术语旨在指代与计算机相关的实体,包括硬件、硬件和软件的组合或软件中的任一个。例如,元件可被实现为在处理器上运行的进程、硬盘驱动器、多个(光和/或磁存储介质的)存储驱动器、对象、可执行代码、执行的线程、程序、和/或计算机。作为说明,在计算机上运行的应用和计算机两者都可以是元件。一个或多个元件可以驻留在执行的进程和/或线程内,且元件可以视给定实现所需而位于一个计算机上和/或被分布在两个或更多计算机之间。各实施例不限于这种方式。
[0054]系统100、200的各个元件可经由各条线或箭头所指示的各种类型的通信介质通信地耦合。元件可以协调彼此之间的操作。该协调可以涉及单向或双向信息交换。例如,元件可以传递通过通信介质传递的信号形式的信息。该信息可被实现成分配给各条信号线的信号。在这些分配中,每一消息都是信号。然而,其他实施例可另选地采用数据消息。这些数据消息可以跨各个连接发送。示例性连接包括并行接口、串行接口和总线接口。
[0055]现在将注意力转向该图形表示的各实施例的进一步描述。参考图3A、示出了用C编程语言编写的一行源代码,其包含陈述AI B+C ID的表达式300。此表达式中存在4个变量,即,A、B、C和D。该表达式中存在两个运算符,即,算术加运算‘ + ’和逻辑或运算“I I”。
[0056]图3B示出与表达式300相对应的解析树302的示例性表示。解析树302包含叶节点和内部节点,也节点包含表达式300中的4个变量而内部节点包含表达式300中的运算符。通过从终端节点开始到根节点从上到下地遍历解析树302,在解析树302中示出了运算次序。以此方式,解析树302示出:表达式300的运算次序是首先计算B+C,随后计算Al I (B+C),并最后计算 D I (Al I (B+C))。
[0057]此表达式的运算次序的图形表示可用图3C-3F中示出的格式中的任一者来表示。例如,参考图3C,显示框304示出解说表达式300的运算次序的线表示格式。该线表示格式由按分层次序显示的一系列的线构成。最靠近表达式的底部的线代表该线下方的运算首先执行,然后与该线之上的线相关联的每个运算依次执行。具体而言,线306示出表达式B+C首先执行,线308示出A与B+C的逻辑或运算第二个执行(即,Al I (B+C),而线310示出D和表达式AI I (B+C)的逻辑或运算最后执行(即,((A| (B+C)) I |D)。
[0058]图3D示出:运算次序还可按树表示格式314显示,如在显示框312中所示。树表示格式314示出表达式中的运算的执行次序的分层结构。如显示框312中所示,运算B+C被首先执行,随后是与变量A的逻辑或运算(即,Al I (B+C)),随后是与变量B的逻辑或运算(即,((Al I (B+C)) I |D))。
[0059] 图3E示出:运算次序还可按数字次序格式显示,如在显示框316中所示。数字次序格式在每个运算符上示出一个数字,该数字代表该运算符被执行的次序。如在显示框316中所示,如由置于“ + ”运算符上方的数字‘I’所示,运算B+C被首先执行。与变量A的逻辑或运算被第二个执行(即,Al I (B+C)),这由置于挨着变量A的逻辑或运算符“ I I ”上方的数字‘ 2 ’示出。与变量D的逻辑或运算被第三个与变量B执行(即,((AI I (B+C)) I ID)),这由挨着变量D的逻辑或运算符“ I I ”上方的数字‘3’的放置示出。
[0060]图3F示出:运算次序可以使用用于示出不同运算次序的不同着色文本或不同文本字体样式来显示。例如,红色可指示第一个运算,蓝色可表示要执行的第二个运算,绿色可表示第三个运算等等。替代地,可使用不同字体样式来表示不同运算次序。例如,可使用Times New Roman字体来表示第一个运算,使用Lucinda Handwriting字体来表示第二个运
^AVrAVr
算寺寺。
[0061]例如,假定Arial字体被用来表示要执行的第一个运算,Century Schoolbook字体被用来表示要执行的第二个运算,而Blackadder Script字体被用来表示要执行的第三个运算。使用这些字体样式来示出显示框324中的运算次序,运算B+C被示出为首先执行326,与变量A的逻辑或运算被示出为第二个执行(B卩,Al I (B+C)) 328,而与变量D的逻辑或运算被示出为与变量B第三个执行330 (即,((Al I (B+C)) |D))。
[0062]应当注意:可使用不同颜色来代替上面描述的字体来表示表达式中的次序。例如,表达式“B+C”的文本可用红色显示,这指示运算B+C被首先执行。表达式“Al I”的文本可以用蓝色显示,这指示A与B+C的逻辑或运算被第二个执行。表达式“I ID”的文本可用绿色显示,这指示此运算被最后执行。此外,所有文本、线、数字等等的颜色可遵守用户所指定的特定样式、颜色阴影、或用户在图形表示选项126中指定的其他样式。
[0063]图4A-4J解说运算次序的图形表示的各实施例,其示出了用C++编程语言编写的表达式,其中各运算可并行执行。图4A示出布尔表达式400,该表达式确定应用于表达式(PTR->A)和(Y.V〈67)的逻辑或运算是I还是0。运算的次序可并行执行,由此允许运算次序的图形表示被示出为并行运算,如在图4C-4F中所示。图4G-4J解说同一布尔表达式400,其中运算次序在表示相同运算的串行执行的各图形表示中示出。
[0064]图4B示出与表达式400相对应的解析树402。解析树402包含图4A中示出的表达式400的运算次序。在此示例中,表达式400的运算次序由解析树402示出,该解析树402示出了布尔表达式(Y.V〈67)的计算在布尔表达式(PTR->A)求值的同时执行。接下来,随后计算这两个值的逻辑或运算。
[0065]图4C示出表达式400的线表示格式,其示出:首先同时逻辑计算PTR_>A和Y.V〈67,随后进行逻辑或运算。图4D示出表达式400的树表示格式,而图4E示出表达式400的数字格式。图4F使用不同字体样式示出运算次序。然而,也可使用着色文本代替图4F中示出的不同字体样式来表示运算次序。例如,可使用红色来显示“PTR->A”和“Y.V〈67”,其表示这些运算被首先执行。可使用蓝色来显示逻辑或运算“I |”,这指示逻辑或运算最后执行。
[0066]图4G示出表达式400的线表示格式,其示出:在显示框412中,以串行方式计算PTR->A和Y.V〈67。图4H在显示框414中示出用于串行执行表达式400的树表示格式。图41在显示框416中示出用于串行执行表达式400的数字格式。图4J在显示框418中使用不同字体样式示出运算次序。然而,也可使用着色文本代替图4J中示出的不同字体样式来表示运算次序。例如,红色可用于显示“PTR->A”来表示此运算被首先执行,而绿色示出表达式“Y.V〈67”被第二个执行。可使用蓝色来显示逻辑或运算“I |”,这指示逻辑或运算最后执行。
[0067]图5示出一表达式的运算次序的图形表示,其中仅该表达式中的运算符被高亮来表示运算次序。在图3C-3F以及4C-4J中示出的图形表示中,整个表达式经受该图形表示。在图5中仅运算符被图形表示来示出运算次序,如在显示框502中的图形表示所示。如图5中所示,表达式500记载:IF (RET = D0S0METHING O)。此表达式中的运算符是函数调用D0S0METHING0和IF语句求值。D0S0METHING0函数调用被用表示函数调用被首先执行(504)的颜色或样式高亮,且IF语句被用表示该IF语句被第二个求值的颜色或样式来高亮(506)。
[0068]图6示出选择性地查看运算次序的图形表示的一部分的示例性图示。选择性查看能力可在需要更密切地查看特定表达式时或者作为用户的偏好由用户使用。在此示例性图示中,表达式600是布尔表达式PTR->A I I (Y.V〈67)。显示框602示出与表达式600相对应的运算次序的线表示格式。显示框604示出用户选择遮掩表达式(Y.V〈67)并且用简单的图形元素来取代该表达式。在此示例中,词语“选择”取代了原始表达式(Y.V〈67),而字符“.”被置于原始表达式的线表示上。显示框604示出表达式PTR->A被折叠而无法查看。用户可通过鼠标右键点击动作来发起对图形表示中的表达式的遮掩,并且可通过鼠标左键点击来发起对表达式的折叠。
[0069]图7A-7C示出示例性图示,其中运算次序的图形表示被放置在与源代码相同的视图内。图7A示出了具有9行源代码的示例性源代码列表702。表达式(E+F>B*C*D)被划了下划线以示出该用户希望知道此表达式的运算次序。应当注意,表达式(E+F>B*C*D)还可以被高亮、用着色文本显示、或用任何其他类型的范式显示来标识该表达式。
[0070]图7B示出选择了线表示格式来显示该表达式的运算次序。如显示框704所示,通过盖写第4和第5行中的现有代码,在感兴趣的表达式的紧上方显示运算次序。显示框704可以是不透明的、部分透明的或完全透明的。图7C示出感兴趣的表达式的线表示格式708被插入到所选表达式紧上方的空白行706中。
[0071]图8示出示例性图示,其中运算次序的图形表示被显示在与显示源代码列表的窗口相邻的独立窗口中。如图8中所示,显示画面800由第一窗口 802和第二窗口 804组成,第一窗口显示源代码的列表,而第二窗口显示第一窗口 802中示出的源代码的所选部分的运算次序的图形表示。光标“I”被置于第5行中字符‘A’和字符‘ + ’之间。第5行中的源代码被选择并被显示为在窗口 804中的行表示格式的运算次序。
[0072]可参考各个示例性方法进一步描述针对各实施例的操作。可以理解,除非另外指明,否则代表性的方法不一定要按所呈现的次序或者按任何特定次序来执行。而且,参考这些方法描述的各种活动可按照串行或并行的方式、或串行和并行操作的任何组合执行。视给定的一组设计和性能约束的需要,方法可使用所述实施例或替换实施例的一个或多个硬件元件和/或软件元件来实现。例如,方法可被实现为供逻辑设备(例如,通用或专用计算机)执行的逻辑(例如,计算机程序指令)。
[0073]图9解说用于生成运算次序的示例性方法的流程图。应当注意,方法900可表示由此处所述的一个或多个实施例执行的某些或全部操作,且方法可包括比图9中所述的操作更多或更少的操作。
[0074]参考图9,用户选择源代码的一部分来进行分析(框902)。该源代码可以是通过源代码查看器104、编辑器引擎106、或web浏览器206通过用户的动作来静态选择的。该用户可利用输入选择器110(诸如光标、鼠标点击、或击键)来高亮或标识源代码的一部分。该源代码可以是通过编辑器106或其他软件应用动态选择的。在此情况下,动态模块选择器107可被用来在用户编辑源代码时实时跟踪用户的输入动作,以确定用户想要分析的源代码部分。用户可利用输入选择器110来标识用户想要分析的源代码部分。然而,动态模块选择器107可将附加的字符或文本包括在所选的源代码部分中以便补全操作或获得更有意义的分析。
[0075]可指定与运算次序的图形表示有关的多个选项(框904)。用户可指定解析器选项120和图形表示选项126。解析器选项120可指示用户在查看时不感兴趣并且解析器118可在准备解析树时忽略的特定源代码字符、令牌或语句。图形表示选项126可指定图形表示的类型,诸如线表示、树表示、着色文本等。
[0076]解析器118接收源代码的所选部分、解析器选项120以及语言模型122并生成表示源代码的所选部分的句法结构,诸如解析树(步骤906)。在一个或多个实施例中,解析器118可在指定时间生成解析树,诸如当源代码被存储在服务器202中时、当源代码被整体或部分修改时、或者根据解析器选项120中所设置的设置(步骤906)。
[0077]图形表示模块124接收解析树和图形表示选项126,确定源代码的所选部分的运算次序(框908),并且生成包含图形元件和/或命令的数据结构,其中图形引擎128使用该图形元件和/或命令来按期望方式显示运算次序(框910和912)。
[0078]参考图10,现在将注意力转向示例性操作环境940的讨论。应当注意,操作环境940仅是示例性的而不旨在对各实施例的功能提出任何限制。该实施例可被应用于具有一个或多个客户端942的操作环境940,这些客户端通过通信框架944与一个或多个服务器946通信。操作环境940可以在网络环境、分布式环境、多处理器环境中配置、或配置为能够访问远程或本地存储设备的独立计算设备。
[0079]客户端942可被实现为硬件设备、软件模块或其组合。这种硬件设备的示例可包括但不限于计算机(例如,服务器、个人计算机、膝上型计算机等)、蜂窝电话、个人数字助理或任何类型的计算设备等。客户端942还可被实现为具有在单个执行路径中、多个并发的执行路径(例如,线程、进程等)中或以任何其他方式执行的指令的软件模块。
[0080]服务器946可被实现为硬件设备、软件模块或其组合。这种硬件设备的示例可包括但不限于计算机(例如,服务器、个人计算机、膝上型计算机等)、蜂窝电话、个人数字助理或任何类型的计算设备等。服务器946还可被实现为具有在单个执行路径中、多个并发的执行路径(例如,线程、进程等)中或以任何其他方式执行的指令的软件模块。
[0081]通信框架944促进客户端942和服务器946之间的通信。通信框架944可以实现任何公知通信技术,如适用于与分组交换网络(例如,诸如因特网等公共网络、诸如企业内联网等专有网络,等等)、电路交换网络(例如,公共交换电话网)、或分组交换网络和电路交换网络的组合(使用合适的网关和转换器)一起使用的技术。客户端942和服务器946可以包括被设计成可与通信框架944进行互操作的各种类型的标准通信元件,如一个或多个通信接口、网络接口、网络接口卡、无线电装置、无线发射机/接收机、有线和/或无线通信介质、物理连接器等。有线通信介质的示例可以包括导线、电缆、金属线、印刷电路板、背板、交换光纤、半导体材料、双绞线、同轴电缆、光纤、所传播的信号等。无线通信介质的示例可以包括声学、射频频谱、红外和其他无线介质。
[0082]每一客户端942可耦合到一个或多个客户端数据存储948,该数据存储948存储在该客户端942本地的信息。 每一服务器946可耦合到一个或多个服务器数据存储950,该数据存储存储在该服务器946本地的信息。
[0083]图11解说示例性计算设备102的框图。计算设备102可具有一个或多个处理器952、显示器130、网络接口 954、存储器956和用户输入接口 958。处理器952可以是市场上可购得的任何处理器,且可包括双微处理器和多处理器体系结构。显示器130可以是任何视觉显示单元,诸如监视器、屏幕、触摸屏等。网络接口 954促进与计算设备102和其他联网设备的有线或无线通信。用户输入接口 958促进计算设备102与诸如键盘、鼠标等输入设备之间的通信。
[0084]存储器956可以是可存储可执行过程、应用和数据的任何计算机可读的存储介质。计算机可读介质不属于传播信号,诸如通过载波发射的调制数据信号。它可以是任何类型的存储器设备(例如,随机存取存储器、只读存储器等)、磁存储、易失性存储、非易失性存储、光存储、DVD、⑶、软盘驱动器等。存储器956还可包括一个或多个外部存储设备或位于远程的存储设备。存储器956可包含如下指令和数据:
[0085].操作系统960 ;
[0086].源代码查看器104 ;
[0087]?编辑器引擎106;
[0088].动态模块选择器107 ;
[0089].输入分析器116 ;
[0090]?解析器 118;
[0091]?图形表示模块124;
[0092].解析器选项120 ;
[0093].语言模型122 ;
[0094].图形表示选项126 ;
[0095]?图形引擎128;以及
[0096].各种其它应用和数据962。
[0097]图12解说示例性计算设备201的框图,而图13解说示例性服务器202。计算设备201可具有一个或多个处理器或处理单元964、显示器130、网络接口 966、存储器968、以及用户输入接口 970。处理器964可以是市场上可购得的任何处理器,且可包括双微处理器和多处理器体系结构。显示器130可以是任何视觉显示单元,诸如监视器、屏幕、触摸屏等。网络接口 966促进计算设备201与其他联网设备的有线或无线通信。用户输入接口 970促进计算设备201与诸如键盘、鼠标等输入设备之间的通信。
[0098]存储器968可以是可存储可执行过程、应用和数据的任何计算机可读的存储介质。计算机可读介质不属于传播信号,诸如通过载波发射的调制数据信号。它可以是任何类型的存储器设备(例如,随机存取存储器、只读存储器等)、磁存储、易失性存储、非易失性存储、光存储、DVD、⑶、软盘驱动器等。存储器968还可包括一个或多个外部存储设备或位于远程的存储设备。存储器968可包含如下指令和数据:
[0099].操作系统972 ;
[0100].Web 浏览器 206 ;
[0101]?编辑器引擎106;
[0102].图形表示模块124 ;
[0103].图形表示选项126 ;
[0104]?图形引擎128;以及
[0105].各种其它应用和数据974。
[0106]服务器202可具有一个或多个处理器或处理单元976、显示器130、网络接口 978、存储器980、以及用户输入接口 982。处理器976可以是市场上可购得的任何处理器,且可包括双微处理器和多处理器体系结构。显示器130可以是任何视觉显示单元,诸如监视器、屏幕、触摸屏等。网络接口 978促进服务器202与其他联网设备之间的有线或无线通信。用户输入接口 982促进服务器202与诸如键盘、鼠标等输入设备之间的通信。
[0107]存储器980可以是可存储可执行过程、应用和数据的任何计算机可读的存储介质。计算机可读介质不属于传播信号,诸如通过载波发射的调制数据信号。它可以是任何类型的存储器设备(例如,随机存取存储器、只读存储器等)、磁存储、易失性存储、非易失性存储、光存储、DVD、⑶、软盘驱动器等。存储器980还可包括一个或多个外部存储设备或位于远程的存储设备。存储器980可包含如下指令和数据:
[0108]?操作系统984;
[0109].源代码查看器104 ;
[0110]?输入分析器116 ;
[0111]?解析器 118;
[0112]?解析器选项120;
[0113]?语言模型122;
[0114].源代码储存库208 ;
[0115].解析树储存库210 ;以及
[0116].各种其它应用和数据986。
[0117]尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。
[0118]各实施例可以使用硬件元件、软件元件或两者的组合来实现。硬件元件的示例可包括:设备、组件、处理器、微处理器、电路、电路元件、集成电路、专用集成电路、可编程逻辑器件、数字信号处理器、现场可编程门阵列、存储器单元、逻辑门等。软件元件的示例可以包括软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口、指令集、计算代码、代码段、或其任何组合。判断一实施例是使用硬件元件和/或软件元件来实现可根据给定实现所需的任何数量的因素而变化,这些因素如所需计算速率、功率级、带宽、计算时间、负载平衡、存储器资源、数据总线速度以及其它设计或性能约束。
[0119]一些实施例可包括存储指令或逻辑的存储介质。存储介质的示例可包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等。逻辑的示例可包括各种软件元件,诸如程序、过程、模块、应用、代码段、程序栈、中间件、固件、方法、例程等。例如,在一个实施例中,计算机可读存储介质可以存储可执行的计算机程序指令,这些指令在由处理器执行时使得该处理器执行根据所描述的各实施例的方法和/或操作。可执行的计算机程序指令可根据用于指示计算机执行特定功能的预定义的计算机语言、方式或句法来实现。这些指令可以使用任何合适的高级、低级、面向对象、可视、编译、和/或解释编程语言来实现。
【权利要求】
1.一种计算机实现的方法,包括: 从计算机程序选择第一代码部分,所述代码部分具有一行或多行源代码; 确定所述第一代码部分的执行的运算次序,所述运算次序基于与所述源代码相关联的语目模型; 提供所述运算次序的图形表示;以及 根据所述图形表示显示所述运算次序。
2.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括: 指定图形表示来按行表示格式显示所述运算次序。
3.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括: 指定图形表示来按树表示格式显示所述运算次序。
4.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括: 指定图形表示来按着色文本表示格式显示所述运算次序。
5.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括: 指定图形表示来按数字次序表示格式显示所述运算次序。
6.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括: 指定图形表示来按并行表示格式显示所述运算次序。
7.一种计算机实现的系统,包括: 至少一个服务器,所述服务器具有至少一个处理器和第一存储器,所述第一存储器包含解析树储存库,所述解析树储存库包含一个或多个解析树; 一个或多个客户端设备,客户端设备具有至少一个处理单元和第二存储器,所述第二存储器包含指令,当所述指令在处理单元上执行时: 从获取自所述服务器的解析树中生成源代码的所选部分的运算次序的图形表示,所述运算次序表示用于执行源代码的所选部分中的运算的顺序次序;以及 将所述运算次序的所述图形表示与源代码的可视地显示的所选部分一起显示。
8.如权利要求7所述的计算机实现的系统,其特征在于,所述服务器进一步包括客户端设备可访问的用于存储源代码的源代码储存库。
9.如权利要求8所述的计算机实现的系统,其特征在于,所述服务器具有当在所述第一处理器上执行时生成被传送到所述服务器的源代码的解析树的指令。
10.如权利要求9所述的计算机实现的系统,其特征在于,所述服务器具有当在所述第一处理器上执行时应来自客户端设备的请求而将解析树传送到所述客户端设备的指令。
【文档编号】G06F9/44GK104081347SQ201380006662
【公开日】2014年10月1日 申请日期:2013年1月21日 优先权日:2012年1月25日
【发明者】A·洛维特 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1