CN113811849A - 计算机辅助计算机编程的系统和方法 - Google Patents
计算机辅助计算机编程的系统和方法 Download PDFInfo
- Publication number
- CN113811849A CN113811849A CN202080034378.7A CN202080034378A CN113811849A CN 113811849 A CN113811849 A CN 113811849A CN 202080034378 A CN202080034378 A CN 202080034378A CN 113811849 A CN113811849 A CN 113811849A
- Authority
- CN
- China
- Prior art keywords
- program
- program code
- code
- program element
- elements
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
- G06F8/355—Round-trip engineering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/48—Incremental compilation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
计算机辅助编程的系统和方法,包括:在计算机存储器上存储程序代码;显示程序代码;从用户接收所显示的程序代码中的位置的标记;根据编程语言的一个或更多个规则,产生有效用于在标记位置处插入到程序代码中的可选择的程序元素的列表;从用户接收对来自可选择的程序元素的列表的至少一个程序元素的选择;在与从用户接收到的标记位置相对应的位置处,将至少一个选定的程序元素插入到计算机存储器中的所述程序代码中;以及防止用户以没有对来自可选择的有效程序元素的列表的至少一个可选择的程序元素进行选择的任何方式将程序元素插入到存储的程序代码中。
Description
技术领域
本发明一般涉及产生计算机代码。更具体地,本发明涉及使用计算机辅助编程来产生无错误的计算机代码。
背景技术
自从1960年代电子计算机问世以来,它们已变得越来越强大和无处不在。目前,计算机编程语言和范式已经取得了重大进展。然而,自从穿孔卡片时代以来,将程序输入计算机的方法几乎没有改变。程序员通常以文本形式用人类可理解的语言编写程序源代码,并且计算机程序例如编译器可以对文本进行解析和解释,试图将其转换为可执行的计算机指令,通常被称为机器代码。
由于正式的编程语言具有严格的规则,因此即使人类程序员编写的简单程序也可能包含许多错误,例如打字错误和语法错误。这种错误通常导致编译器拒绝源代码,迫使程序员一次又一次地修复错误并重新提交其源代码进行编译。这个繁琐的过程消耗了程序员大部分时间,并且对于经验不足的程序员来说尤其令人沮丧。
通过在键入源代码期间辅助程序员,已经做出一些尝试来缓解这个问题。这种尝试包括例如自动完成键入的指令或使用简单的代码模板。虽然偶尔防止打字错误,但是这些方法不能防止程序员键入错误的代码,并且不能在编译之前确保正确的语法和程序结构。
减轻这个问题的另一个这样的尝试包括使用可视化编程语言。这样的语言使得程序员能够通过以图标或标记框的形式操纵程序元素的可视化表示来创建程序,其中程序元素(或指令)的空间关系及其之间的连接据称决定了程序的流程。
虽然这种方法可以防止用户打字错误,并且可能起初看起来也很直观,但是本领域技术人员可以理解,可视化编程语言可能不支持所编写的代码的可扩展性。例如,随着程序变得庞大和复杂,跟踪和操纵程序的可视化结构的任务变得越来越艰巨。因此,可视化编程主要用于教导基础编程,并且对于让学生习惯专业语言和不切实际的编程范式来说争议很大。
发明内容
因此,可能需要一种系统和方法,该系统和方法用于创建计算机程序而无需键入代码且不会产生句法错误,而且不会损害通过使用正式的高级编程语言可实现的精细结构和表达性句法。
因此,根据本发明的一些实施方式,提供了一种计算机辅助编程的方法,该方法包括:在计算机存储器上存储程序代码;向用户显示该程序代码;从用户接收所显示的程序代码中的位置的标记;根据编程语言的一个或更多个规则,产生对有效用于在标记位置处插入到程序代码中的可选择的程序元素的列表;从用户接收对来自可选择的程序元素的列表的至少一个程序元素的选择;在与从用户接收到的标记位置相对应的位置处,将至少一个选定的程序元素插入到计算机存储器中的所述程序代码中;以及防止用户以可能没有对来自可选择的有效程序元素的列表的至少一个可选择的程序元素进行选择的任何方式将程序元素插入到存储的程序代码中。
在一些实施方式中,该方法可以包括:基于存储在计算机存储器中的程序代码更新程序代码的显示,以包括至少一个插入的程序元素。
在一些实施方式中,存储在计算机存储器上的程序代码可以是第一格式,第一格式可以包括结构化程序代码模型,并且显示给用户的程序代码可以是第二格式,第二格式可以包括编程语言的高级、人类可理解的文本。
在一些实施方式中,可以将至少一个选定的程序元素插入到第一格式的存储的程序代码中,并且该方法还包括标识存储的程序代码的更改,以及将存储的程序代码的包括更改的至少一部分从第一格式转化成第二格式。
在一些实施方式中,产生可选择的有效程序元素的列表包括:遍历可用程序元素的列表;对于可用程序元素的列表中的一个或更多个程序元素,遍历编程语言的规则;以及确定相关程序元素是否符合规则,并由此是否有效用于在插入点的位置处的插入。
在一些实施方式中,从用户接收对至少一个程序元素的选择包括:在列表中累积对在所述插入点处的插入有效的一个或更多个程序元素;根据程序元素的至少一个类别对程序元素的列表进行分类;显示程序元素的列表;以及从用户接收对来自所显示的列表的至少一个程序元素的选择。
因此,根据本发明的一些实施方式,提供了一种计算机辅助编程的方法,该方法包括:向用户显示程序代码;从用户获得所述显示的程序代码中的插入位置;根据编程语言的一个或更多个规则,产生有效用于在插入位置处的插入的可选择的程序元素的列表;从用户接收对来自可选择的程序元素的列表的至少一个程序元素的选择;以及仅基于接收到的对程序元素的选择,在插入位置处将至少一个选定的程序元素插入到程序代码中。
在一些实施方式中,程序代码可以作为编程语言的高级、人类可理解的文本显示给用户。
在一些实施方式中,可选择的程序元素作为编程语言的高级、人类可理解的文本呈现给用户。
在一些实施方式中,该方法还包括防止用户以没有对来自可选择的程序元素的列表的至少一个可选择的程序元素进行选择的任何方式将程序元素插入到程序代码中。
在一些实施方式中,插入位置指示程序代码中的至少一个特定程序元素,并且该方法还包括:基于特定程序元素的类型产生有效用于在所述插入位置处的应用的可选择的动作的列表;从用户接收对可选择的动作的列表中的至少一个动作的选择;以及根据编程语言的一个或更多个规则,在插入位置处对程序代码应用至少一个选定的动作。
在一些实施方式中,可选择的动作的列表可以选自包括以下的列表:改变所指示的程序元素的值;命名所指示的程序元素的符号;改变所指示的程序元素的符号名称;从程序代码中删除所指示的程序元素;复制所指示的程序元素;以及移动程序代码中的所指示的程序元素。
在一些实施方式中,选定的至少一个动作可以包括:例如命名所指示的程序元素的符号,并且对程序代码应用至少一个选定的动作可以包括:从用户接收所指示的程序元素的新名称;根据编程语言的一个或更多个规则验证新接收的符号名称;以及基于所述验证将新接收的符号名称插入到程序代码中。
在一些实施方式中,验证新接收的符号名称可以选自由以下组成的列表:验证新接收的符号名称以避免程序代码中的歧义的情况;验证新接收的符号名称以避免使用保留的关键字;以及验证新接收的符号名称以避免使用非法符号。
在一些实施方式中,选定的至少一个动作包括从程序代码中删除所指示的程序元素,并且其中,应用至少一个选定的动作可以包括:例如根据编程语言的一个或更多个规则验证所指示的程序元素的删除;以及基于该验证从程序代码中省略所指示的程序元素。
在一些实施方式中,验证第一、所指示的程序元素的删除可以包括确定第一程序元素是否包括包含至少一个第二程序元素的分层结构,并且其中,从程序代码中删除第一程序元素还可以包括从程序代码中删除至少一个第二程序元素。
在一些实施方式中,验证第一、所指示的程序元素的删除可以包括:确定第一程序元素是否包含在第二程序元素的分层结构内;以及根据编程语言的一个或更多个规则确定第二程序元素是否需要第一程序元素;并且从程序代码中删除第一程序元素还可以包括:用占位符替换第一程序元素;以及提示用户在占位符的位置处添加程序元素。
在一些实施方式中,验证第一、所指示的程序元素的删除可以包括:确定第一程序元素是否未被程序代码中的一个或更多个第二程序元素引用。
在一些实施方式中,验证第一、所指示的程序元素的删除可以包括:标识与第一程序元素具有交织关系的一个或更多个第二程序元素;以及鉴于编程语言的一个或更多个规则来分析第一、所指示的程序元素与一个或更多个第二程序元素之间的交织关系,并且其中,对第一程序元素应用删除动作还可以包括:根据该分析对一个或更多个第二、交织的程序元素应用删除动作。
在一些实施方式中,选定的至少一个动作可以包括移动程序代码中的至少一个所指示的程序元素,并且应用至少一个选定的动作可以包括:根据编程语言的一个或更多个规则验证至少一个所指示的程序元素的移动;以及基于所述验证移动程序代码中的至少一个所指示的程序元素。
在一些实施方式中,对至少一个所指示的程序元素的移动的验证可以包括以下中至少一项:确定移动的程序元素在程序代码中的其旧位置不被需要;确定移动的程序元素有效用于在程序代码中其新位置处的插入;在至少一个程序元素是符号声明的情况下,确定符号可以在新的位置被声明,而不与现有符号产生冲突;以及在程序元素被程序代码中的一个或更多个第二程序元素引用的情况下,确定新位置在一个或更多个第二程序元素中的每一个的范围内。
因此,根据本发明的一些实施方式,提供了一种用于计算机辅助计算机编程的系统,该系统包括:非暂态存储器设备,其中,存储有指令代码的模块;以及与存储器设备相关联的至少一个处理器,并且至少一个处理器被配置成执行指令代码的模块。对于指令代码的模块的执行,至少一个处理器被配置成:向用户显示程序代码;从用户获得在所述显示的程序代码中的插入位置;根据编程语言的一个或更多个规则,产生有效用于在插入位置处的插入的可选择的程序元素的列表;从用户接收对来自可选择的程序元素的列表的至少一个程序元素的选择;以及仅基于接收到的对程序元素的选择,在插入位置处将至少一个选定的程序元素插入到程序代码中。
因此,根据本发明的一些实施方式,提供了一种计算机辅助编程的方法,包括:在计算机存储器上维护程序代码的第一表示;经由用户接口获得对至少一个文本程序元素以及程序代码中的对应插入位置的选择;更新第一表示,以在插入位置处包括选定的至少一个文本程序元素;转化第一表示以产生程序代码的第二表示;以及在用户接口上显示第二表示。
在一些实施方式中,第一表示被格式化为中间级程序代码表示,并且该表示被格式化为文本的、用户级编程语言表示。
在一些实施方式中,获得对至少一个程序元素和对应插入位置的选择包括:经由用户接口接收对用户级编程语言表示中的第一插入位置的选择;在中间级程序代码表示中标识对应于第一插入位置的第二插入位置;根据与编程语言有关的规则,经由用户接口呈现有效用于在第二插入位置处的插入的可选择的程序元素的列表;以及经由用户接口接收对来自可选择的、有效程序元素的列表的至少一个文本程序元素的选择。
在一些实施方式中,可选择的程序元素作为编程语言的高级、人类可理解的文本呈现给用户。
本发明的实施方式可以包括在不需要源代码的编译或解析的情况下在计算设备上执行中间级程序代码表示。
在一些实施方式中,将中间级程序代码格式的第一表示转化成高级程序代码格式的第二表示还可以包括创建位置表,所述位置表将用户标记的位置与中间级代码格式的第一表示中的对应程序元素相关联,并且其中,标识与第一插入位置相对应的第二插入位置可以基于位置表完成。
在一些实施方式中,中间级程序代码可以被结构化为分层结构化程序代码模型,分层结构化程序代码模型表示程序代码的分层结构。
本发明的实施方式可以包括根据分层结构化程序代码模型确定一个或更多个程序元素的上下文。
本发明的实施方式可以包括根据分层结构化程序代码模型确定程序代码中的程序元素的一个或更多个符号的范围。
本发明的实施方式可以包括:对于引用程序代码的第二程序元素的程序代码的每个第一程序元素,在分层结构化程序代码模型内存储对第二程序元素的引用;并且经由所述引用访问第二程序元素。
本发明的实施方式可以包括:维护一个或更多个符号范围表;限定程序代码内的每个程序元素的范围;以及使用一个或更多个符号范围表来检测程序代码内的程序元素之间的冲突。
因此,根据本发明的一些实施方式,提供了一种用于计算机辅助计算机编程的方法,包括:使用中间语言存储所编写的程序代码;将程序作为可理解的源代码显示给用户;允许用户选择程序中添加指令的位置;根据编程语言规则,通过计算机功能产生要放置在选定位置处的有效指令的列表;向用户显示有效指令的列表并允许用户选择一个有效指令;将选定的指令插入到所编写的程序中;以及相应地更新程序显示。
在一些实施方式中,所显示的有效指令的列表可以被划分为类别。
在一些实施方式中,在插入指令之后,可以自动地选择所编写的程序中的下一逻辑插入位置。
在一些实施方式中,需要附加指令或参数的指令的插入可能需要用户也插入所述参数。
在一些实施方式中,需要附加指令或参数的指令的插入可以在程序中创建针对所述参数的占位符。
在一些实施方式中,用户可以选择至少一个现有程序指令并将其删除,从而提供仍然构成有效程序结构的其余指令。
在一些实施方式中,用户可以选择至少一个现有程序指令并将其删除,同时如果需要它们保持有效程序结构,则自动用占位符替换它们。
在一些实施方式中,当程序包含至少一个占位符时,禁止用户执行所编写的程序。
在一些实施方式中,声明程序符号的指令的插入可以允许用户输入所述符号的名称,同时根据语言句法断言输入的名称对所述声明的程序符号有效。
在一些实施方式中,用户可以选择声明程序符号的现有程序指令,并且可以对所述选定的符号进行重新命名,同时根据语言句法断言新输入的名称对所述声明的程序符号有效。
在一些实施方式中,限定程序值的指令的插入可以允许用户输入所述值,同时断言输入的值符合程序的要求。
在一些实施方式中,用户可以选择限定程序值的现有程序元素,并且可以对所述选定的值进行编辑,同时断言新输入的值符合程序的要求。
在一些实施方式中,用户可以选择现有程序指令并且可以用来自新显示的针对同一位置的有效指令的列表的其他指令替换它。
在一些实施方式中,如果现有程序指令在所述位置的同化仍将构成有效程序,则用户可以选择至少一个现有程序指令,可以复制它们,并且可以将它们粘贴在另一位置。
在一些实施方式中,所编写的中间语言可以由虚拟机执行。
在一些实施方式中,中间语言可以被转移至其他计算机和操作系统并且在其上执行。
在一些实施方式中,可以通过中间语言指令到相关的机器语言指令的直接转化来将所编写的中间语言程序编译成机器代码。
在一些实施方式中,所显示的源代码可以是已知的编程语言的形式,并且源代码可以导出为可以在标准编程环境中使用并且由标准编译器编译的源文件。
附图说明
被视为本发明的主题在说明书的结论部分中被特别指出和明确要求保护。然而,在结合附图阅读时,通过参考以下详细描述,可以最佳地理解本发明——关于组织和操作方法二者——及其目的、特征和优点,在附图中:
图1是描绘根据本发明的一些实施方式的可以包括在用于计算机辅助编程的系统中的计算设备的框图;
图2是描绘根据本发明的一些实施方式的计算机辅助计算机编程的方法的高级流程图;
图3A是根据本发明的一些实施方式的使用计算机辅助计算机编程的非限制性示例;
图3B是根据本发明的一些实施方式的使用计算机辅助计算机编程的另一非限制性示例;
图4A是描绘根据本发明的一些实施方式的用于计算机辅助计算机编程的系统的高级框图;
图4B是描绘根据本发明的一些实施方式的用于计算机辅助计算机编程的系统的另一高级框图;以及
图5是描绘根据本发明的一些实施方式的计算机辅助编程的方法的流程图。
将理解,为了说明的简单和清楚起见,图中所示的元素不一定按比例绘制。例如,为了清楚起见,元素中的一些元素的尺寸可能相对于其他元素被放大。此外,在认为合适的情况下,附图标记可以在图中重复以指示相应或类似的元素。
具体实施方式
本领域技术人员将认识到,在不脱离本发明的精神或基本特征的情况下,本发明可以以其他特定形式实施。因此,前述实施方式在所有方面应被认为是说明性的,而不是对本文中描述的本发明的限制。因此,本发明的范围由所附权利要求指示,而不是由前述描述指示,并且因此落入权利要求的等同物的含义和范围内的所有变化旨在涵盖在其中。
在以下详细描述中,阐述了许多具体细节以提供对本发明的透彻理解。然而,本领域技术人员将理解,可以在没有这些具体细节的情况下实践本发明。在其他情况下,没有详细描述公知的方法、过程和部件,以免使本发明模糊。关于一个实施方式描述的一些特征或元素可以与关于其他实施方式描述的特征或元素组合。为了清楚起见,可能不再重复对相同或相似特征或元素的讨论。
尽管本发明的实施方式在这方面不受限制,但是使用诸如例如“处理”、“计算(computing)”、“计算(calculating)”、“确定”、“建立”、“分析”、“检查”等术语的讨论可以指计算机、计算平台、计算系统或其他电子计算设备的操作和/或过程,其将计算机寄存器和/或存储器内的表示为物理(例如,电子)量的数据操作和/或转换为计算机寄存器和/或存储器或者可以存储执行操作和/或过程的指令的其他信息非暂态存储介质内的类似地表示为物理量的其他数据。
尽管本发明的实施方式在这方面不受限制,但是如本文中使用的术语“多数(plurality)”和“多个(a plurality)”可以包括例如“多个(multiple)”或者“两个或更多个”。在整个说明书中可以使用术语“多数”或“多个”来描述两个或更多个部件、设备、元素、单元、参数等。术语“集合”在本文中使用时可以包括一个或更多个项。除非明确说明,否则本文中描述的方法实施方式不限于特定顺序或次序。此外,所描述的方法实施方式中的一些实施方式或其元素可以同时、在同一时间点或并发地发生或执行。
术语“集合”在本文中使用时可以包括一个或更多个项。除非明确说明,否则本文中描述的方法实施方式不限于特定顺序或次序。此外,所描述的方法实施方式中的一些实施方式或其元素可以同时、在同一时间点或并发地发生或执行。
本发明的实施方式公开了以下方法和系统,该方法和系统用于创建计算机程序,无需键入代码且不会产生句法错误,而且不会损害通过使用正式的高级编程语言可实现的精细结构和表达性句法。
现在参照图1,图1是描绘根据一些实施方式的可以被包括在用于计算机辅助计算机编程的系统的实施方式中的计算设备的框图。
计算设备1可以包括可以是例如中央处理单元(CPU)处理器、处理芯片或者任何合适的计算(computing)或计算(computational)设备的一个或更多个控制器或处理器2(例如,可能跨多个单元或设备)、操作系统3、存储器4、可执行代码5、存储系统6、输入设备7和输出设备8。
一个或更多个控制器或处理器2可以被配置成执行本文中描述的方法,以及/或者执行或充当各种模块、单元等。根据本发明的实施方式的系统中可以包括多于一个计算设备1,并且一个或更多个计算设备1可以充当系统的部件。
操作系统3可以是或者可以包括被设计和/或配置成执行以下任务的任何代码段(例如,类似于本文中描述的可执行代码5的代码段),所述任务涉及协调、调度、仲裁、监督、控制或以其他方式管理计算设备1的操作,例如调度软件程序或任务的执行或者使得软件程序或其他模块或单元能够进行通信。操作系统3可以是商业操作系统。将注意的是,操作系统3可以是可选部件,例如,在一些实施方式中,系统可以包括不需要或者不包括操作系统3的计算设备。
存储器4可以是或者可以包括例如随机存取存储器(RAM)、只读存储器(ROM)、动态RAM(DRAM)、同步DRAM(SD-RAM)、双倍数据速率(DDR)存储器芯片、闪存、易失性存储器、非易失性存储器、高速缓存存储器、缓冲器、短期存储器单元、长期存储器单元或其他合适的存储器单元或存储单元。存储器4可以是或者可以包括多个可能不同的存储器单元。存储器4可以是计算机或处理器非暂态可读介质、或者计算机非暂态存储介质,例如RAM。在一个实施方式中,诸如存储器4、硬盘驱动器、其他存储设备等的非暂态存储介质可以存储在由处理器执行时可以使处理器执行如本文中描述的方法的指令或代码。
可执行代码5可以是任何可执行代码,例如应用、程序、过程、任务或脚本。可执行代码5可以可能在操作系统3的控制下由控制器2执行。例如,可执行代码5可以是可以产生如本文中进一步描述的计算机程序的应用。尽管为了清楚起见在图1中示出了可执行代码5的单个项,但是根据本发明的一些实施方式的系统可以包括类似于可执行代码5的多个可执行代码段,所述可执行代码段可以被加载到存储器4中并且使控制器2执行本文中描述的方法。
存储系统6可以是或者可以包括例如如本领域已知的闪存、在如本领域已知的微控制器或芯片内部或嵌入其中的存储器、硬盘驱动器、可记录CD(CD-R)驱动器、蓝光光盘(BD)、通用串行总线(USB)设备或其他合适的可移动和/或固定存储单元。与计算机代码的创建有关的数据可以存储在存储系统6中并且可以从存储系统6加载到其可以由控制器2处理的存储器4中。在一些实施方式中,可以省略图1中示出的部件中的一些部件。例如,存储器4可以是具有存储系统6的存储容量的非易失性存储器。因此,尽管示为单独的部件,但是存储系统6可以嵌入或包括在存储器4中。
输入设备7可以是或者可以包括任何合适的输入设备、部件或系统,例如可拆卸键盘或小键盘、鼠标等。输出设备8可以包括一个或更多个(可能是可拆卸的)显示器或监视器、扬声器和/或任何其他合适的输出设备。任何适用的输入/输出(I/O)设备可以连接至计算设备1,如块7和块8所示。例如,有线或无线网络接口卡(NIC)、通用串行总线(USB)设备或外部硬盘驱动器可以被包括在输入设备7和/或输出设备8中。将认识到,任何合适数目的输入设备7和输出设备8可以在操作时连接至计算设备1,如块7和块8所示。
根据本发明的一些实施方式的系统可以包括以下部件,所述部件诸如但不限于多个中央处理单元(CPU)或任何其他合适的多用途或特定处理器或控制器(例如,类似于控制器2的控制器)、多个输入单元、多个输出单元、多个存储器单元和多个存储单元。
下表、即表1包括对可以在整个本文件中使用的术语的引用列表。
表1
现在参照图2,图2是描绘根据本发明的一些实施方式的计算机辅助计算机编程的方法的高级流程图。
如图2所示,本发明的实施方式可以包括编程工作流,其可以由两个步骤组成:第一步骤10(标记为“步骤1”)和第二步骤20(标记为“步骤2”)。步骤10和20中的每一个可以包括一个或更多个子步骤(例如,第一步骤10的子步骤10A、10B和10C以及第二步骤20的子步骤20A、20B和20C)。如本文中详述的,在第一步骤10中,可以标记程序代码中的位置,并且在第二步骤20中,可以将程序元素插入到程序代码中。根据一些实施方式,编程工作流可以是重复的。例如,第一步骤10和第二步骤20可以继续、重复或迭代直到用户可以选择停止编程工作流的时间。
在每个循环或重复的开始,程序代码30数据元素可以显示或呈现在输出设备(例如,图1的元素8)例如计算机屏幕上。
可以理解,在初始阶段(例如,在编程过程开始时),程序代码可以是或者可以包括例如空白文本数据元素。可替选地,在初始阶段,程序代码可以包括可以对应于特定的编程语言的默认文本数据元素(例如,可以描述包含标准库、限定默认变量等的文本)。随着编程工作流的进行,程序代码30数据元素可以包括可以例如表示或描述程序元素(例如,变量、函数、数据结构等的名称)的附加文本。
如子步骤10A所示,并且如本文中进一步详述的,本发明的实施方式可以(例如,从用户)获得对所显示的程序代码30中的插入位置40的选择。例如,用户可以使用诸如计算机鼠标的输入设备(例如,图1的元素7)来选择或标记用于在所显示的程序代码30中编辑代码(例如,插入一个或更多个程序元素)的位置。
如子步骤10B所示,本发明的实施方式可以产生可能有效用于在所显示的程序代码30中的选定的插入位置40处的插入的程序元素的列表50。例如,如本文中详述的,本发明的实施方式可以包括一个或更多个计算机进程或函数,其可以适于产生可能有效用于在选定的插入位置40处的插入的可选择的程序元素(例如,变量名称、函数名称、数据结构中的特定字段等)的列表,以便符合编程语言的规则(例如,句法规则)。
如子步骤10C所示,本发明的实施方式可以(例如,在输出设备8上)显示有效程序元素的列表50。
如子步骤20A所示,本发明的实施方式可以(例如,从用户)接收对来自有效程序元素的列表的程序元素的选择。例如,该列表可以经由计算机屏幕显示给用户,并且可以使得用户能够通过诸如鼠标、触摸屏等的输入设备(例如,图1的元素7)来从列表50中选择一个或更多个程序元素51。
根据一些实施方式,列表50的可选择的程序元素51可以在屏幕(例如,图1的输出设备8)上作为编程语言的高级、人类可理解的文本呈现给用户。
如子步骤20B所示,并且如本文中进一步详述的,本发明的实施方式可以例如通过将选定的一个或更多个程序元素51插入到程序代码30中来对程序代码30进行编辑。如子步骤20C所示,本发明的实施方式可以随后(例如,在用户的屏幕上)更新所显示的程序代码30以反映更改,从而完成修改程序代码30的迭代或循环。
可以理解,本文中描述的工作流(例如,关于图2)可以基于(例如,由用户)对来自有效程序元素的列表的一个或更多个有效程序元素51的选择,并且可能不便于或包括用户(例如,通过键入文本)对程序代码30的自由修改。因此,本发明的实施方式可以防止在程序代码30中包含错误的(例如,具有句法、语法或其他错误)的文本。
此外参照图3A,图3A是根据本发明的一些实施方式的计算机辅助计算机编程的方法的使用的非限制性示例。
如图3A的示例中描绘的,程序代码30可以在显示设备(例如,图1的元素8)上显示给用户。所显示的程序代码30可以包括当前(例如,在当前时间点的)文本,表示所编写的程序的代码。
程序代码30可以被显示为不可编辑的文本,在某种意义上,可以防止或不允许用户通过绕过图2的步骤10和步骤20的工作流来直接更改程序代码30。例如,可能不允许用户随意键入文本和/或删除文本以更改程序代码30。
如图3A的示例中描绘的,用户可能已经在程序代码30中标记了位置40'。例如,标记位置40'可以指代程序代码30中的用户已选择将程序元素插入到程序代码30中的位置(例如,行号和/或行内的偏移)。
本发明的实施方式可以基于标记位置40'获得所显示的程序代码中的插入位置40。例如,如本文中详述的,本发明的实施方式可以确定标记位置40'是否有效用于将程序元素51插入到程序代码30中;如果标记位置40'被确定为有效,则插入位置40可以设置为等于(例如,相同的行号和偏移)标记位置40'。如果标记位置40'被确定为无效,则插入位置40可以设置在有效用于将程序元素51插入到程序代码30中的最近位置(例如,紧接在标记位置40'之后)。
在图3A描绘的示例中,插入点40位于点(.)运算符——通常称为“成员运算符”之后。
可以理解,标记位置40'和插入点40(例如,40A、40B)的其他实现方式也可以是可能的。在这样的实施方式中,可以允许用户在所呈现的程序代码30中的任何位置标记位置40'而不在用于代码的插入的有效位置与无效位置之间进行区分。随后,本发明的实施方式可以使得用户能够根据标记的位置执行不同的动作。
例如,在用户在程序元素之后标记位置(例如,产生标记位置40')的情况下,本发明的实施方式可以产生插入点40,并且呈现可能有效用于在该插入点40处的插入的建议的程序元素51的列表。除了显示列表50之外,在用户在所呈现的程序代码30中标记位于程序元素51的位置(例如,在符号名称的中间)的位置(例如产生标记位置40')的情况下,本发明的实施方式可以突出显示标记的程序元素51,产生与突出显示的程序元素51相关的插入点40,并且产生可以应用于突出显示的程序元素51的建议动作81的列表80,如本文中详述的。
本发明的实施方式可以随后产生可以显示给用户的建议的、可选择的有效程序元素51(例如,51A、51B等)的列表50。
程序元素51(例如,51A、51B等)可以被称为“建议的”,在某种意义上,它们可以通过本发明的实施方式显示或引起用户的注意。程序元素51可以被称为“可选择的”,在某种意义上,程序元素中的一个或更多个程序元素可以(例如,经由计算机鼠标)通过与用户的交互被选择或选定。程序元素51可以被称为“有效的”,在某种意义上,本发明的实施方式可以验证相关程序元素与插入点的位置(在该示例中,在成员运算符之后)和/或与编程语言的一个或更多个规则(在此示例中,是C++语言的规则,规定‘Rect’结构的成员将遵循成员运算符)的一致性。
在图3A的示例中,成员(点)运算符的左操作数是‘rects’数组的元素。这个数组的元素类型是‘Rect’,如‘findSquares’函数的参数中声明的那样。因此,点运算符的右操作数的唯一有效选项是在“Rect”结构中声明的成员。此外,点表达式的结果被用作相等(==)运算符的右操作数。相等运算符的左操作数是另一个点表达式,它返回类型“float”的值。相等运算符依赖于存在用于测试其两个操作数相等的方法。因为不存在用于测试“float”类型值与“string”或“bool”类型值之间的相等的这样的方法,所以只有类型“float”的成员是有效的,并且因此出现在建议的列表中。
在该示例中,如本文中详述的,本发明的实施方式可以确定用于在选定的插入点40的位置处插入的第一有效程序元素51(例如,51A)可以是“width”,并且用于在选定的插入点40的位置处插入的第二有效程序元素51(例如,51B)可以是“height”。实施方式可以(例如,在用户的屏幕上)显示所确定的有效程序元素51的列表50。
此外,本发明的实施方式可以呈现与有效程序元素51的列表50相对应的描述性文本52。在该示例中,类别名称(例如,“成员”)的描述性文本52可以呈现为标题以方便用户。
根据一些实施方式,用户可以(例如,经由图1的输入设备7)选择或选定列表50的至少一个程序元素51。如本文中详述的,本发明的实施方式可以接收用户的选择,并且可以在标记的插入位置40处将所选择的程序元素插入或并入到程序代码30中。可以理解,如果用户在程序代码30中标记不同的插入位置40,则可以生成程序元素的新列表50并显示。
根据一些实施方式,本发明的实施方式可以仅基于用户的选择将列表50的选定的至少一个程序元素51插入到程序代码30中。
在此上下文中,术语“仅”可以指示可以防止或禁止用户以没有或者不包括对来自可选择的有效程序元素的列表50的至少一个可选择的程序元素51进行选择的任何方式将程序元素插入到程序代码中。例如,本发明的实施方式可能无法经由以下方法实现或便于将程序元素插入到程序代码30中:将文本直接键入程序代码30中,将程序元素的图形和/或文本表示“拖放”到程序代码30中,将程序元素的图形和/或文本表示“复制和粘贴”到程序代码30中等。
现在参照图3B,图3B是根据本发明的一些实施方式的用于使用计算机辅助计算机编程的另一非限制性示例。
在图3B的示例中,插入点40位于“heighest”操作数之后。本发明的实施方式可以产生有效用于在该插入点40处插入到程序代码30中的程序元素的列表50。在该示例中,有效程序元素的列表包括可以在插入位置40处插入的运算符。本领域技术人员可以理解,图3B的示例演示了帮助用户选择运算符,以便产生有效的数学和逻辑表达式。这种功能可能无法从当前可用的用于计算机辅助编程的系统获得,该系统可能包括例如“代码完成”的实现。
现在参照图4A,图4A是描绘根据本发明的一些实施方式的用于计算机辅助计算机编程的系统100的高级框图。
根据本发明的一些实施方式,系统100可以实现为软件模块、硬件模块或其任意组合。例如,系统可以是或者可以包括一个或更多个计算设备,例如图1的元素1,并且可以适于执行可执行代码(例如,图1的元素5)的一个或更多个软件模块以实现本发明的方法的实施方式,如本文中描述的。
根据一些实施方式,系统100可以包括程序代码显示模块110,其适于在用户接口或屏幕上将包括所编写的程序的零个或多个程序元素51的程序代码30(例如,图3A、图3B的元素30)显示为不可编辑的文本。
根据一些实施方式,程序代码显示模块110可以适于将一个或更多个程序元素51(例如,51A)与所显示的程序代码30中的一个或更多个程序元素51的对应位置相关联,如本文中详述的。
根据一些实施方式,并且如本文中详述的(例如,关于程序存储模块160),本发明的实施方式可以在计算机存储器设备上维护或存储程序代码30的以中间级或低级格式的第一版本或表示(例如,标记为30B)(例如,如本文中详述的,关于程序存储模块160)。本发明的实施方式可以将程序代码30的所述版本或表示30B转化成程序代码30的被格式化为人类可理解的高级编程语言的第二版本或表示(例如,标记为30A)。高级版本或表示30A可以经由程序代码显示模块110呈现给用户。
因此,程序30中的每个位置(例如,插入位置40)可以具有两个方面。位置的第一方面(例如,标记为40A)可以是空间方面,在高级程序代码30A中定义位置(例如,行号和行内的偏移)。(例如,插入位置40的)位置的第二方面可以是逻辑方面(例如,标记为40B),对应于较低级的(例如,中间级的)程序代码30B中的程序元素51的位置。
根据一些实施方式,程序代码显示模块110可以维护位置表111,位置表111可以包括或者可以实现为任何类型的适当数据结构,例如表、链接列表等。位置表111可以包括多个条目,其中一个或更多个(例如,每个)条目可以将特定程序元素51(例如,变量名称、运算符、函数名称等)与程序代码30中的一个或更多个特定位置(例如,一个或更多个行号、行号内的一个或更多个偏移等)相关联。关于图3A的示例,位置表111可以包括至少一个条目,该至少一个条目可以包括成员(点)运算符与程序代码30中的第九行以及该行内的三十(30)个字符的偏移的位置的关联。
附加地或可替选地,位置表111可以包括至少一个条目,该至少一个条目可以将程序代码30的较低级(例如,中间级)版本或表示(例如,30B)的至少一个程序元素51(例如,成员元素)与该元素在高级版本或表示(例如,30A)中的至少一个位置(例如,行号和该行内的偏移)相关联。换言之,位置表111可以在程序代码30B中的程序元素51的一个或更多个(例如,每个)位置40B与程序代码30A中的对应位置40A之间相关联。下面进一步带来根据本发明的一些实施方式的位置表111的实现方式的示例,例如与表2有关。
本发明的实施方式可以基于中间级程序代码30B的反向转化来维护位置表111,如本文中进一步详述的(例如,关于反向转化模块170)。换言之,反向转化模块170可以被配置成在将中间级程序代码30B转化成高级程序代码30a期间,创建或更新位置表111,将用户标记的位置(例如,40A)与中间级代码格式30B中对应的程序元素51相关联。随后,可以基于位置表111来进行将插入位置40B标识为与插入位置40A相对应。
如本文中详述的,本发明的实施方式可以(例如,在该“前台”中)呈现以高级格式30A(例如,人类可理解的编程语言格式)的程序代码30,并且(例如,在该“后台”中)维护以较低级(例如,中间级)格式30B的程序代码30。
根据一些实施方式,并且如本文中进一步详述的,系统100可以(例如,经由用户接口,诸如图1的输入元素7)获得对至少一个程序元素51和对应的插入位置40B的选择,以将程序元素51插入到(例如,后台中的,中间级表示)程序代码30B中。系统100可以更新程序代码30的较低级(例如,中间级)30B表示,以在所述插入位置40B处包括以较低级(例如,中间级)格式的选定的至少一个文本程序元素51。系统100可以转化程序代码30的较低级(例如,中间级)30B表示,以产生更新的程序代码30的以高级格式30A的表示,并且可以在用户接口上显示更新的高级表示。换言之,系统100可以基于可以存储在计算机存储器(例如,图1的元素4)中的程序代码30B来更新程序代码30A的显示,以包括至少一个插入的程序元素51。
根据一些实施方式,程序代码30B的中间级表示可以存储在计算机存储器(例如,图1的元素4)上,并且可以包括结构化程序代码模型(例如,图4A的元素165),如本文中详述的(例如,关于示例1)。显示给用户的程序代码表示30A可以呈第二格式,包括编程语言的高级、人类可理解的文本。
如本文中详述的,本发明的实施方式可以仅允许根据预定义的编程规则或约束选择至少一个程序元素51并且将至少一个程序元素51插入到对应的插入位置40B处。此外,本发明的实施方式可以通过仅呈现有效用于在对应的相关插入点40处的插入的程序元素51供用户选择来提供对用于计算机辅助编程的当前可用系统的改进。
根据本发明的一些实施方式,系统100可以接收、开始于或涉及与相关编程语言(例如,本发明的实施方式可以支持的用于创建程序代码30的编程语言)有关的一组规则(例如,元素131)。该组规则131可以例如被实现为例如表、数据库、链接列表等的任何适当的数据结构或驻留在例如表、数据库、链接列表等的任何适当的数据结构内。可替选地,该组规则131可以被包括在或并入系统100的模块(例如,软件模块)例如程序元素过滤器模块130内。可以理解,为了清楚起见,对该组规则的进一步引用将涉及它们作为“规则数据结构”元素131,然而该组规则的其他实现方式也可以是可能的。
根据一些实施方式,系统100可以经由用户接口(例如,图1的元素7,诸如鼠标)接收对程序代码30的高级表示30A中的插入位置40A的选择。如本文中详述的(例如,关于位置标记模块120),系统100可以标识较低级(例如,中间级)表示30B中的与高级表示30A的插入位置40A相对应的另一插入位置40B。
根据一些实施方式,并且如下面进一步详述的,系统100可以根据(例如,规则的数据结构131中的)一组规则标识有效用于在第一数据元素的插入位置处的插入的一个或更多个程序元素51,如在本文中详述的(例如,关于程序元素过滤器模块130)。系统100随后可以经由用户接口将一个或更多个有效程序元素51呈现为可选择的元素的列表,如本文中详述的(例如,关于元素列表显示模块150)。
根据一些实施方式,并且如下面进一步详述的,系统100可以经由用户接口接收对来自可选择的程序元素的列表的至少一个程序元素51的选择,并且可以将选定的至少一个程序元素51插入到程序代码的较低级(例如,中间级)表示30B中,如本文中详述的(例如,关于元素插入模块140)。
根据一些实施方式,系统100可以包括位置标记模块120,位置标记模块120被配置成使得用户能够在所呈现的程序代码30A中标记可能有效用于插入新的程序元素的至少一个位置。
位置标记模块120可以被配置成从诸如鼠标的输入设备(例如,图1的元素7)接收用户可能感兴趣的空间位置40'(例如,屏幕上的位置)的标记。位置标记模块120可以产生可以对应于标记位置40'的插入指示符41。位置标记模块120可以(例如,经由程序显示模块110)在计算机屏幕上呈现插入指示符41(例如,如图3A中的黑色或闪烁的矩形)以方便用户。
根据一些实施方式,在程序代码30文本中(例如,由用户通过鼠标点击)标记位置40'之后,位置标记模块120可以基于相关编程语言的(例如,规则数据结构131中的)规则来决定或确定标记位置40'是否有效用于代码元素51的插入。位置标记模块120可以根据所述决定将插入指示符41显示为程序代码的一部分。例如,位置标记模块120可以仅在标记位置对代码元素51的插入有效时才呈现插入指示符41。
如以上详述的,表111可以包括可以将位置(例如,标记位置40')与中间级程序代码30B中的一个或更多个程序元素51的对应位置40B相关联的一个或更多个条目。根据一些实施方式,位置标记模块120可以被配置成根据使用中的相关编程语言的(例如,规则数据结构131中的)规则确定程序代码30B中的位置40B是否有效用于程序元素51的插入,并且相应地呈现插入指示符41(例如,仅当位置40B有效用于在程序代码30B中插入代码元素51时)。可以理解,在位置标记模块120确定位置40B有效用于在程序代码30B中插入代码元素51的情况下,所呈现的插入指示符41的位置可以与插入点40B的较高级方面40A相同或趋同。换言之,在这种情况下,插入指示符41可以(例如,向用户)图形化地表示程序代码30B中的插入点40B的高级方面40A,其中插入点40B对一个或更多个程序元素51的插入有效。
例如,在使用的编程语言是'C'语言的情况下,如果特定位置位于功能块内(例如,位于main()功能块内),则位置标记模块120可以确定特定位置对代码插入有效等。
在用户的接口(例如,图1的元素7)包括增量导航元素(例如键盘箭头键)的情况下,位置标记模块120可以适于根据导航的方向在有效插入位置之间移动插入指示符41。例如,右箭头键将插入指示器41移动到下一个有效插入位置40A,而左箭头键将插入指示符41移动到前一个有效插入位置40A。
换言之,如以上详述的,表111可以包括一个或更多个条目,一个或更多个条目可以将程序代码30A的前端表示30A中的位置40(例如,插入位置40A)与程序代码30的较低级(例如,中间级)表示30B中的一个或更多个程序元素51的对应位置相关联。在用户使用增量导航(例如,按下右箭头键)的情况下,位置标记模块120可以搜索中间级程序代码30B中的可能有效用于代码元素51的插入的最近(例如,下一个)位置40B。
根据一些实施方式,位置标记模块120可以产生插入点40(例如,40A),插入点40可以包括与程序代码30(例如,30A)中的用户的标记位置40'有关的数据。这样的数据可以包括例如与用户标记的空间位置相对应的程序代码30的行和/或行内的偏移。
位置标记模块120可以随后与程序代码显示模块110的位置表111协作,以将标记位置41(例如,插入位置40A)与一个或更多个相应的程序元素51相关联或相关。关于图3A的示例,在用户(例如,通过鼠标点击)在屏幕上标记成员(点)运算符之后的空间位置41的情况下,位置标记模块120可以将标记位置41标识为插入点40A,并且可以与位置表111协作以将程序代码30A中的成员(点)运算符之后的位置40A与插入点40B相关联。
如本文中详述的(例如,关于图3A),本发明的实施方式可以随后基于(例如,规则数据结构131中的)规则例如程序代码30的相关编程语言的句法规则,鉴于所标识的插入点40(例如,40B,直接在成员运算符之后),建议有效的程序元素51(例如,51A、51B,如“width”和“height”)以供选择。
如本文中详述的(例如,关于辅助模块180),本发明的实施方式还可以利用插入点40(例如,40B)的确定来对程序代码30(例如,对中间级代码30B)执行一个或更多个编辑动作,包括例如对与程序代码30B中的至少一个程序元素51有关的一个或更多个值的编辑;对与程序代码30B中的至少一个程序元素51有关的一个或更多个符号的编辑;对程序代码30B的至少一个程序元素51的复制;对程序代码30B的至少一个程序元素51的删除等。
根据一些实施方式,系统100可以包括程序元素过滤器模块130。如本文中详述的,程序元素过滤器模块130可以适于接收可以在程序代码30中使用的多个可用程序元素60,接收插入点40(例如,40B,来自位置标记模块120),并且随后基于相关编程语言的规则的数据结构131的规则从多个可用程序元素60中提取或过滤有效用于在插入位置40(例如,40B)处的插入的仅那些可用程序元素。
例如,程序元素过滤器模块130可以被配置成(a)扫描或遍历多个可用程序元素60;(b)对于多个可用程序元素60中的一个或更多个(例如,每个)程序元素,扫描或遍历规则的数据结构131的规则;以及(c)确定相关程序元素是否符合所述规则,并因此是否有效用于在插入点40的位置处插入到程序代码30中。可以理解,其中扫描所有规则和所有可用程序元素60的上述示例可能是未实验的,并且可以实现对以上过程中的过程的特定修改以进行更有效的实现。
根据一些实施方式,如本文中详述的(例如,关于程序存储模块160),程序代码30B可以存储在可以以分层结构(例如,树结构)布置的结构化程序代码模型中,以便维护程序代码30(例如,30B)的结构(例如,分层结构)。因此,程序元素过滤器模块130可以与程序存储模块160协作,以便根据结构化程序代码模型(例如,根据所编写的程序的结构)从多个可用程序元素60中提取或过滤有效用于在插入位置40处的插入的仅那些可用程序元素。
根据一些实施方式,可用程序元素60可以从动态数据库60导出,并且可以包括:可以在程序代码30中(例如,由用户)声明的符号列表61;可以从包括例如API、导入的软件库等的外部源导入的符号列表62;以及可以属于相关编程语言或由相关编程语言定义的静态语句列表63。实施方式可以包括其他类型的可用程序元素60。在以下某种意义上,数据库可以是“动态的”:(a)每当外部API/库被导入、移除和/或更改时,可以创建和/或更新导入符号的列表62;以及(b)每次从程序代码30中删除、或在程序代码30中插入或更改元素(例如,符号声明)时,可以更改或更新所编写的程序中声明的符号的列表61。
根据本发明的一些实施方式,系统100可以包括元素列表显示部件150,元素列表显示部件150可以适于接收已经被程序元素过滤器模块130过滤或提取的可用程序元素60,并且(例如,在计算机屏幕上)将过滤的元素60显示为有效的、可选择的程序元素51的列表50。根据本发明的一些实施方式,元素列表显示部件150可以被配置成在列表中累积对在相关插入点40处的插入有效的一个或更多个(例如,多个)程序元素51。元素列表显示部件150可以根据程序元素51的至少一个类别(例如,程序元素51类型)以及/或者根据用户的至少一个偏好来分类程序元素的列表。元素列表显示部件150可以将列表50呈现为可选择的元素列表。
元素列表显示部件150可以经由诸如计算机鼠标的输入设备(例如,图1的元素7)接收用户对一个或更多个特定程序元素51的选择(例如,鼠标点击)的指示,以便在插入点40的位置处进行插入。
根据一些实施方式,在程序代码30中创建插入点40之后,元素列表显示部件150可以被配置成显示由程序元素模块130产生的一个或更多个(例如,所有)有效程序元素51。在一些实施方式中,所呈现的程序元素51可以显示为单个列表或集合。附加地或可替选地,所呈现的程序元素51可以被划分为类别,并且可以以两个步骤进行选择:例如,用于选择类别的第一步骤和用于选择程序元素51的第二步骤。程序元素51的类别的示例可以包括例如声明(例如,变量名称)、流控制语句(例如,‘if’、‘else’等)、运算符(例如,算术运算符、逻辑运算符等)、函数、值等。
根据一些实施方式,元素列表显示模块150可以根据预选择的标准将列表50产生为分类的列表。例如,列表50的程序元素51可以基于字母顺序、基于使用频率和/或基于任何其他适当的分类标准来分类。
根据一些实施方式,程序代码30B可以被存储为结构化对象代码模型165,并且代码模型165可以在任何时间维护程序代码30B的逻辑结构,如本文中详述的(例如,关于程序结构模块160)。根据一些实施方式,元素列表显示模块150可以利用代码模型165的维护的逻辑结构,以实现对列表50进行分类的其他有利方法。
例如,在一些实施方式中,元素列表显示部件150可以根据代码30B的结构化对象模型165,通过符号范围或接近度的标准对列表50中的可用符号(例如,程序代码30的变量和/或函数)进行分类。换言之,元素列表显示部件150可以在超出本地范围(例如,在另一文件中,在另一函数中,在另一块中,等)限定的符号之前或之上显示可以在本地范围内(例如,在同一文件内、同一函数内、同一代码块内、同一方法内等)限定的符号。
根据一些实施方式,元素列表显示模块150可以使得用户能够(例如,经由图1的输入设备7)控制、选择或限定使用哪种分类方法和/或分类标准。
根据一些实施方式,元素列表显示模块150可以显示与列表50中的每个呈现的程序元素51有关的数据的预定义范围。例如,元素列表显示模块150可以被配置成(例如,在用户的计算机屏幕上)仅显示建议的程序元素51的名称或符号。然而,可以理解,元素列表显示模块150仍然可以保留为了将元素51中的每个元素插入或并入到程序代码30中所需的信息。该信息可以包括例如程序元素51的类型和与程序代码30分层中要插入元素的精确位置有关的数据。
关于图3A中描绘的示例,(例如,由符号名称“height”表示的)程序元素51B可以包括(例如,除了显式呈现的符号名称“height”之外)与对应程序元素的隐式(例如,未呈现的)关联或关系(例如,与点(.)操作数的关系)。在该示例中,程序元素51B可以包括以下指示:“height”程序元素51应当被放置在具有特定标识(例如,程序元素序列号)的程序元素(例如,点(.)运算符)之后(例如,作为其右侧操作数)以及/或者放置在具有特定标识(例如,程序块序列号)的特定程序块内。换言之,包括在程序元素51中的数据可以包括类似于邮政信封上的地址的信息,指示程序元素51一旦被用户选择,其应当被插入到程序代码30B的代码模型165中的何处。
在另一示例中,第一程序元素51可以包括可以与对另一第二程序元素51的引用有关的信息。例如,如本领域中已知的,对程序中的元素的引用可以用于访问变量、调用函数、对特定类型的对象进行初始化、跳出循环等。根据一些实施方式,元素列表显示部件可以在第一程序元素51中包括作为对程序代码30B中的第二程序元素51的引用的至少一个数据元素。这种引用数据元素可以包括例如链接、指向计算机存储器中的位置的指针、索引等,这取决于中间级语言的特定架构和/或代码模型165的实现或结构。
根据一些实施方式,除了由程序元素过滤器模块130提取的程序元素51之外,元素列表显示模块150可以向用户建议一个或更多个描述性或装饰性程序元素51。这样的元素可以包括例如注释、空行等。在一些实施方式中,这样的元素51可以与如上面详述的程序元素类别分开出现。附加地,这种描述性或装饰性元素可以在与程序代码30的活动部分分开的位置处(例如,在一个或更多个代码行的末尾、在文件的末尾等)添加或插入。
根据一些实施方式,并且如本文中进一步详述的,系统100可以包括元素插入模块140和程序存储模块160。元素插入模块140可以适于根据选定的有效程序元素51将一个或更多个程序元素51插入到程序代码30的较低级(例如,中间级)表示30B或版本中。程序存储模块160可以接收程序代码30的包括插入的一个或更多个程序元素51的至少一部分(例如,添加或增量),并且可以将程序代码30存储在表示程序代码30B的结构化对象模型165中。根据一些实施方式,在(例如,中间级程序代码30B的结构化对象模型165中的)程序代码的更改(例如,程序元素的插入)之后,系统100可以标识存储的程序代码30B的更改并且可以如本文中详述的(例如,关于反向转化模块)将存储的程序代码30B的包括所述更改的至少一部分从第一较低级(例如,中间级)格式转化成用户可理解的程序代码表示30A的高级格式。
根据一些实施方式,结构化对象模型30B可以例如是或者包括以分层数据结构(例如,本文中被称为代码模型165)的程序代码30的表示或描述,分层数据结构可以维护中间级格式的程序代码30的分层和/结构,如下面的非限制性示例、示例1所示。
示例1
前端、高级、用户可理解的编程语言表示30A:
中间级表示30B的后端、结构化程序代码模型165:
示例1的第一部分包括“C”编程语言中“max”函数的定义。函数max被配置成接收两个整数参数,并且返回它们之间的最大值,如本领域技术人员可以理解的。示例1的第二部分包括分层结构化程序代码模型165的非限制性实现,其可以对应于“max”函数的“C”语言定义,并且根据本发明的一些实施方式可以以中间级格式表示“max”函数。
如示例1所示,中间级程序代码30B可以被构造为分层结构化程序代码模型165,表示程序代码30的分层结构。“C”编程语言中的“max”函数程序代码30的前端、用户级(或用户可理解的)表示30A和后端、中间级表示30B的结构化代码模型165可以包括相同程序元素的表示。这些程序元素包括例如由“max”符号引用的函数的声明、“max”函数的主体、第一参数(a)、第二参数(b)、“if”语句、二元运算符(例如,“>”)、“else”语句、“return”语句等。
根据一些实施方式,并且如示例1中所见,分层结构化程序代码模型165可以允许系统100根据分层结构化程序代码模型165中的至少一个程序元素51的位置容易地确定程序代码30中的至少一个程序元素51的上下文(例如,位置)。以类似的方式,分层结构化程序代码模型165可以允许系统100根据分层结构化程序代码模型165容易地确定程序代码30中的程序元素51的一个或更多个符号的范围。
如示例1所示,对于引用程序代码的第二程序元素51的程序代码的每个第一程序元素51,分层结构化程序代码模型165可以包括对第二程序元素的引用,从而允许经由所述引用轻松访问第二程序元素。例如,还如示例1中所见,程序代码30B的程序元素51可以与引用号或标识(例如,ID号)相关联。例如,输入参数a和b以及“max”函数的返回类型可以通过引用号618(其可以在别处定义为与整数类型有关)来标识。在另一示例中,第一参数(a)可以通过第一ID号(4082)引用,并且第二参数(b)可以通过第二ID号(4083)引用,从而允许“max”函数返回这些引用参数中的任一个。
还如示例1中所见,程序代码30B的程序元素51可以在“max”函数的中间级30B表示的程序代码模型165中以分层方式表示。术语“分层”在此上下文中可以指示程序代码30B的一个或更多个第一程序元素51可以包括或指代程序代码30B的一个或更多个第二程序元素51。在示例1的文本示例中,可以在编程行的缩进中查看此分层。例如,“function”程序元素51(例如,程序元素ID 4081)可以包括“a”的“param”程序块(例如,程序元素ID 4082)、“b”的“param”程序块(例如,程序元素ID 4083)和“body”程序块(例如,程序元素ID 4084)。作为“body”程序块的程序元素又可以包括诸如“if”语句块(例如,程序元素ID 4085)、“then”语句块(例如,程序元素ID 4086)和“return”语句块(例如,程序元素ID 4087)等的程序元素。
系统100的实施方式可以包括适于将结构化对象模型30B转化成高级文本30A的反向转化模块170。换言之,反向转化模块170可以从程序代码30的中间级格式30B产生程序代码30的高级编程语言表示30A,高级编程语言表示30A可以是人类可理解的,并且可以由程序代码显示模块110(例如,在计算机屏幕上)显示。
如本领域技术人员已知的,当前可用的编程系统通常将程序员编写的代码存储为人类可理解的文本,其通常被称为“源代码”。该源代码通常用作编译器的输入。一些当前可用的编程系统可以包括两个或更多个编译器。例如,第一编译器可以被称为“前端”编译器,并且第二编译器可以被称为“后端”编译器。前端编译器通常被配置成将用高级编程语言编写的源代码转化成中间级语言。后端编译器通常被配置成将中间级语言格式的代码转化成低级语言格式,其通常被称为“机器代码”语言,以供执行。
源代码元素(例如,编程代码的高级表示)通常遵守严格的句法规则和复杂的形式结构,但仍然可以是非常有表达性和灵活性的。前端编译器通常被配置成对源代码进行解析、对其句法进行验证、对其结构进行分析并且将其转换为中间级语言,该中间级语言通常仅包含简单的命令式语句。如果前端编译器未能对源代码的句法进行解析,例如——在源代码结构违反编程语言的任何规则的情况下,前端编译器可能产生错误通知。
根据本发明的一些实施方式,并且与当前可用的用于编程的系统(例如,如上面详述的)相比,元素插入模块140可以被配置成直接以中间级语言表示(标记为30B)创建程序代码30,如本文中进一步详述的。因此,程序存储模块160可以被配置成直接以中间级语言表示(标记为30B)存储程序代码30。术语“直接”在此上下文中可以用于指示程序代码30的中间级表示30B可能不会(例如,经由编译)被创建为程序代码30的高级源代码表示(例如,30A)的产品,而是直接经由将中间级格式30B的程序元素51插入到程序代码30的结构化程序代码模型165中。
高级语言格式30A的程序代码30的文本表示可以按需(例如,通过反向转化模块170)从中间级表示30B生成,并且可能不需要被存储、解析、或分析。根据一些实施方式,高级语言格式30A可以具有与在当前可用的编程系统中可以用作“源代码”的高级代码相同的外观或格式。可以理解,由于本发明的过程可能不需要对高级语言格式30A的编译(例如,如当前可用系统对源代码所做的那样),它可能完全没有编译错误。
如本领域技术人员已知的,在当前可用的用于编程的系统中,中间级语言通常仅包含执行程序所需的信息。例如,中间级程序代码元素可能不保留符号名称或注释。
相比之下,根据本发明的一些实施方式,中间级程序代码的代码模型165可以保留(例如,通过反向转化模块170)将中间级语言表示30B转化成程序代码30的高级语言表示30A可能需要的所有信息,而不丢失任何信息。此外,由于大多数高级语言具有分层结构(例如,如关于示例1示出的),因此本发明的实施方式可以在程序代码30的中间级语言表示30B的代码模型165内维护该分层结构。这可以通过存储单个程序元素51与它们的容器(例如,“父”)程序元素51之间的引用(例如,链接和/或指针,如示例1中的引用ID)来实现。例如,如本文中详述的(例如,关于示例1),代码模型165可以形成为对象树,其中第一程序元素51(例如,函数调用)可以包含一个或更多个第二程序元素51(例如,参数块)(例如,是一个或更多个第二程序元素51的父),第二程序元素可以包含一个或更多个第三程序元素51(例如,表达式块)(例如,是一个或更多个第三程序元素51的父),第三程序元素51可以包含一个或更多个第四程序元素51(例如,运算符和/或操作数)等。
如本文中详述的,程序存储模块160可以被配置成使用中间级语言将程序代码30存储为结构化模型30B。为了向用户显示程序,反向转化模块170可以将结构化模型30B反向转化成人类可理解的、高级文本编程语言格式。
根据一些实施方式,存储在程序代码30B中的一个或更多个(例如,每个)程序元素51可以包括将其转化成高级文本程序语言格式30A所需的所有信息。这样的信息可以包括例如程序元素51可能需要的任何子元素的并入和/或对任何子元素的引用。根据本发明的一些实施方式,反向转化的过程(其在本领域中可以被称为去编译)可以被认为是直接的,在某种意义上,这种转化可以遵循可能与相关编程语言有关的预先建立的编码模板。
例如,为了产生诸如“while”循环语句的程序元素51的文本表示30A,反向转化模块170可以使用诸如以下示例、示例2中的模板:
示例2
<color=keyword>while</color>(<var>condition</var>){<var>body</var>}
其中“condition”可以包括循环的条件元素的文本表示,以及“body”可以包括可执行语句的块。
高级代码块30A内的程序元素51的文本表示可以根据相关编程语言具体确定。例如,根据相关编程语言(例如,Java、C#、Python等)的句法或预先建立的编码模板,程序元素51的文本表示可以出现在单独的行中,可以缩进,后面可以跟分号等。
关于“while”循环的示例,在一些语言(例如,C)中,可能仅当主体块包含多于一个语句时才需要波形括号,而在其他语言中可能根本不需要波形括号,或者对于包含仅一个语句的主体块可能需要波形括号。反向转化模块170可以被配置成使用可以符合相关编程语言的特定语法和/或句法的模板(例如,如在示例2中),以便在代码30A中正确地包括波形括号。以这种方式,反向转化模块170可以通过使用与相关程序语言相对应的模板来将程序代码30B的一个或更多个(例如,每个)元素51转化成文本表示。
如本文中详述的,程序代码30可以包括可以包括子元素51的分层的一个或更多个程序元素51。例如,第一程序元素51(例如,第一“for”循环)可以包括一个或更多个子元素51(例如,一个或更多个嵌入的第二“for”循环)。在这样的情况下,反向转化模块170可以从顶层元素(例如,最外层循环)开始并且递归地遍历结构化代码模型165,以便创建可以包括每个程序元素51的高级文本表示以及其中对应的子元素51的高级文本表示的高级表示30A。
根据一些实施方式,反向转化模块170可以生成每个程序元素51的文本表示并且可以在程序代码显示模块110的位置表111中保存包含每个元素的字符的范围的条目或记录。表111的该记录可以使得位置标记模块120能够在标记的文本位置40'(和/或随后的插入点40A)与程序代码30B的特定程序元素51之间进行关联。
换言之:(a)结构化代码模型165可以包括与每个程序元素51有关的信息及其在分层程序结构中的特定位置内(例如,特定程序块内)的相应标识(例如,程序元素ID号);以及(b)程序代码的文本呈现30A包括高级程序元素程序代码在对应的空间位置(例如,行号和偏移)的位置。因此,反向转化模块170可以通过将程序代码30B反向转化成高级呈现30A的过程来填充或维护表111。
根据一些实施方式,位置表111可以被实现为或者可以包括诸如以下表2的非限制性示例的表。表2的示例关于位置表111的实现,其对应于程序代码30A的以下单行部分:
print(a,a>b)。
表2
程序元素引用 | 开始偏移 | 结束偏移 |
调用打印 | 0 | 15 |
列表 | 6 | 14 |
得到a | 6 | 7 |
运算符 | 9 | 14 |
得到a | 9 | 10 |
call>(int,int) | 11 | 12 |
得到b | 13 | 14 |
如表2的示例所示,位置表111中的至少一个(例如,每个)条目(例如,列)可以包括对程序代码30B中的程序元素51的引用、以及在所显示的代码30A中表示该元素的偏移的范围。因此,表111可以将程序代码30B的至少一个程序元素与所显示的高级代码30A中的对应位置相关联。同样地,本发明的实施方式(例如,反向转化模块170)可以利用表111来在后台、中间级程序代码表示30B中的位置(例如,插入位置40B)与在前台、高级程序代码表示30A中的对应位置(例如,插入位置40A)之间进行转化或相关联。
例如,在用户在所显示的文本中的偏移14处(例如,在字符‘b’与字符‘)’之间)标记插入位置40的情况下。在这种情况下,显示模块110可以将文本偏移14转移至位置模块120。位置模块120可以针对在偏移14处开始或结束的元素扫描位置表111。在以上示例中,位置模块120可以找到3个匹配:(i)打印调用内的参数列表的结束;(ii)参数列表内的运算符表达式的结束;以及(iii)运算符表达式内的值召回(b)的结束。
这些结果可以被发送至程序元素过滤器模块130,程序元素过滤器模块130可以根据结果中的每一个针对可能有效用于插入的元素51扫描可用元素60的数据库。对于参数列表(i),程序元素过滤器模块130可以(在语言语句63中)找到用于向列表添加另一参数的元素。该元素在列表50中可能被符号化为逗号(,)。对于已知返回布尔值的运算符表达式(ii),它可以(在SDK符号62中)找到接受布尔值作为它们的左操作数的一些运算符。这种运算符可以包括&&、II、==和!=。对于在该示例中为整数类型的值b的召回(iii),它可以(在SDK符号62中)找到接受整数值作为它们的左操作数的一些运算符。这种运算符可以包括例如+、-、*、/和%。
可以理解,在一些语言(例如,Java)中,整数类型可以被定义为类,并且可以具有可访问的成员。在这种情况下,程序元素过滤器模块130还可以在列表50中包括可以被符号化为点(.)的成员访问运算符。
可以理解,插入点40(例如,40A、40B)可以出现在现有程序元素51之前、之后或之间。然而,由于程序元素51可以包含其他(例如,嵌入的)程序元素51,因此插入点40A的特定位置可以匹配多于一个的程序元素51的开始偏移或结束偏移。
例如,如图3B的示例中描绘的,插入点40A匹配操作元素“value>highest”的结束偏移以及操作数元素“highest”的结束偏移。
因此,根据一些实施方式,位置标记模块120可以将相关程序元素51中的每一个转移至程序元素过滤器模块130,以便使得程序元素过滤器模块130能够建议可能有效用于在插入位置40A处的插入的一个或更多个(例如,所有)程序元素51,而不管在程序代码30B的结构化代码模型165中选定的程序元素51最终将被插入的位置。
根据一些实施方式,用户可以在元素内(例如在“while”语句的字母之间)标记所显示的程序代码30A的空间位置。在这种情况下,位置标记模块120可以标记或突出显示整个程序元素51。例如,插入指示符41可以跨越整个词“while”。随后,元素列表显示模块150可以产生并显示可选择的有效程序元素51的列表50,列表50可以包括可能有效用于替换突出显示的元素的所有可用元素(例如,将“while”循环替换为“for”循环)。
在另一示例中,在表达式“a+b”中,加号(+)运算符可以被可以接受“a”和“b”作为其操作数的任何其他运算符替换。关于同一示例,两个操作数(例如,“a”和“b”)中的任一个如果被突出显示,则可以由任何可用的值、表达式、函数或变量替换,这些值、表达式、函数或变量被配置成返回可由加号(+)运算符接受的值。
根据一些实施方式,系统100可以包括适于(例如,向用户)建议关于程序代码30的程序元素51的一个或更多个可选动作的辅助模块180。例如,如本领域中已知的,用户可以使用诸如计算机鼠标的输入设备(例如,通过执行鼠标右键点击)在他们的计算机屏幕上呈现上下文菜单。在本发明的一些实施方式中,用户可以突出显示程序元素51,并且执行鼠标右键点击以(例如,在计算机屏幕上)呈现一个或更多个可选动作81的列表80。列表80可以例如呈现为上下文(例如,“弹出”)菜单,并且可以经由上下文菜单建议可选动作81以供选择。
根据一些实施方式,当程序元素51被突出显示时,辅助模块180可以(例如,经由上下文菜单)建议可以与突出显示的程序元素51有关的相关编辑动作81。建议的编辑动作的示例可以包括:删除程序元素51、剪切、复制和/或粘贴突出显示的程序元素51等。下面进一步详述实现这种编辑动作的方法。
术语“上下文”在本文中可以指示列表80可以根据对应的插入点40的位置而不同地产生和/或呈现。例如,在第一情况下,插入点40可以涉及第一程序元素51,并且列表80可以包括可能有效用于在插入点40处的应用的一个或动作81。
如本文中详述的(例如,关于上面的示例1),中间级程序代码30B的结构化代码模型165可以包括关于或描述一个或更多个程序元素51的类型的数据。因此,根据一些实施方式,辅助模块180可以适于建议可以与程序元素51的类型相对应的元素特定动作。
例如,辅助模块180可以适于建议诸如以下的动作:(例如,通过呈现文档)为特定突出显示的程序元素51和/或程序元素51类型提供帮助,修改突出显示的程序元素51中的值(例如,数字、字符串或字段的值),重新命名声明的符号(例如,变量、函数、类型等),当突出显示对符号的引用(例如实例化、函数调用等)时显示(例如“跳到”)该符号的声明的位置等。
如本文中详述的,程序元素过滤模块130可以被配置成从位置标记模块120接收插入点40并且向用户建议或提供一个或更多个有效程序元素51以供选择。该建议可以被呈现为建议的、可选择的有效程序元素51的过滤的列表50。
根据一些实施方式,列表50可以仅包括有效用于在插入点40处的插入的程序元素51,并且可以没有无效用于在插入点40处的插入的程序元素51。程序元素过滤模块130可以通过扫描一个或更多个(例如,所有)可用程序元素60来产生过滤列表50,并且随后检查或验证每个元素60,以确定元素对在插入点40处的插入的有效性。如本文中详述的,程序元素过滤模块130可以将有效程序元素51的列表50转移至元素列表显示模块150以供用户选择。
本领域技术人员可以理解,本发明的实施方式可以包括通过以下操作对用于计算机辅助编程的当前可用系统的改进:遍历可用程序元素60(例如,61、62和63,如下详述)的整个列表,并且标识列表60的可能有效用于在对应插入点处的插入的所有程序元素。这与采用“代码完成”技术的当前可用系统形成对比,后者通常限于在用户进行(例如,几个第一字符的)初始键入之后完成符号(例如,变量名称)或语句(例如,指令)。
根据一些实施方式,可以存在可以被馈送到程序元素过滤器模块130中的一种或更多种类型的程序元素60(在图4A中标记为61、62和63)的源。
程序元素60的一种这样的类型(例如,63)可以是可以由编程语言提供的静态的、预定义的语句或指令。该第一类型可以包括例如程序语言语句63,如“if”、“return”、“class”等。
程序元素60的另一种这样的类型(例如,61)可以是动态的,在某种意义上它可以包括与特定程序相关的程序元素60,并且可以包括例如可以在程序代码30中声明的符号和/或名称61。该第二类型可以包括例如诸如变量名称、函数名称、运算符、类型等的符号。根据本发明的一些实施方式,程序存储模块160可以被配置成实时或接近实时地更新可用声明符号和/或名称61的列表。术语“实时”在该上下文中可以用于指示可以在用户可能已插入或声明相关符号之后以及在过滤器模块130可能再次扫描列表60之前更新可用程序元素60的列表。
程序元素60的这种类型(例如,62)可以包括例如可以从诸如库、SDK、系统API等的外部源导入的符号。本发明的实施方式可以包括程序元素60的其他类型。
根据一些实施方式,程序元素过滤器模块130可以包括或者可以通信地连接至编程规则数据结构(例如,数据库)131。编程规则数据结构131可以适于维护可以适用于一种或更多种特定编程语言的一组编程规则或限制。例如,编程规则数据结构131可以包括一个或更多个数据结构或表,数据结构或表可以适于将特定类型的程序元素和与相关编程语言相关的相应限制相关联。
例如,如本领域中已知的,标准“C”编程语言规定“if”指令应当跟随有条件表达式和程序块。因此,与C语言相关的相应编程规则可以被实现为编程规则数据结构131中的表中的条目。数据结构131的至少一个条目可以将第一类型的程序元素51(例如,指令程序元素51,如“if”指令)与(例如,根据编程语言规则)必须直接跟随第一程序元素51的一个或更多个第二程序元素51(例如,条件表达式和程序块)相关联。
在另一示例中,如本领域中已知的,标准“C”编程语言规定“continue”语句可能仅出现在循环(例如,“for”循环)块内。因此,与C语言相关的相应编程规则可以被实现为编程规则数据结构131中的(例如,表中的)条目,其可以将第一类型的程序元素51(例如,“continue”指令)与第一程序元素51必须驻留在其中的第二类型的程序元素51(例如,循环程序块)相关联。
根据一些实施方式,程序元素过滤器模块130可以与编程规则数据结构131协作以标识可能建议插入的有效程序元素51。关于“if”指令示例,在插入点40位于“if”指令之后的情况下,程序元素过滤器模块130可以基于编程规则数据结构131的限制来确定用于建议的有效程序元素51是条件表达式。如本文中进一步详述的,本发明的实施方式可以随后将占位符程序元素51插入到程序代码30中,并且可以提示用户进一步选择程序元素51(例如,表达式、程序符号等)来填充占位符程序元素51,由此产生作为可行条件表达式的程序元素51。
附加地或可替选地,程序元素过滤器模块130可以与编程规则数据结构131协作,以检查每个可用程序元素60的约束,并且确定每个元素60是否可以在相关的插入点40处插入到程序代码30中。
例如,如本领域中已知的,编程语言句法可以施加与程序代码的分层结构有关的限制或规则。例如,流控制语句(例如,条件语句、循环语句等)可能被限制为仅出现在执行块如函数的主体块中,或者嵌入在另一流控制语句中。程序元素过滤器模块130因此可以仅当插入点40对应于编程规则数据结构131中的适当限制时(例如,仅当插入点40位于执行块或另一流控制语句内时)包括流控制语句作为列表50的有效、可选择的程序元素51。
在另一示例中,如本领域中已知的,一些流控制语句可能具有特定的上下文约束。例如,诸如“continue”语句的程序元素可能仅出现在循环内,而诸如“else”语句的程序元素可能仅出现在“if”语句的主体紧接之后。因此,程序元素过滤器模块130因此可以仅当插入点40对应于编程规则数据结构131中的适当限制时(例如,分别紧接在“if”语句的主体之后或者在循环内)包括流控制语句(例如,“else”或“continue”等)作为列表50的有效、可选择的程序元素51。
在另一示例中,如本领域中已知的,一些语句可以对它们的子元素施加限制。例如,诸如“for”语句的程序元素51可以包括赋值运算符(=),并且赋值运算符可以规定其左操作数应当是可变的(例如,对变量的引用或者其值可以在运行时分配或修改的表达式)。因此,在插入点40位于赋值运算符左侧的情况下,程序元素过滤器模块130可以因此仅包括表示可变程序元素的符号作为列表50的有效、可选择的程序元素51。
在另一示例中,程序元素过滤器模块130可以与编程规则数据结构131协作以检查与程序元素51值类型有关的程序语言限制或要求。例如,在许多语言中,诸如“if”和“while”的条件语句可能需要返回布尔值的表达式作为输入。因此,在插入点40位于输入表达式的位置的情况下,程序元素过滤器模块130可以仅包括作为布尔表达式或符号的程序元素作为列表50的有效、可选择的程序元素51。
在另一示例中,如本领域中已知的,许多编程语言规定数组数据结构的索引(例如,形式为“array[index]”)将具有整数值。因此,在插入点40位于索引表达式的位置的情况下,程序元素过滤器模块130可以仅包括作为整数表达式或符号的程序元素作为列表50的有效、可选择的程序元素51。
如本领域中已知的,强类型语言(例如,C#、Java)是规定每个声明的变量或参数必须具有与其相关联的类型的编程语言。相比之下,弱类型语言(例如JavaScript、Python)允许任何变量接收任何类型的值。本领域技术人员可以理解,本发明的实施方式可能特别有益于强类型语言,例如C#、Java等;除了诸如代码安全性和可读性的益处之外,通过本发明的实施方式产生强类型程序代码30还可以提供在构建时进行类型检查和防止运行时错误的益处。
与用于编程的当前可用的系统相比,其中类型检查由编译器完成,本发明的实施方式可以包括在程序元素60可以插入到列表50中之前由程序元素过滤器模块130进行的类型检查。因此,按值类型过滤元素可以(例如,从多个可用程序元素60中)显著减少有效程序元素51的列表50,并且可以帮助用户容易地选择正确的程序元素以供插入。
例如,如本领域中已知的,在编程语言是强类型语言的情况下,程序元素51的声明包括所声明的程序元素与特定类型(例如,字符串、整数等)的关联。根据一些实施方式,程序元素过滤器模块130可以利用编程语言的强类型属性来仅建议并允许基于它们的类型插入值或表达式。例如,程序元素过滤器模块130可以仅建议并允许插入具有与插入位置兼容或在插入位置有效的类型的声明的程序元素61。
本领域技术人员可以理解,如本文中详述的由程序元素过滤器模块130对程序元素60的过滤可以不限于程序30中的任何特定位置和/或任何特定值;本发明的实施方式可以应用类似的过滤任何类型或值的程序元素60的方法,并且与程序代码30中的任何定位(location)或位置(position)有关。
本领域技术人员可以理解,如上面详述的且如前述示例所展示的由程序元素过滤器模块130过滤程序元素60的过程可以用于多种操作,包括例如给变量赋值、向函数传递自变量、为运算符提供操作数等。
如本领域中已知的,在程序内声明的符号可以与范围相关联,该范围可以限定该符号的可访问性的边界(例如,在声明该符号的代码块内、在声明该符号的文件内等)。例如,当前可用的编程语言可以使得单个符号或名称能够引用多个底层实体和/或在整个程序中进行不同的处理,这取决于该符号的范围。该构思可以用于例如提供数据封装和减少符号名称混乱。
根据本发明的一些实施方式,程序存储模块160可以将程序代码30B存储在分层结构化程序代码模型165中,并且可以维护程序代码模型165中的每个程序块的符号表161。换言之,系统100可以维护限定程序代码30内的每个程序元素51的范围的一个或更多个符号范围表161,并且可以使用一个或更多个符号范围表161来检测程序代码30内的程序元素51之间的冲突。
例如,程序存储模块160可以维护针对第一程序块中声明的、与函数(例如,示例1的“max”函数)有关的符号的第一符号表161,并且维护针对第二程序块中声明的、与条件(例如,示例1的“if”语句)有关的符号的第二符号表161。
根据一些实施方式,声明的符号列表61可以是可以在插入点40的范围内可访问的所有符号表161的统一。
换言之,用户可以在结构化程序代码模型165的程序块内声明符号(例如,新变量名称、新类型等)。程序存储模块160可以将声明的符号添加为符号表161中的与包含声明的程序块相对应的条目。因此,当程序元素过滤器模块130寻找有效用于在程序中的特定位置处的插入的符号时,它可以与中间级代码30B的结构化程序代码模型165协作以仅搜索相关符号表161。例如,程序元素过滤器模块130可以在列表50中仅包括与包括插入点40的块(例如,第一块)和/或任何父程序块(例如,包括第一块的任何第二块)的符号表相同的符号表161有关的(例如,列表61的)声明的元素。
如本领域中已知的,当前可用的编程语言可以通过数据结构(例如,结构、类等)的声明来控制数据管理和封装。这样的数据结构可以包括可以存储一组值的类型的复合形式,所述类型通常称为“成员”或“字段”。例如,图3A中描绘的示例的数据结构“Rect”包括各种类型的四种不同字段:“description”、“width”、“height”和“filled”。在这种情况下,可以通过内存指针(->)或点运算符(.)来进行对结构的成员的访问。
根据一些实施方式,在插入点40位于成员访问运算符的右操作数的情况下(例如,如图3A所示),程序元素过滤器模块130可以得到数据结构的类型(例如,Rect,左操作数的类型,rects[i])。在该示例中,程序元素过滤器模块130可以不扫描和与使用运算符的块或范围相对应的表161有关的符号。相反,程序元素过滤器模块130可以扫描类型声明的对应程序块(例如,数据结构的字段被声明的地方)的符号表161,以便呈现相关成员(例如,“width”、“height”)作为有效、可选择的程序元素51。
本领域技术人员可以理解,本发明的实施方式可以因此提供对可以利用“代码完成”进行计算机辅助编程的当前可用的系统的改进。当前可用的系统可能由于它们对前端高级程序代码应用其搜索逻辑的事实而“盲目地”建议结构的所有成员进行完成。换言之,为了应用与本文中详述的相同的能力,当前可用系统将需要执行对前端代码的编译。相比之下,本发明的程序元素过滤器模块130可以对后端中间代码应用搜索逻辑——因为它是由结构化程序代码模型165构建和展示的,因此可以不需要任何编译,并且可以产生没有句法错误和语法错误的程序代码30。
如本领域中已知的,当前可用的编程语言可以(例如,通过将数据结构的成员声明为“公共”或“私有”)支持数据隐藏或访问控制。
本发明的实施方式可以基于这样的访问控制或隐私级别建议将程序元素51插入到程序代码30中。例如,假设作为数据结构成员的程序元素60被声明为“私有”。在这种情况下,如果插入点40位于与数据结构的声明相同的范围内(例如,在同一程序块中),则元素过滤器模块130可以仅包括所述程序元素60作为建议列表50中的有效程序元素51。
如本领域中已知的,当前可用的面向对象的编程语言可以使用封装数据(通常称为“属性”)以及功能(通常称为“方法”)的对象。这样的对象可以属于可以继承另一类(通常称为“父”类或“超类”)的接口的对象类。例如,限定“狗”的类可以是限定“动物”的父类的子类,并且可以继承父“动物”类的一个或更多个成员。
因此,并且根据一些实施方式,在插入点40位于与对象(例如,类“狗”的实例)的成员访问运算符(例如,点(.)运算符)相邻的位置处的情况下,元素过滤器模块130可以扫描作为该对象的类的成员(例如,“狗”的成员)的程序元素60、以及作为其父类或超类的成员(例如,“动物”的成员)的程序元素60,以将它们包括在列表50中。
附加地或可替选地,当检查类型兼容性时,元素过滤器模块130可以允许将子类(例如,“狗”)的对象的实例化插入在需要其超类(例如,“动物”)的任何地方。
如本领域中已知的,在一些编程语言中,可以通过采用协议或特征来实现类型兼容性。例如,可以使用协议来声明特定的复合类型(例如,“狗”类)可以包括某些成员,而不管该类型继承自哪种类型(例如,“动物”类)。根据本发明的一些实施方式,在需要特定类型以符合所述协议的任何地方,元素过滤器模块130可以仅包括根据所使用的编程语言的(例如,规则的数据结构131中的)规则可以被视为具有该相同类型的可用符号60作为列表50的有效、可选择的程序元素51。
如本文中详述的,本发明的实施方式可以使得用户能够通过从有效程序元素的列表50中选择程序元素51来将程序元素51插入到程序代码30中。所述列表50可以由程序元素过滤器模块130产生。
元素插入模块140可以接收选定的程序元素51以及将其插入到程序代码30中可能需要的所有信息。该信息可以包括选定的程序元素51的类型、以及在程序中(例如,中间级程序代码30B的结构化程序代码模型165内的)插入它的位置(例如,插入点40的位置)。程序元素51还可以包括对可能已经驻留在程序代码30中的一个或更多个其他程序元素51(例如,变量、类型、函数、代码块等)的引用。
根据一些实施方式,元素插入模块140可以创建可以包括或对应于插入元素51的主体的新代码块。例如,在插入的程序元素51是需要伴随程序块的语句的情况下(如在函数声明、循环语句、条件语句等的情况下),元素插入模块140可以创建新的、对应的代码块,并且可以将该块插入到程序代码30中。
根据一些实施方式,元素插入模块140可以被配置成插入可以与(例如,由用户)选择进行插入的至少一个程序元素51相对应的一个或更多个占位符程序元素51。例如,这种占位符程序元素51可以描述或表示属于选定的程序元素51的一个或更多个子元素。术语“占位符”可以在该上下文中用于指示可能不表示程序代码30的可执行元素的特殊种类的程序元素51。例如,可以插入占位符程序元素51来代替需要但用户尚未提供的元素。根据一些实施方式,在程序可以被执行之前,可能需要用户用来自列表50的有效程序元素51替换占位符程序元素51。根据一些实施方式,占位符程序元素51可以(例如,由程序代码显示模块110在屏幕上)以特殊的外观(例如,预定义的字体、颜色、样式和/或大小)显示以指示它不是程序代码30的可执行部分。
例如,假设用户已选择在函数的主体内插入作为“return”语句的程序元素51并且函数被声明为使得返回值。在这种情况下,元素插入模块140可以插入可以是或者可以包括值占位符元素的程序元素51。
在另一示例中,在选定的程序元素51包括对声明的符号61的引用例如函数调用的情况下,元素插入模块140可以与程序存储模块160协作,并且查看与被调用函数的声明相对应的块表161。元素插入模块140随后可以在位置插入点40处将作为对所述函数的引用(“调用”)的第一程序元素51插入到程序代码30中,并且还在其中插入占位符程序元素51,该占位符程序元素51可以包括被调用函数所期望的自变量的值占位符(例如,默认值、空格等)。
本发明的实施方式可以使得用户能够在一个或更多个程序元素51的至少一个子元素已经存在于程序代码30中时插入一个或更多个程序元素51。在这种情况下,元素插入模块140可以适于修改代码模型165的结构,以反映这种更改。
例如,用户可以选择在布尔值之前插入逻辑否定运算符(!)。在这种情况下,布尔值可以被视为否定运算符的操作数。因此,元素插入模块140可以被配置成修改代码模型165的结构,使得否定运算符(!)程序元素可以代替布尔值元素,并且布尔值元素可以在代码模型165的分层中向下移动以成为运算符元素的子元素。
在另一示例中,用户可以选择在数值之后插入数学乘法运算符(*)。在这种情况下,数值元素可以被视为乘法运算符的左操作数。元素插入模块140可以被配置成通过插入占位符程序元素51以指示乘法运算符的右侧操作数的所需插入来修改代码模型165的结构。
根据一些实施方式,在插入元素之后,元素插入模块140可以提示位置标记模块120在新插入的程序元素之后放置插入点40,以方便用户插入其他元素。
附加地或可替选地,如果插入的程序元素51是或者包括占位符程序元素51,则元素插入模块140可以提示位置标记模块120突出显示该占位符,以便(例如,向用户)指示占位符程序元素51需要修改(例如,将默认字段替换为可执行值)。
如本文中详述的,本发明的实施方式可以允许用户仅通过从有效用于特定插入点40的建议的程序元素51的列表50中选择插入一个或更多个程序元素51来创建程序代码30。在类似的方法中,本发明的实施方式可以使得用户能够从对程序代码30建议的有效动作81的列表80中选择一个或更多个编辑动作81。建议的有效动作81可以被视为有效,在某种意义上,本发明的实施方式可以根据相关编程语言的规则的数据结构131和/或中间级程序代码30B的结构化程序代码模型165仅建议适用的编辑动作81。因此,本发明的实施方式可以限制用户的动作,以便避免程序代码30中的错误(例如,句法错误和/或语法错误)。
根据本发明的一些实施方式,用户可以标记在程序代码30A中现有程序元素51的位置40',例如以便突出显示至少一个程序元素51。例如,程序代码30中的至少一个现有程序元素51可以通过插入指示符41被突出显示(例如,具有不同的颜色)。位置标记模块120可以随后产生如上面详述的指示或涉及至少一个突出显示的程序元素51的至少一个插入点数据元素40(例如,40A、40B)。
然后,辅助模块180可以从位置标记模块120接收指示程序代码30中的至少一个特定程序元素51的至少一个插入位置40。辅助模块180可以基于至少一个指示的程序元素51的类型产生有效用于在所述插入位置40处的应用的一个或更多个可选择的动作81的列表80。例如,在指示的程序元素51是函数的声明中的符号名称的情况下,所保留的列表80可以包括对程序元素51(例如,声明的函数的符号名称)进行重新命名的可选择的或可选的动作。相比之下,在指示的程序元素51是例如包括保留关键字或程序块的语句的情况下,所保留的列表80可能不包括对程序元素51进行重新命名的可选择的动作。随后,如本文中详述的,辅助模块180可以从用户接收对可选择的动作的列表80中的至少一个可选择的动作81的选择,并且可以根据编程语言的(例如,规则的数据结构131内的)一个或更多个规则在所述插入位置40处对程序代码30应用至少一个选定的动作81,如在本文中的示例中详述的。本领域技术人员可以理解,规则列表131以及因此根据这些规则的动作81的后续应用可能不是详尽的。因此,本文中提供的示例应当被视为实现方式的非限制性示例。对程序代码30应用选定的动作81的其他形式也可以是可能的。
根据一些实施方式,可选择的动作的列表可以包括:例如设置和/或更改程序代码30中的至少一个指示的程序元素51的值,对指示的程序元素51的符号进行命名,更改程序代码30中的至少一个指示的程序元素51的符号(例如,名称),从程序代码30中省略或删除至少一个指示的程序元素51,复制程序代码3中的至少一个指示的程序元素51,移动程序代码30中的至少一个指示的程序元素51等。
根据一些实施方式,列表80可以(例如,在屏幕上)被呈现为上下文菜单(例如,在鼠标右键点击之后),使得能够选择一个或更多个动作81。术语“上下文”在本文中可以指示列表80可以根据对应插入点40的位置而不同地产生和/或呈现。例如,在第一条件下,插入点40可以与第一突出显示的程序元素51相关,并且列表80可以包括可能有效用于第一程序元素51上的实现的一个或更多个动作81,以及在第二条件下,插入点40可以与第二突出显示的程序元素51相关,并且列表80可以包括可能有效用于第二程序元素51上的实现的一个或更多个动作81。
根据一些实施方式,辅助模块180可以(例如,经由图1的输入设备7)从用户接收对有效的可选择的动作列表80的至少一个动作81的选择,并且可以在所述插入位置处对程序代码30应用所述至少一个动作。
根据本发明的一些实施方式,至少一个程序元素51可以限定或描述文字值,例如字符串(例如,“hello world”)、数字(例如,42)等。本发明的实施方式可以使得用户能够例如通过键入文字值和/或通过从预定义的值集合中选择文字值来(例如,经由图1的输入设备7)输入这样的文字值。
例如,当作为文字值元素的程序元素51被插入到程序中时,它最初可以被分配默认值,例如空字符串(“”)或空(0)值。根据一些实施方式,程序代码显示模块110可以适于(例如,通过呈现具有输入文本字段的对话框)提示用户输入值,以便将所述值插入到程序代码30中。
在另一示例中,用户可以标记在程序代码30A中现有程序元素51的一个或更多个位置40',例如以便突出显示相关程序元素51。如本文中详述的(例如,关于辅助模块180),辅助模块180可以适于随后呈现可以对一个或更多个突出显示的程序元素51应用的动作80的列表81,并且可以使得用户能够例如通过双击选定的选项来从列表中选择动作(例如,修改动作)。
根据一些实施方式,辅助模块可以适于在可以在程序中设置用户输入的值之前检查输入的值是否符合值类型的约束。例如,“无符号整数”类型的值仅可以包含0至232-l范围内的数字,没有正负符号并且没有小数点。因此,辅助模块180可以拒绝或阻止具有超过这种约束的值的程序元素51的插入。
在另一示例中,在某些编程语言中,字符串值可能受到各种约束。例如,字符串值的长度可能受到限制,不能存储特定字符等。在这种情况下,辅助模块180可以拒绝或阻止超过这种约束的程序元素51的插入。
在另一示例中,某些编程语言可以存储可以使用通常被称为“转义序列”的内容来显示的特殊字符。例如,如果字符串包含换行字符,则可以使用序列“\n”来显示它。为了维护代码兼容性,反向转化模块170可以在在程序代码30A中创建字符串文字元素的文本表示时使用这样的转义序列。
如本领域中已知的,诸如变量、函数或类型的包含符号声明的程序元素需要包括所声明的符号的名称。此外,大多数语言都对符号名称施加了限制。例如,符号名称可能需要以字母开头,不能包含空格或特殊字符,不能复制编程语言的关键字等。
根据本发明的一些实施方式,辅助模块180可以使得用户能够键入符号名称(例如,新的符号名称),并且可以在在程序代码30中设置新接收的名称之前根据编程语言的(例如,规则的数据结构131的)一个或更多个规则来验证新接收的(例如,键入的)符号名称,以确保符号名称符合所述规则。随后,辅助模块180可以基于所述验证(例如,如果验证成功)将新接收的符号名称插入到程序代码中。
根据一些实施方式,辅助模块180可以执行用于对程序元素51符号进行命名和/或重新命名的一种或更多种类型的验证,包括例如验证新接收的符号名称以避免程序代码中的歧义的情况;验证新接收的符号名称以避免使用保留的关键字;以及验证新接收的符号名称以避免使用非法符号,如本文中详述的。
本领域技术人员可以理解,本发明的实施方式可以包括对用于计算机辅助编程的当前可用系统的改进,这是因为插入的程序元素51符号名称可以被引入到中间的程序代码30B的结构化程序代码模型165中,因此可能不需要解析。因此,与符号名称有关的编程语言限制可能会被绕过,或者可能完全不会应用。
然而,为了维护程序代码30A的代码兼容性(例如,以便使用专有编译器在第三方系统上执行程序代码30A)并且避免混淆,本发明的实施方式可以包括辅助模块180对所述限制的断言。
根据一些实施方式,在用户输入(例如,键入、选择等)第一符号名称的情况下,辅助模块180可以被配置成确保该第一名称与已经存在于结构化程序代码模型165的同一代码块中的第二符号名称不冲突(例如,与第二符号名称相同)。
根据一些实施方式,用户可以(例如,经由动作列表80)选择对程序代码30中已经包括或声明的第一程序元素51的符号名称进行重新命名。在这种情况下,辅助模块180可以被配置成验证或检查新输入的符号名称以避免歧义的情况,并且基于所述验证将重新命名的符号插入到程序代码30B中。
例如,辅助模块180可以验证程序代码30的程序元素51不涉及驻留在它们各自程序范围内的第二程序元素51,其中第二程序元素51的符号名称与新输入的符号名称相同。
例如,如果(a)用户选择将称为“counter”的全局变量重新命名为“index”;(b)具有符号名称“counter”的程序元素51已经被类的方法访问;以及(c)该类还包括名为“index”的属性,则辅助模块180可以阻止重新命名,以避免歧义的情况(例如,避免其中可能不清楚符号名称“index”是指全局变量还是类属性的情况)。
根据一些实施方式,在符号名称的重新命名之后,反向转化模块170可以刷新程序代码30A的高级文本表示。例如,转化模块170可以刷新引用重新命名的符号的一个或更多个(例如,每个)程序元素51的高级表示,以反映程序元素51符号名称的重新命名。
如本领域中已知的,当前可用的编程方法可以使得程序员能够以源代码的形式键入程序,并且也删除键入的源代码的部分,其中文本(例如,单个字符)的错误删除可能会破坏程序。本发明的实施方式可以包括通过由辅助模块180管理删除(和任何其他编辑动作)同时确保程序的正确性对这种当前可用的编程方法的改进。
根据一些实施方式,当插入点40指示至少一个特定程序元素51时(例如,当程序代码30中的现有程序元素51被插入指示符41突出显示时),用户可以选择按适合所用平台的用户接口的方式经由动作的列表80的上下文菜单或者通过按钮或键(例如退格)将其删除。例如,用户可以选择可选择的动作的列表80的以下动作81,动作81包括从程序代码中删除由插入点40指示的程序元素51。可替选地,用户可以在显示插入点40时点击退格键,可以(例如,通过插入指示符41)突出显示插入点之前的元素,并且用户可以通过再次按下退格将其删除。
根据一些实施方式,辅助模块180可以通过以下操作应用至少一个选定的删除动作:(a)根据编程语言的一个或更多个规则验证对指示的程序元素的删除,如本文中详述的;以及(b)基于所述验证(例如,如果验证成功)从程序代码30中删除或省略指示的程序元素51。
根据一些实施方式,验证第一、指示的程序元素的删除可以包括确定第一程序元素是否在分层结构中包括至少一个第二程序元素,以及从程序代码30中删除第一程序元素51还可以包括删除至少一个第二程序元素。
例如,用户可以突出显示(例如,在其在结构化程序代码模型165中的分层位置)包含一个或更多个第二程序元素51(例如,结构化程序代码模型165内的子元素)的第一程序元素51,并且可以选择删除第一程序元素51。在这种情况下,辅助模块180可以被配置成从程序代码30B中删除或省略第一程序元素51以及其子元素中的一个或更多个(例如,所有)例如一个或更多个第二程序元素51。例如,如果用户选择删除“if”语句,则辅助模块180可以被配置成删除相应的条件元素、主体块和“if”语句包含的任何“else”语句。
如本领域中已知的,第一程序元素可能需要包括第二程序元素。例如,“while”语句需要包括条件元素。根据一些实施方式,辅助模块180可以被配置成通过检查第一程序元素51(例如,被用户标记以删除)是否确实被包含第一程序元素51的第二程序元素需要来验证第一程序元素的删除。例如,辅助模块180可以被配置成检查(a)第二程序元素51是否是分层结构化程序代码模型165中的第一程序元素51的父,以及(b)第二程序元素51根据规则的数据结构131是否需要第一程序元素51(例如,如在上面的“while”语句的示例中)。在这种情况下,辅助模块180可以用占位符替换第一数据元素,并且可以提示用户在插入点40的位置处添加所需的程序元素。根据一些实施方式,可以防止用户执行程序代码30直到他们用所需的程序元素(例如,条件表达式)替换占位符。可以理解,可以防止用户以没有如上所述的辅助模块180验证过程的任何方式从程序代码30中删除第一程序元素51。
根据一些实施方式,辅助模块180可以被配置成通过检查第一程序元素51(例如,被用户标记以删除)是否被程序代码30中的一个或更多个第二程序元素51引用来验证第一程序元素的删除。例如,如果存在作为程序代码30B中调用或引用该函数的语句的至少一个第二程序元素51(超出声明的函数的主体的范围),则辅助模块180可能不能使得用户删除作为函数声明的第一程序元素51。可以理解,可以防止用户以没有如上所述的辅助模块180验证过程的任何方式从程序代码30中删除第一程序元素51。
如本领域中已知的,在一些情况下程序元素可以交织在一起。例如,函数可能被声明为返回整数类型的值,并且可能包含具有合适整数值的一个或更多个“return”语句。在这种情况下,用户不应当从函数声明中删除返回类型(或者,在一些语言中,用“void”替换返回类型),这是因为“return”语句将变得无效。他们也不应当从“return”语句中删除值,这是因为所述值是函数声明所需要的。另一这样的示例是以下情况:当程序中存在调用或引用该函数并且通过这样做将值传递到自变量的元素时,用户不应当删除函数声明中的该自变量。
根据本发明的一些实施方式,为了解决这种情况,辅助模块180可以被配置成通过鉴于编程语言的(例如,规则的数据结构131的)一个或更多个规则检查第一程序元素51与一个或更多个第二、交织的程序元素51之间的这种交织关系来验证第一程序元素51(例如,被标记以删除)的删除,并且相应地对第一程序元素51和一个或更多个第二、交织的程序元素51应用删除动作。换言之,辅助模块180可以被配置成:标识与第一程序元素51具有交织关系的一个或更多个第二程序元素51;以及鉴于编程语言的(例如,规则的数据结构131的)一个或更多个规则分析第一、指示的程序元素51与一个或更多个第二程序元素51之间的交织关系。辅助模块180可以根据分析对第一程序元素51上并且还对一个或更多个第二、交织的程序元素51应用删除动作。
关于“return”语句的示例,如果用户选择删除作为函数的返回类型的程序元素51,则辅助模块180可以被配置成删除一个或更多个第二、交织的程序元素51,例如“return”语句的值。
关于函数自变量的示例,如果用户选择删除作为函数自变量的第一程序元素51,则辅助模块180可以被配置成从程序代码30中的调用该函数的所有程序元素51中删除一个或更多个第二、交织的程序元素51,例如与删除的函数的自变量相对应的值。附加地,辅助模块180可以产生通知消息,提醒用户该删除动作。
根据本发明的一些实施方式,辅助模块180可以使得用户能够方便地将现有程序元素51在程序代码30内从一个地方移动到另一地方。该过程将通过突出显示程序代码30中的至少一个程序元素51(例如,一系列程序元素51)开始。突出显示一系列元素的方法可能取决于用户接口,例如在键盘和鼠标接口上的shift点击、或者在触摸屏接口上的长按和拖动。程序代码30中的至少一个现有程序元素51可以被插入指示符41突出显示(例如,具有不同的颜色)。位置标记模块120可以随后产生如上面详述的指示或涉及至少一个突出显示的程序元素51的至少一个插入点数据元素40(例如,40A、40B)。
一旦一个或更多个程序元素51被突出显示,辅助模块180就可以使得用户能够将它们拖放到程序代码30中的另一位置。可替选地,辅助模块180可以使得用户能够使用剪切动作,选择另一位置,然后使用粘贴动作来移动一个或更多个程序元素51。可以理解,如果用户剪切必要的元素但从不将它们粘贴回去,则程序可能会损坏。因此,根据一些实施方式,辅助模块180在剪切动作期间可以不移除元素,而是(例如,通过特殊的文本样式)替代地标记它们,并且仅在执行粘贴动作之后将它们移动到另一位置。
根据一些实施方式,辅助模块180可以被配置成验证移动动作,并且如果验证成功则仅允许或授权移动程序元素51。对移动动作的验证可以包括例如:(a)确定移动的程序元素51在代码模型165中的其旧位置不被需要(例如,以与上面关于授权删除动作讨论的类似的方式);(b)确定移动的程序元素51有效用于在代码模型165中其新位置的插入(例如,以与上面关于程序元素过滤器模块130讨论的类似的方式,当产生对在标记的程序位置的插入有效的元素的列表时);(c)在程序元素51是符号声明的情况下,确定该符号可以在其新的位置被声明(例如,添加到块的符号表161),而不与现有符号产生冲突;以及(d)在程序元素51被程序中的一个或更多个第二程序元素51引用的情况下,确定新位置仍然在一个或更多个第二、引用程序元素51中的每一个的范围内。根据特定实现方式,对移动动作的验证的其他元素也可以是可能的。
根据一些实施方式,一旦满足验证条件(例如,如上面详述的),辅助模块180就可以移动相关程序元素51(例如,如由用户的剪切和粘贴动作所指示的)。随后,辅助模块180可以与程序存储模块160协作以根据一个或更多个程序元素51的移动来更新结构化程序代码模型165(例如,其中的相关引用和符号表)。
现在参照图4B,图4B是描绘根据本发明的一些实施方式的用于计算机辅助计算机编程的系统100的高级框图。通过与图4A进行比较,可以观察到系统100可以包括适于修改如本文中详述的程序代码30B的交叉转化模块190。附加地或可替选地,系统100可以包括或者可以执行虚拟计算设备195或如本领域中通常所称的“虚拟机”。附加地或可替选地,系统100可以不包括模块190和195中的任一个(例如,如图4A中所描绘的),但是可以与可以例如在远程计算设备(例如图1的元素1)上执行的模块190和195中的至少一个相关联或(例如,经由诸如互联网的计算机网络)通信地连接至模块190和195中的至少一个。
如本文中详述的,程序代码30B以中间级语言存储(例如,在程序存储模块160中)。因此可以理解,程序代码30可以被导出,并且由诸如如图1的元素1的计算设备的执行平台执行。可替选地,程序代码30B可以在诸如虚拟计算机器(例如,元素195)的执行平台上运行或执行,而不需要源代码的任何编译或解析。
根据一些实施方式,执行平台(例如,虚拟计算机器195)可以被配置成忽略用户级信息,例如符号名称、注释、范围和/或访问限制。
根据一些实施方式,可以使用静态类型语言,并且执行平台(例如,虚拟机195)因此可能不需要在运行时执行类型检查。执行平台可以被配置成通过为每个语句调用适当的本机代码块来一个接一个地执行程序代码30B的语句。
如本领域的技术人员已知的,开发虚拟机可能是劳动密集型过程,其可能涉及复杂的任务,例如存储器管理、性能优化和运行时错误处理。根据本发明的一些实施方式,系统100可以包括适于将在构建(例如,存储在程序存储模块160中的)程序时使用的唯一中间级语言30B转化成另一种已知的中间级语言30C的交叉转化模块190,从而绕过了开发专用虚拟机195的困难。
本领域中的技术人员可以理解,通过交叉转化模块190进行的程序代码30B到程序代码30C的交叉转化应当是直接的并且没有错误,并且可以允许程序代码30C由容易获得的虚拟机执行。例如,中间级程序代码30B可以被转化成Java字节码30C,并且因此可以由Java虚拟机195执行。
使用虚拟机来执行程序具有优势,但在性能上也承担了显著的成本。如果需要最佳性能,则中级程序代码30B可以(例如,由模块190)编译成机器代码30D,并且可以被本地执行。可替选地,机器代码30D可以适于被导出到远程计算设备,并且可以被导出以在该远程计算设备上执行。
本领域中的技术人员可以理解,程序代码30B到程序代码30D的编译可能不涉及前端编译、解析、分析源代码,因此可能不产生构建时错误。换言之,程序代码30B到程序代码30D的编译可能仅需要后端编译器将程序代码30B转化成可执行的、特定于架构的机器代码30D(可能在由中端编译器优化之后)。
此外,代替开发专用的后端编译器,本发明的实施方式可以将(例如,在如本文中详述的本发明的方法中使用的)中间级代码30B转化成已经存在后端编译器(例如,第三方后端编译器)的第二中间级语言30C。
实际示例可以包括使用LLVM,一组免费且广泛使用的编译器。中间级程序代码30B可以被转化成第二程序代码30C,采用称为LLVM IR(IR代表中间表示)的语言。随后,程序代码30C可以由LLVM优化器进行优化,并且使用各种可用的LLVM后端编译器将程序代码30C编译成用于特定架构的机器代码30D。
现在参照图5,图5是描绘根据本发明的一些实施方式的计算机辅助编程的方法的流程图。根据一些实施方式,图5中描绘的方法可以由(例如,如关于图4AA和图4AB详述的)系统100实现,如本文中详述的。
在步骤S1005中,可以在计算机存储器上存储程序代码30。
在步骤S1010中,可以(例如,经由图1的输出设备8,例如监视器)向用户显示程序代码30。
在步骤S1015中,可以(例如,经由图1的输入设备7,例如鼠标)从用户接收所显示的程序代码中的位置的标记。
在步骤S1020中,可以根据编程语言的一个或更多个规则131产生有效用于在所述标记位置40A处插入到所述程序代码中的可选择的程序元素51的列表50。
在步骤S1025中,可以从用户接收对来自可选择的程序元素50的列表的至少一个程序元素51的选择。
在步骤S1030中,可以在与从用户接收的标记位置40相对应的位置40B处将至少一个选定的程序元素51插入到计算机存储器(例如,图1的元素4)中的程序代码30中。
在步骤S1035中,本发明的实施方式可以防止用户以没有对来自可选择的有效程序元素的列表50的至少一个可选择的程序元素51进行选择的任何方式将程序元素51插入到存储的程序代码30B中,如本文中详述的。可以理解,如图5中的箭头所示,本发明的实施方式可以不将步骤S1035限制到任何特定时间点。换言之,本发明的实施方式可以(例如,贯穿计算机辅助编程的过程)连续地防止用户通过绕过对来自建议的元素列表的有效程序元素的选择来将程序元素插入到存储的程序代码中。
如本文中详述的,本发明的实施方式提供了用于计算机辅助产生无错误程序代码的实用技术应用。也如贯穿本文件详述的,并且本发明的实施方式包括对计算机编程的当前可用系统和方法的大量改进。
除非明确说明,否则本文中描述的方法实施方式不限于特定顺序或次序。此外,本文中描述的所有式意指仅用作示例,并且可以使用其他或不同的式。附加地,所描述的方法实施方式中的一些或其元素可以在同一时间点发生或执行。
虽然已经在本文中示出和描述了本发明的某些特征,但是本领域技术人员可以想到许多修改、替换、变化和等同内容。因此,应理解,所附权利要求旨在涵盖落入本发明的真正精神内的所有这种修改和变化。
已经提出了各种实施方式。这些实施方式中的每一个当然可以包括来自所提出的其他实施方式的特征,并且未具体描述的实施方式可以包括本文中描述的各种特征。
Claims (33)
1.一种计算机辅助编程的方法,所述方法包括:
在计算机存储器上存储程序代码;
向用户显示所述程序代码;
从所述用户接收所显示的程序代码中的位置的标记;
根据编程语言的一个或更多个规则,产生有效用于在所述标记位置处插入到所述程序代码中的可选择的程序元素的列表;
从所述用户接收对来自所述可选择的程序元素的列表的至少一个程序元素的选择;
在与从所述用户接收到的所述标记位置相对应的位置处,将至少一个选定的程序元素插入到所述计算机存储器中的所述程序代码中;以及
防止用户以没有对来自所述可选择的有效程序元素的列表的至少一个可选择的程序元素进行选择的任何方式将程序元素插入到存储的程序代码中。
2.根据权利要求1所述的方法,还包括:基于存储在所述计算机存储器中的程序代码更新程序代码的显示,以包括至少一个插入的程序元素。
3.根据权利要求1和2中任一项所述的方法,其中,存储在所述计算机存储器上的程序代码是第一格式,包括结构化程序代码模型,并且其中,显示给所述用户的程序代码是第二格式,包括所述编程语言的高级、人类可理解的文本。
4.根据权利要求1至3中任一项所述的方法,其中,将所述至少一个选定的程序元素插入到所述第一格式的存储的程序代码中,并且其中,所述方法还包括:
标识存储的程序代码的更改;以及
将所述存储的程序代码的包括所述更改的至少一部分从所述第一格式转化成所述第二格式。
5.根据权利要求1至4中任一项所述的方法,其中,产生所述可选择的有效程序元素的列表包括:
遍历可用程序元素的列表;
对于所述可用程序元素的列表中的一个或更多个程序元素,遍历所述编程语言的规则;以及
确定相关程序元素是否符合所述规则,并由此是否有效用于在所述插入点的位置处的插入。
6.根据权利要求1至5中任一项所述的方法,其中,从所述用户接收对至少一个程序元素的选择包括:
在列表中累积对在所述插入点处的插入有效的一个或更多个程序元素;
根据程序元素的至少一个类别对所述程序元素的列表进行分类;
显示所述程序元素的列表;以及
从所述用户接收对来自所显示的列表的至少一个程序元素的选择。
7.一种计算机辅助编程的方法,所述方法包括:
向用户显示程序代码;
从所述用户获得所述显示的程序代码中的插入位置;
根据编程语言的一个或更多个规则,产生有效用于在所述插入位置处的插入的可选择的程序元素的列表;
从所述用户接收对来自所述可选择的程序元素的列表的至少一个程序元素的选择;以及
仅基于接收到的对程序元素的选择,在所述插入位置处将至少一个选定的程序元素插入到所述程序代码中。
8.根据权利要求7所述的方法,其中,所述程序代码作为编程语言的高级、人类可理解的文本显示给所述用户。
9.根据权利要求7和8中任一项所述的方法,其中,所述可选择的程序元素作为编程语言的高级、人类可理解的文本呈现给所述用户。
10.根据权利要求7至9中任一项所述的方法,还包括防止用户以没有对来自所述可选择的程序元素的列表的至少一个可选择的程序元素进行选择的任何方式将程序元素插入到所述程序代码中。
11.根据权利要求7至10中任一项所述的方法,其中,所述插入位置指示所述程序代码中的至少一个特定程序元素,并且其中所述方法还包括:
基于特定程序元素的类型,产生有效用于在所述插入位置处的应用的可选择的动作的列表;
从所述用户接收对所述可选择的动作的列表中的至少一个动作的选择;以及
根据所述编程语言的一个或更多个规则,在所述插入位置处对所述程序代码应用至少一个选定的动作。
12.根据权利要求7至11中任一项所述的方法,其中,所述可选择的动作的列表选自包括以下的列表:改变至少一个指示的程序元素的值;命名所述至少一个指示的程序元素的符号;改变所述至少一个指示的程序元素的符号名称;从所述程序代码中删除所述至少一个指示的程序元素;复制所述至少一个指示的程序元素;以及移动所述程序代码中的所述至少一个指示的程序元素。
13.根据权利要求7至12中任一项所述的方法,其中,选定的至少一个动作包括命名所指示的程序元素的符号,并且其中,对所述程序代码应用所述至少一个选定的动作包括:
从用户接收所指示的程序元素的新名称;
根据所述编程语言的一个或更多个规则验证新接收的符号名称;以及
基于所述验证将新接收的符号名称插入到所述程序代码中。
14.根据权利要求7至13中任一项所述的方法,其中,验证新接收的符号名称包括以下中至少一项:
验证新接收的符号名称以避免所述程序代码中的歧义的情况;
验证新接收的符号名称以避免使用保留的关键字;
验证新接收的符号名称以避免使用非法符号。
15.根据权利要求7至14中任一项所述的方法,其中,选定的至少一个动作包括从所述程序代码中删除指示的程序元素,并且其中,应用所述至少一个选定的动作包括:
根据所述编程语言的一个或更多个规则验证指示的程序元素的删除;以及
基于所述验证从所述程序代码中省略所指示的程序元素。
16.根据权利要求7至15中任一项所述的方法,其中,验证第一、指示的程序元素的删除包括:确定所述第一程序元素是否包括包含至少一个第二程序元素的分层结构,并且其中,从所述程序代码中删除所述第一程序元素还包括:从所述程序代码中删除所述至少一个第二程序元素。
17.根据权利要求7至16中任一项所述的方法,其中,验证第一、指示的程序元素的删除包括:
确定所述第一程序元素是否包含在第二程序元素的分层结构内;以及
根据所述编程语言的一个或更多个规则确定所述第二程序元素是否需要所述第一程序元素;
并且其中,从所述程序代码中删除所述第一程序元素还包括:
用占位符替换所述第一程序元素;以及
提示所述用户在所述占位符的位置处添加程序元素。
18.根据权利要求7至17中任一项所述的方法,其中,验证第一、指示的程序元素的删除包括:确定所述第一程序元素是否未被所述程序代码中的一个或更多个第二程序元素引用。
19.根据权利要求7至18中任一项所述的方法,其中,验证第一、指示的程序元素的删除包括:
标识与所述第一程序元素具有交织关系的一个或更多个第二程序元素;以及
鉴于所述编程语言的一个或更多个规则来分析所述第一、指示的程序元素与所述一个或更多个第二程序元素之间的交织关系;
并且其中,对所述第一程序元素应用删除动作还包括根据分析对一个或更多个第二、交织的程序元素应用删除动作。
20.根据权利要求7至19中任一项所述的方法,其中,选定的至少一个动作包括移动所述程序代码中的至少一个指示的程序元素,并且其中,应用至少一个选定的动作包括:
根据所述编程语言的一个或更多个规则验证所述至少一个指示的程序元素的移动;以及
基于所述验证移动所述程序代码中的所述至少一个指示的程序元素。
21.根据权利要求7至20中任一项所述的方法,其中,对所述至少一个指示的程序元素的移动的验证包括以下中至少一项:确定移动的程序元素在所述程序代码中的其旧位置不被需要;确定移动的程序元素51有效用于在所述程序代码中其新位置处的插入;在至少一个程序元素是符号声明的情况下,确定符号能够在所述新位置被声明,而不与现有符号产生冲突;以及在所述程序元素被所述程序代码中的一个或更多个第二程序元素引用的情况下,确定所述新位置在所述一个或更多个第二程序元素中的每一个的范围内。
22.一种用于计算机辅助计算机编程的系统,所述系统包括:非暂态存储器设备,其中,存储有指令代码的模块;以及与所述存储器设备相关联的至少一个处理器,并且所述至少一个处理器被配置成执行所述指令代码的模块,其中,在执行所述指令代码的模块时,所述至少一个处理器被配置成:
向用户显示程序代码;
从所述用户获得在所述显示的程序代码中的插入位置;
根据编程语言的一个或更多个规则,产生有效用于在所述插入位置处的插入的可选择的程序元素的列表;
从所述用户接收对来自所述可选择的程序元素的列表的至少一个程序元素的选择;以及
仅基于接收到的对程序元素的选择,在所述插入位置处将至少一个选定的程序元素插入到所述程序代码中。
23.一种计算机辅助编程的方法,包括:
在计算机存储器上维护程序代码的第一表示;
经由用户接口获得对至少一个文本程序元素以及所述程序代码中的对应插入位置的选择;
更新所述第一表示,以在所述插入位置处包括选定的至少一个文本程序元素;
转化所述第一表示以产生所述程序代码的第二表示;以及
在用户接口上显示所述第二表示。
24.根据权利要求23所述的方法,其中,所述第一表示被格式化为中间级程序代码表示,并且其中,所述表示被格式化为文本的、高级、用户可理解的编程语言表示。
25.根据权利要求23和24中任一项所述的方法,其中,获得对所述至少一个程序元素和对应插入位置的选择包括:
经由所述用户接口接收对用户级编程语言表示中的第一插入位置的选择;
在所述中间级程序代码表示中标识对应于所述第一插入位置的第二插入位置;
根据与编程语言有关的规则,经由所述用户接口呈现有效用于在所述第二插入位置处的插入的可选择的程序元素的列表;以及
经由所述用户接口接收对来自所述可选择的、有效程序元素的列表的所述至少一个文本程序元素的选择。
26.根据权利要求23至25中任一项所述的方法,其中,所述可选择的程序元素作为编程语言的高级、人类可理解的文本呈现给所述用户。
27.根据权利要求23至26中任一项所述的方法,还包括在计算设备上执行所述中间级程序代码表示而不需要源代码的编译或解析。
28.根据权利要求23至27中任一项所述的方法,其中,将所述中间级程序代码格式的所述第一表示转化成所述高级程序代码格式的所述第二表示还包括创建位置表,所述位置表将用户标记的位置与所述中间级代码格式的所述第一表示中的对应程序元素相关联,并且其中,标识与所述第一插入位置相对应的所述第二插入位置基于所述位置表完成。
29.根据权利要求23至28中任一项所述的方法,其中,将中间级程序代码结构化为分层结构化程序代码模型,所述分层结构化程序代码模型表示所述程序代码的分层结构。
30.根据权利要求23至29中任一项所述的方法,还包括根据所述分层结构化程序代码模型确定一个或更多个程序元素的上下文。
31.根据权利要求23至30中任一项所述的方法,还包括根据所述分层结构化程序代码模型确定所述程序代码中的程序元素的一个或更多个符号的范围。
32.根据权利要求23至31中任一项所述的方法,还包括:
对于引用所述程序代码的第二程序元素的所述程序代码的每个第一程序元素,在所述分层结构化程序代码模型中存储对所述第二程序元素的引用;以及
经由所述引用访问所述第二程序元素。
33.根据权利要求23至32中任一项所述的方法,还包括:维护一个或更多个符号范围表;限定所述程序代码内的每个程序元素的范围;以及使用所述一个或更多个符号范围表来检测所述程序代码内的程序元素之间的冲突。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962845902P | 2019-05-10 | 2019-05-10 | |
US62/845,902 | 2019-05-10 | ||
PCT/IL2020/050503 WO2020230119A1 (en) | 2019-05-10 | 2020-05-07 | System and method of computer-assisted computer programming |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113811849A true CN113811849A (zh) | 2021-12-17 |
Family
ID=73289511
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080034378.7A Pending CN113811849A (zh) | 2019-05-10 | 2020-05-07 | 计算机辅助计算机编程的系统和方法 |
Country Status (10)
Country | Link |
---|---|
US (1) | US20220222065A1 (zh) |
EP (1) | EP3966679A1 (zh) |
JP (1) | JP2022531515A (zh) |
KR (1) | KR20220003106A (zh) |
CN (1) | CN113811849A (zh) |
AU (1) | AU2020273724A1 (zh) |
CA (1) | CA3134422A1 (zh) |
IL (1) | IL287701A (zh) |
SG (1) | SG11202111707QA (zh) |
WO (1) | WO2020230119A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230116149A1 (en) * | 2021-10-09 | 2023-04-13 | Microsoft Technology Licensing, Llc | Copy-paste-update edit automation |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6026233A (en) * | 1997-05-27 | 2000-02-15 | Microsoft Corporation | Method and apparatus for presenting and selecting options to modify a programming language statement |
US6314559B1 (en) * | 1997-10-02 | 2001-11-06 | Barland Software Corporation | Development system with methods for assisting a user with inputting source code |
US7240340B2 (en) * | 2002-08-12 | 2007-07-03 | Microsoft Corporation | System and method for browse information parsing without compilation |
US20090138849A1 (en) * | 2007-10-30 | 2009-05-28 | Microsoft Corporation | Enhanced Prompting in a Visual Editor |
JP2012059026A (ja) * | 2010-09-09 | 2012-03-22 | Hitachi Ltd | ソースコード変換方法およびソースコード変換プログラム |
EP3607431A4 (en) * | 2017-04-03 | 2020-12-30 | Innovation First, Inc. | MIXED MODE PROGRAMMING |
-
2020
- 2020-05-07 AU AU2020273724A patent/AU2020273724A1/en active Pending
- 2020-05-07 EP EP20805232.4A patent/EP3966679A1/en not_active Withdrawn
- 2020-05-07 KR KR1020217040120A patent/KR20220003106A/ko unknown
- 2020-05-07 CA CA3134422A patent/CA3134422A1/en active Pending
- 2020-05-07 CN CN202080034378.7A patent/CN113811849A/zh active Pending
- 2020-05-07 WO PCT/IL2020/050503 patent/WO2020230119A1/en unknown
- 2020-05-07 SG SG11202111707QA patent/SG11202111707QA/en unknown
- 2020-05-07 JP JP2022513700A patent/JP2022531515A/ja active Pending
- 2020-05-07 US US17/610,056 patent/US20220222065A1/en not_active Abandoned
-
2021
- 2021-10-31 IL IL287701A patent/IL287701A/en unknown
Also Published As
Publication number | Publication date |
---|---|
SG11202111707QA (en) | 2021-11-29 |
US20220222065A1 (en) | 2022-07-14 |
KR20220003106A (ko) | 2022-01-07 |
IL287701A (en) | 2021-12-01 |
AU2020273724A1 (en) | 2021-12-16 |
WO2020230119A1 (en) | 2020-11-19 |
EP3966679A1 (en) | 2022-03-16 |
JP2022531515A (ja) | 2022-07-06 |
CA3134422A1 (en) | 2020-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Bettini | Implementing domain-specific languages with Xtext and Xtend | |
US10025565B2 (en) | Integrated software development environments, systems, methods, and memory models | |
Ko et al. | Barista: An implementation framework for enabling new tools, interaction techniques and views in code editors | |
US5758160A (en) | Method and apparatus for building a software program using dependencies derived from software component interfaces | |
RU2419838C2 (ru) | Расширяемый xml-формат и объектная модель для данных локализации | |
Horton | Beginning JavaTM 2 | |
US7730448B2 (en) | Layered type systems | |
US7865870B2 (en) | Automatic content completion of valid values for method argument variables | |
Edwards | Subtext: uncovering the simplicity of programming | |
EP2435907A1 (en) | Software development tool | |
Flanagan | JavaScript Pocket Reference: Activate Your Web Pages | |
Kopetzki et al. | Towards language-to-language transformation | |
CN113811849A (zh) | 计算机辅助计算机编程的系统和方法 | |
Gallardo et al. | The Java Tutorial: A Short Course on the Basics | |
Nagl et al. | A specification environment for graph grammars | |
Horton | Ivor Horton's Beginning Java | |
McGrath | C# Programming in easy steps: Updated for Visual Studio 2019 | |
Papurt | Inside the Object Model: the sensible Use of C++ | |
McGrath | Excel VBA in easy steps | |
Visochek | Practical Data Wrangling: Expert techniques for transforming your raw data into a valuable source for analytics | |
Satmári | Frege IDE with JetBrains MPS | |
Fathabadi et al. | Refinable Record Structures in Formal Methods | |
CN117669509A (zh) | 一种报告生成方法、装置及设备 | |
Libes et al. | An Object-Oriented Tcl/Tk Binding for Interpreted Control of the NIST EXPRESS Toolkit in the NIST STEP Application Protocol Development Environment | |
Dorman | Sams Teach Yourself C# 5.0 in 24 Hours |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |