CN111767033A - 用于机械臂程序开发的编程系统及功能扩展方法 - Google Patents
用于机械臂程序开发的编程系统及功能扩展方法 Download PDFInfo
- Publication number
- CN111767033A CN111767033A CN202010437463.XA CN202010437463A CN111767033A CN 111767033 A CN111767033 A CN 111767033A CN 202010437463 A CN202010437463 A CN 202010437463A CN 111767033 A CN111767033 A CN 111767033A
- Authority
- CN
- China
- Prior art keywords
- function
- extended
- extension
- library
- functions
- 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.)
- Granted
Links
Images
Classifications
-
- 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
- G06F8/315—Object-oriented languages
-
- B—PERFORMING OPERATIONS; TRANSPORTING
- B25—HAND TOOLS; PORTABLE POWER-DRIVEN TOOLS; MANIPULATORS
- B25J—MANIPULATORS; CHAMBERS PROVIDED WITH MANIPULATION DEVICES
- B25J9/00—Programme-controlled manipulators
- B25J9/16—Programme controls
- B25J9/1656—Programme controls characterised by programming, planning systems for manipulators
- B25J9/1658—Programme controls characterised by programming, planning systems for manipulators characterised by programming language
-
- 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
-
- 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/425—Lexical analysis
-
- 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/44—Encoding
- G06F8/447—Target code generation
-
- 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/54—Link editing before load time
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/02—Total factory control, e.g. smart factories, flexible manufacturing systems [FMS] or integrated manufacturing systems [IMS]
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Robotics (AREA)
- Mechanical Engineering (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种用于机械臂程序开发的编程系统及功能扩展方法,所述系统包括:扩展函数池,用于存放扩展函数;扩展接口模块,基于接收的包含扩展函数的调用名和函数地址的映射指令产生函数调用名和地址之间的映射关系,并存储该映射关系;注册接口,基于接收的包含已映射扩展函数的注册指令将此映射关系进行注册,并将已注册的扩展函数加入运行函数池;声明接口,基于接收的包含已注册的扩展函数的调用名的声明指令将扩展函数进行声明,并存储该声明;扩展库模块,基于扩展函数的属性信息将所述扩展函数归类于扩展库中对应的子库中,并存储扩展函数的归类信息,所述扩展库中包含多个子库。该系统集成更加便捷,且具有很强的扩展性。
Description
技术领域
本发明涉及机械臂编程领域,更具体而言,本发明涉及一种用于机械臂程序开发的编程系统及功能扩展方法。
背景技术
工业机器人是集机械、电子、控制、计算机、传感器、人工智能等多学科先进技术于一体的自动化设备。机器人编程语言在整个机器人控制系统中占有十分重要的地位,它直接影响着工业机器人的基本作业和离线编程,从而影响到用户对机器人的使用效率。
随着机器人技术的不断发展,机器人语言也不断地向前推进,其功能不断扩展,使用上也更加容易理解和上手。现在应用比较广泛的且有代表性的工业机器人编程语言是ABB公司开发的RAPID语言。RAPID语言它是一种英文编程语言,所包含的指令可以移动机器人、设置输出、读取输入,还能实现决策、重复其它指令、构造程序、与系统操作员交流等功能,是一种有较强功能的机器人语言。
机器人编程系统作为机器人控制系统的一部分,国外一直处于垄断地位,国外厂商的控制系统及其控制终端一般只对其自己品牌的机器人有一定的兼容性,而且其独有的设备配件和高昂的维修费用让国内相关产业耗费了大量的人力与财力。中国发明专利“一种基于脚本可二次开发的工业机器人编程系统”公开了一种基于脚本可二次开发的工业机器人编程系统,解决了可以二次开发指令集的问题,但是未注重编程语言的扩展性。
如何提高机器人编程系统的扩展性,是一个亟待解决的问题。
发明内容
鉴于此,本发明提供了一种用于机械臂程序开发的编程系统及功能扩展方法,以消除或改善现有技术中存在的一个或更多个缺陷。
本发明公开了一种用于机械臂程序开发的编程系统,该系统包括:
扩展函数池,用于存放扩展函数,所述扩展函数包括可执行程序和属性信息;
扩展接口模块,接收包含扩展函数的调用名和所述扩展函数在扩展函数池的地址的映射指令,基于映射指令将扩展函数的调用名和函数的地址进行映射,产生调用名和函数的地址之间的映射关系,并在系统中存储该映射关系,以基于所述映射关系进行扩展函数的解析;
注册接口,接收包含已映射扩展函数信息的注册指令,基于所述注册指令将所述映射关系进行注册,将已注册的扩展函数加入扩展函数表中,并将已注册的扩展函数加入运行函数池;
声明接口,接收包含已注册并已加入运行函数池的扩展函数的调用名的声明指令,基于所述声明指令将所述扩展函数进行声明,并在系统中存储该声明,以基于所述声明进行扩展函数的调用;
扩展库模块,基于扩展函数的属性信息将所述扩展函数归类于扩展库中对应的子库中,并存储扩展函数的归类信息;
其中,所述扩展库包括以下子库:基础库、网络库、机械臂硬件功能库,每个子库中包括一个或多个API函数,所述API函数是归类于扩展库中对应的子库中的扩展函数。
在一些实施例中,所述扩展函数的属性信息包含扩展函数归类于对应的子库的信息。
在一些实施例中,所述基础库的API函数包括:绝对值求取函数、余弦函数、正弦函数、两个数值型数值在按位进行与运算函数、两个数值型数值在按位进行或运算函数、打开文件函数、关闭文件函数;
所述网络库的API函数包括:关闭套接字函数、监听输入连接函数、连接远程计算机函数;
所述机械臂硬件功能库的API函数包括:重启控制器函数、连接传感器设备函数、启动IO设备函数、设置摄像头参数函数。
在一些实施例中,所述系统还包括:解释器,所述解释器解析扩展函数时,跳转到所述扩展函数在扩展函数池中的地址进行解析执行。
在一些实施例中,所述系统还包括:编译器,所述编译器用于将扩展函数编译生成机器代码,编译器将扩展函数编译生成机器代码的过程包括静态实现和动态实现。
在一些实施例中,在静态实现的情况下,编译器在编译扩展函数时,将扩展函数与解释器静态编译链接到一起;
在动态实现的情况下,编译器在编译扩展函数时,将扩展函数单独编译成动态库,由解释器在程序启动运行时进行动态加载。
在一些实施例中,所述编译器还用于对扩展函数的可执行程序中的自增表达式和/或自减表达式进行编译。
在一些实施例中,所述编译器对自增表达式或自减表达式进行编译的过程包括以下步骤:
编译器对监测到的自增或自减符号进行词法分析,返回所述自增或自减符号对应的语法分析函数;
对词法分析返回的语法分析函数进行语法分析,为所述自增或自减符号匹配对应的表达式i++或++i或i--或--i;
为上述表达式匹配相应的操作符,根据读取的操作符执行相应的指令,实现自增或自减功能。
在一些实施例中,所述扩展库的子库还包括:日志系统库、文件系统操作库、原始数据库、字符串库;
所述日志系统库的API函数包括:获取日志系统默认处理程序函数、设置日志系统默认处理程序函数;
所述文件系统操作库的API函数包括:打开文件目录函数、读取文件目录函数、关闭文件目录函数、移动文件目录函数、重命名文件目录函数;
所述原始数据库的API函数包括:读取原始数据字节数据函数、写入原始数据字节数据函数、将数据装入原始数据字节数据函数、打开来自原始数据字节数据的数据函数;
所述字符串库的API函数包括:查找字符串函数、计算字符串长度函数、匹配字符串函数。
本发明还公开了一种用于机械臂程序开发的功能扩展方法,所述功能扩展方法适用于上述实施例所述的机械臂程序开发的编程系统,所述方法包括如下步骤:
将扩展函数存放在扩展函数池中;
接收包含扩展函数的调用名和所述扩展函数在扩展函数池的地址的映射指令,基于映射指令将扩展函数的调用名和函数地址进行映射,产生调用名和函数地址之间的映射关系,并在系统中存储该映射关系;
接收包含已映射扩展函数信息的注册指令,基于所述注册指令将所述映射关系进行注册,将已注册的扩展函数加入扩展函数表中,并将已注册的扩展函数加入运行函数池;
接收包含已注册并已加入至运行函数池的扩展函数的调用名的声明指令,基于所述声明指令将所述扩展函数进行声明,并在系统中存储该声明。
本发明实施例提供的用于机械臂程序开发的编程系统和用于机械臂程序开发的系统功能扩展方法,系统支持更加丰富,通过使用函数声明接口,通过其他语言对系统功能进行扩展,使系统具备二次开发功能,并具有很强的扩展性。
本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:
图1为机械臂运行系统的示意图。
图2为本发明一实施例中用于机械臂程序开发的编程系统的结构示意图。
图3为本发明一实施例中扩展接口模块的结构示意图。
图4为本发明一实施例中Tenon系统扩展库模块示意图。
图5为本发明一实施例中用于机械臂程序开发的功能扩展方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
在此,还需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合。
本发明设计了一种用于机械臂程序开发的编程系统,称为Tenon编程系统。本发明Tenon系统包括独立的语言核心部分及机械臂相关的扩展部分,Tenon编程语言简洁、自由并具有优秀的扩展性;Tenon编程系统集成更加便捷,使用更加具有多样性,系统支持也更加丰富,完善了系统的二次开发功能。
图1为机械臂运行系统的示意图,如图1所示,机械臂运行系统包括:业务应用程序包统一开放平台,编程语言及运行时环境,机械臂本体和控制器。其中,业务应用程序包统一开放平台部分作为编程环境,包括:示教器集成开发环境(IDE)、桌面开发环境、离线高精度模拟器。Tenon机械臂语言编译系统运行在控制器平台上,作为机械臂和外部编程环境的中间层,与机械臂本体和控制器直接通过内部定义接口进行调用和数据交互。
本发明提供的Tenon编程系统具有很强的可扩展性,首先,基于扩展接口模块将扩展函数在系统中的调用名和其函数地址进行映射,然后,使用注册接口将此映射注册到系统中,并使用声明接口对此扩展函数进行声明,以基于此声明进行扩展函数的调用,从而完成对系统功能的扩展。作为示例,本发明仅以用C语言编写的扩展函数为例进行说明,但本发明不限于此,还可根据具体情况使用其他语言进行扩展。
图2为本发明一实施例中用于机械臂程序开发的编程系统的结构示意图。如图2所示,该系统包括:
扩展函数池,用于存放扩展函数,所述扩展函数包括可执行程序和属性信息。
扩展函数是基于系统开发的需求,用C语言编写的对系统功能进行补充实现的函数。扩展函数池中包括系统中的所有扩展函数,如机械臂的运动指令、示教器打印输出函数等。当扩展函数加入到系统中后,存放扩展函数名的动态扩展函数表也会随之更新,扩展函数池用来存储多个动态扩展函数链表,这些动态扩展函数表会在系统运行时被索引。
扩展函数包括可执行程序和属性信息,可执行程序即函数内部的可执行程序体,属性信息中包含此扩展函数归类于扩展库中对应子库的信息。以名为“base_cos”的扩展函数为例,此扩展函数是一个求取余弦的函数,其函数名中的“base”即是它的属性信息,代表着这个函数应归类于扩展库中的基础(base)库。
扩展接口模块,接收包含扩展函数的调用名和所述扩展函数在扩展函数池的地址的映射指令,基于映射指令将扩展函数的调用名和函数的地址进行映射,产生调用名和函数的地址之间的映射关系,并在系统中存储该映射关系,以基于所述映射关系进行扩展函数的解析。
扩展接口模块是Tenon编程系统实现的一种外部库注入机制,是Tenon系统的核心模块之一,将扩展函数(也可称为外部库函数)按照Tenon系统规定的注册接口进行注册,从而将其导入Tenon系统扩展函数表,增强Tenon系统的可扩展性。扩展函数是使用C语言编写的函数,会被本地编译器编译生成机器代码,然后由TVM(Tenon Virtual Machine,Tenon虚拟机)进行函数调用。TVM是Tenon机械臂语言编译系统中,具有执行能力的可执行程序,其输入是Tenon汇编程序,一般无特定输出。
图3为本发明一实施例中扩展接口模块的结构示意图,如图3所示,基于扩展接口等相关操作将扩展函数池中的扩展函数注册到系统中,并更新动态扩展函数链表,然后系统会为其创建相应的运行上下文环境,并将代码和数据填充到相应的结构体中,最后由运行引擎进行取指及运行。
扩展接口模块接收包含扩展函数的调用名(也称之为扩展函数在Tenon层函数名称)和所述扩展函数在扩展函数池的地址的映射指令,基于所述映射指令将扩展函数的调用名和其函数地址进行映射,在本发明实施例中是使用TenonExtFunc来对扩展函数的调用名和函数地址进行映射的,从而产生扩展函数调用名和函数地址之间的映射关系,以在解析扩展函数时使用。
TenonExtFunc是扩展函数的存储结构,其中主要包括函数名和函数地址,TenonExtFunc示例代码如下所示:
其中,exec_ctx为运行上下文结构体,cfuncs是扩展函数池,用来存储多个动态扩展函数链表,在运行时被索引。
使用TenonExtFunc映射扩展函数在Tenon层的函数名和函数地址,示例代码如下所示:
其中,“twrite_bool”、“twrite_num”代表着两个扩展函数的调用名,TenonExtFunc对这两个扩展函数在Tenon层的函数名和函数地址进行映射,并将此映射关系保存在base_funcs中。
扩展接口模块将扩展函数在Tenon层的调用名和其真实的函数地址进行映射,产生调用名和函数的地址之间的映射关系,并将该映射关系存储在系统中。
注册接口,接收包含已映射扩展函数信息的注册指令,基于所述注册指令将所述映射关系进行注册,将已注册的扩展函数加入扩展函数表中,并将已注册的扩展函数加入运行函数池。
在扩展接口模块已完成对扩展函数的调用名和函数的地址的映射,当完成映射后,注册接口会接收到包含已映射的扩展函数信息的注册指令,注册接口基于此注册指令对其进行注册并保存到系统中,并更新扩展函数表,将完成注册的扩展函数加入到系统的运行函数池中。其指令代码如下所示:
#include"tenon.h"
int init_base()
{
return tenon_init_lib("base",base_funcs);
};
其中,base_funcs中包含在扩展接口模块完成的扩展函数的映射关系,通过注册接口tenon_init_lib将base_func注册到base中。
注册接口将在扩展接口模块完成映射的扩展函数注册到了系统中,并将此扩展函数加入到系统的运行函数池。
声明接口,接收包含已注册并已加入运行函数池的扩展函数的调用名的声明指令,基于所述声明指令将所述扩展函数进行声明,并在系统中存储该声明,以基于所述声明进行扩展函数的调用。
在本发明实施例中,通过opaque接口按以下方式对扩展函数进行声明,其本质是通过opaque函数封装外部库函数,TVM可以把外部库函数和opaque函数关联起来,在完成声明之后就可在编程中使用此扩展函数,可扩展性非常高。
Tenon文件中使用opaque接口声明扩展函数的示例代码如下所示:
opaque function void tpwrite_string(string data);
opaque function void tpwrite_num(num data);
其中,tpwrite_string、tpwrite_num即为两个扩展函数。
声明接口对已完成注册的扩展函数在前端页面中进行声明,以基于此声明在之后的程序中调用此扩展函数。
扩展接口模块将存放在扩展函数池中的扩展函数的调用名与其函数地址进行映射,并对此映射关系进行保存;注册接口基于注册指令将此扩展函数注册到系统中,将扩展函数加入运行函数池;通过声明接口在前端页面中对此扩展函数进行声明,前端使用opaque声明以区别一般函数,所述一般函数是指使用Tenon语言编写的函数,会被编译器编译生成汇编代码,然后由TVM解释执行,但是此扩展函数是使用C语言编写的函数,会被编译器编译生成机器代码,然后由TVM进行函数调用,即使用Tenon语言编写代码时,可通过opaque接口直接调用C语言等高级语言编写的函数,而不用专门用Tenon语言重新编写具有相同功能的函数,这样做可以大幅减轻代码编写的工作量,能提升代码编写的效率,并能增加代码的可理解性,使编程语言具有很强的扩展性。
扩展库模块,基于扩展函数的属性信息将所述扩展函数归类于扩展库中对应的子库中,并存储扩展函数的归类信息;其中,所述扩展库包括以下子库:基础库、网络库、机械臂硬件功能库,每个子库中包括一个或多个API函数,所述API函数是归类于扩展库中对应的子库中的扩展函数。
扩展库模块是基于Tenon系统的扩展机制,对基础库(主要涉及Math库、字节操作库和文件库)、网络库、机械臂硬件功能库(Robot库)进行功能实现性扩展,以支持Tenon系统功能需求,并简化开发人员二次开发的编程复杂性。本模块在已有的扩展接口基础上,扩展集成现有的可移植操作系统接口(posix)库。在指令与函数方面,本模块支持基础数学库,提供了简单的用户接口;支持对文件的相关操作;支持在终端窗口进行输入/输出的功能;支持对硬件(DI,DO,AI,AO,GI,GO)、序列端口的操作;支持socket通信;支持事件处理器(如数据变化事件,输入输出变化事件)。在运行时方面,本模块支持事件日志。
基础库:包含数学(Math)库,字节操作库,文件库等内容,通过封装底层来实现上层使用函数时可直接调用接口,而无需引入和声明操作。
基础库的主要API函数包括:绝对值求取函数abs、余弦函数cos、正弦函数sin、两个数值型数值在按位进行与运算函数bitor、两个数值型数值在按位进行或运算函数bitxor、打开文件函数open、关闭文件函数close等。如下表1所示为基础库中的主要API函数的示例。
表1基础库中的主要API函数示例:
函数名称 | Tenon名称 |
base_bitor | bitor |
base_bitxor | bitxor |
base_bitlsh | bitlsh |
base_pow | pow |
tenon_open | open |
tenon_close | close |
base_abs | abs |
base_atan2 | atan2 |
base_atan2r | atan2r |
base_cos | cos |
base_cosr | cosr |
base_sin | sin |
base_tan | tan |
base_tanr | tanr |
twrite | twrite |
base_writeanybin | writeanybin |
其中,函数名称代表用C语言编写的扩展函数的名称,Tenon名称是指扩展函数在Tenon系统中的调用名。
以表1中writeanybin函数为例,具体的实现方法如下代码所示:
在controller.c文件实现函数:
在base.t用opaque接口声明函数:
opaque function void writeanybin(alias iodev iodevice,anytype data);
其中,在controller.c文件中对writeanybin函数进行映射,在base.t文件中使用opaque接口对函数进行声明,基于此声明即可调用此扩展函数。
网络库:在Tenon层实现了基于socket通讯原理的TCP、UDP通讯库。
网络库的主要API函数包括:关闭套接字函数socketclose、监听输入连接函数socketlisten、连接远程计算机函数socketconnect等。如下表2所示为网络库中的主要API函数的示例。
表2网络库中的主要API函数示例:
其中,函数名称代表用C语言编写的扩展函数的名称,Tenon名称是指扩展函数在Tenon系统中的调用名。
Robot库:Robot库是机械臂硬件操作库,用于适配机械臂硬件操作特性。Robot库中包含所有操作机械臂硬件的功能函数,这些函数在机械臂编程中有着非常重要的作用。
Robot库的主要API函数包括:重启控制器函数warmstart、连接传感器设备函数sendevice、启动IO设备函数ioenable、设置摄像头参数函数camsetparameter等。
图4为本发明一实施例中Tenon系统扩展库模块示意图,如图4所示,扩展库中除了基础库、网络库、Robot库,还包括日志系统库、文件系统操作库、原始数据库(Rawdata库)、字符串库(String库)。
日志系统库:日志(Logging)系统实现了将用户的日志(Log)信息进行输出的功能。Logging系统支持将用户所要输出的Log信息输出到控制台或是Log文件中。
日志系统库的主要API函数包括:获取日志系统默认处理程序函数getLogDefaultHandler、设置日志系统默认处理程序函数setLogDefaultHandler等。如下表3所示为日志系统库中的主要API函数的示例。
表3日志系统库中的主要API函数示例:
其中,函数名称代表用C语言编写的扩展函数的名称,Tenon名称是指扩展函数在Tenon系统中的调用名。
文件系统操作库:实现文件目录的打开、读取、关闭、移动等功能。
文件系统操作库的主要API函数包括:打开文件目录函数opendir、读取文件目录函数readdir、关闭文件目录函数closedir、移动文件目录函数removedir、重命名文件函数renamefile等。如下表4所示为文件系统操作库中的主要API函数的示例。
表4文件系统操作库中的主要API函数示例:
函数名称 | Tenon名称 |
dir_opendir | opendir |
dir_makedir | makedir |
dir_readdir | readdir |
dir_closedir | closedir |
dir_removedir | removedir |
dir_removefile | removefile |
dir_renamefile | renamefile |
dir_copyfile | copyfile |
其中,函数名称代表用C语言编写的扩展函数的名称,Tenon名称是指扩展函数在Tenon系统中的调用名。
RawData库:RawData结构的操作库,实现对1024字节数据进行读取和组包拆包等操作。
RawData库的主要API函数包括:读取原始数据字节数据函数readrawbytes、写入原始数据字节数据函数writerawbytes等。如下表5所示为RawData库中的主要API函数的示例。
表5 RawData库中的主要API函数示例:
其中,函数名称代表用C语言编写的扩展函数的名称,Tenon名称是指扩展函数在Tenon系统中的调用名。
String库:实现对字符串进行查找、长度计算和匹配等基础操作。
String库的主要API函数包括:查找字符串函数strfind、计算字符串长度函数strlen、匹配字符串函数strmap等。如下表6所示为String库中的主要API函数的示例。
表6 String库中的主要API函数示例:
其中,函数名称代表用C语言编写的扩展函数的名称,Tenon名称是指扩展函数在Tenon系统中的调用名。
扩展库模块基于系统的开发需求,在扩展接口的基础上,对系统多个库的相关功能进行扩展,包括:基础库、日志系统库、网络库、文件系统库、Rawdata库、String库、Robot库等,以支持Tenon系统功能需求。
在一些实施例中,Tenon编程系统还包括:解释器,当解释器对扩展函数进行解析时,会基于所述扩展函数在扩展接口模块形成的函数调用名和其地址的映射关系,跳转到扩展函数在扩展函数池中的地址进行解析执行。
在一些实施例中,Tenon编程系统还包括:编译器,编译器用于将扩展函数编译生成机器代码,编译器将扩展函数编译生成机器代码的过程包括静态实现和动态实现。在静态实现的情况下,编译器在编译扩展函数时,将扩展函数与解释器静态编译链接到一起;在动态实现的情况下,编译器在编译扩展函数时,将扩展函数单独编译成动态库,由解释器在程序启动运行时进行动态加载。使用静态实现的函数包括:对字符串进行处理的一些基础函数,如strfind、strlen、strmap、strmatch、strorder等;对原生字节码进行处理的一些函数,如initrawbytes、rawbyteslen、packrawbytes_hex等;数学库函数,如abs、acos、sin、sqrt、tan等。使用动态实现的函数包括:机械臂的运动指令函数,如movec、movej、movel等;摄像头相关处理函数,如camloadjob、camreqimage、camsetrunmode等。以上仅作为示例,但是本发明并不限于此。
在一些实施例中,上述编译器还用于对扩展函数的可执行程序中涉及的自增表达式++i、i++和/或自减表达式--i、i--进行编译。编译器对自增表达式或自减表达式进行编译的过程包括以下步骤:
词法分析scanner.l对监测到的自增“++”或者自减“--”符号进行词法分析,分别返回所述符号对应的语法分析函数PLUSPLUS或者SUBSUB。
语法分析,语法分析函数包括“PLUSPLUS variable”、“variable PLUSPLUS”、“SUBSUB variable”、“variable SUBSUB”四种,这四种语法分析函数分别对应++i、i++、--i、i--,对词法分析返回的语法分析函数进行语法分析,为其匹配其对应的表达式。
通过抽象语法树,语义分析,为上述表达式匹配相应的操作符,表达式++i、i++、--i、i—对应的操作符分别为OP_PRE_INCREMENT、OP_POST_INCREMENT、OP_PRE_DECREMENT、OP_POST_DECREMENT,根据读取的操作符执行相应的指令,从而实现自增或自减功能。
自增、自减表达式具有以下优点:
(1)机械臂系统的处理器能力有限,实现++、--功能,能够有效降低程序运行时间,改善机械臂指令处理延时问题。在编程时i++、i=i+1、i+=1执行的结果都是将i的值加1再赋值给i,但是其执行过程却不同,从而其执行时间和效率也是不同的。下面简述i++、i=i+1、i+=1的运行过程,以对执行效率进行比较。
i++的执行过程为:
a:首先访问i的内存地址;
b:i的值自增1。
i=i+1的执行过程为:
1:访问右边i的地址,取出内容;
2:取出的内容和1进行加法;
3:读取左边变量的地址;
4:将加法运算结果存到左边i的地址中。
i+=1的执行过程为:
1:访问右边i的地址,取出内容;
2:取出的内容和1进行加法;
3:将加法运算结果存到左边i的地址中。
由上可知,i++、i=i+1、i+=1三种方式的执行效率依次降低,且i++的执行效率最高,i++能够有效降低程序运行时间。
(2)自增++、自减--功能更符合高级语言编程习惯,操作人员非常容易从高级语言过渡使用本机械臂编程语言,语言更加自由。
在本发明的实施例中支持使用自增表达式和自减表达式,使系统开发功能更丰富,也提升了系统的运行效率,提高了开发人员的工作效率。
在本发明的另一实施例中,一种用于机械臂程序开发的编程系统Tenon编程系统还包括:Tenon语言的数据、表达式、语句、函数、模块、错误处理、中断,具备多文件支持、多任务支持、日志等功能,并具有以下特点:语言大小写敏感;标识符由字母、数字和下划线组成,标识符的起始字符必须是字母或者下划线,且标识符不能与关键字重名。Tenon系统中定义的关键字包括:and、connect、const、case、else、elseif、false、for、xor、or、not、void、var、while、with、then等。下面将对Tenon语言的数据、表达式、语句、函数、模块、错误处理、中断等做详细介绍。
(1)数据
在Tenon语言中,数据种类包括:常量、变量、持久量。其中,常量为只读数据,其值不能被改写;变量的值既可以被读取,也可以被改写;持久量的值也是可以被读取的,但是与变量不同的是,在程序运行结束后,持久量的值会被持久保存。
数据类型包括基本类型、记录类型和别名类型。其中,记录类型支持函数成员。
(2)表达式
Tenon语言中的表达式支持的运算符包括:算数运算符:*、-、+、/等;关系运算符:>、<=、=、!=、>=、<=等;逻辑运算符:and、xor、or、not等;自增运算符++和自减运算符--;相除取商整数运算符div;取余数运算符mod等等。
另外,在表达式中,可以通过标识符来引用一个数据。
表达式包括常量表达式、文字表达式、聚合表达式、自增减表达式和自减表达式。
(3)语句
Tenon系统支持各种常见的语句,包括声明语句、赋值语句、循环语句、条件分支语句、函数调用语句等,同时也支持异常处理和中断处理相关的语句。
具体包括:if语句、for语句、while语句、switch语句、return语句、exit语句、raise语句、retry语句、trynext语句、connect语句、waituntil语句。
(4)函数
Tenon系统程序的执行代码位于函数中,其入口函数为main函数。并在Tenon系统函数部分对函数声明和函数调用做出了定义。
(5)模块
Tenon系统程序由一个或者多个模块组成,每个模块可以用来实现独立的功能。一个模块具有一个模块名以及可选的模块属性,模块属性用来配置该模块在机械臂运行系统中的权限、加载执行模式等,包括:
sysmodule,此属性表示该模块为系统模块;
noview,此属性表示该模块的源代码对用户是不可见的;
nostepin,此属性表示在单步执行模式下,不能单步进入该模块;
viewonly,此属性表示该模块的源代码不能被用户修改。
(6)错误处理
错误处理是指在函数运行出错时执行的语句,它能够帮助我们从错误中恢复,从而保证任务顺利进行。
错误处理以error开头,直至函数声明结束。当出现错误时,可为错误处理添加编号,并通过raise语句将错误提交到指定的错误处理处。并在错误处理部分对错误编号、错误变量、错误处理代码以及长跳转做出定义。
(7)中断
程序在执行任务的过程中有可能触发中断,即内部中断,同时也有可能收到外部中断。程序中通过connect来关联中断标识变量与其处理函数(trap函数),即当中断发生时,程序通过传递中断标识变量来通知运行时环境执行关联的中断处理函数。并在中断部分对中断标识变量、系统中断号变量和中断处理函数做出定义。
(8)多文件支持
Tenon系统语言和Tenon系统运行时环境支持单任务多文件,即一个任务可以由多个Tenon系统文件共同实现。而且,实现这个任务的多个文件之间的函数可以互相调用。
(9)多任务支持
Tenon系统运行时环境支持多任务并发运行,且系统会为每一个任务创建独立的运行时上下文环境。系统中的各个任务拥有独立的代码和数据,在运行时互不干涉,并且每个任务也可以支持多文件。同时,Tenon系统在语言和运行时也提供了必要的多任务通信机制,包括多任务共享变量,多任务中断通信等。在多任务支持部分对多任务共享变量、多任务共享变量轮询、多任务中断通信和多任务多文件做出定义。
(10)Logging系统
Logging系统实现了将Tenon用户的Log信息进行输出的功能。目前,Logging系统支持将用户所要输出的Log信息输出到控制台或是Log文件中。Log文件通常存储在用户主目录下,以tenon.log命名;随着文件内容的不断增加,会有tenon.logx名字的Log文件不断的产生,其中x代表着1、2、3…。
Logging系统有一个Log控制器,用来控制整个系统的过滤机制和输出选项等。Logging系统中的Log输出,可以通过Log控制器中的Level和Marker过滤。在Logging系统部分对Log的Level、Log的Marker、Log的输出方式、Log的输出函数做出定义。
Tenon系统是一个用于机械臂程序开发的系统,它包括独立的语言核心部分以及机械臂相关的扩展部分,并具有可扩展、支持错误处理、支持中断等特性,支持使用其他语言对系统相关功能进行扩展。在语言设计方面,相对于传统机械臂开发语言,Tenon编程语言以传统的机器人编程语言为范本,结合诸多现代语言优点,形成了自己的语言特色,包括:Tenon系统语言大小写敏感,这更符合现代编程的习惯;语言更为简洁和自由。在系统集成方面,Tenon系统集成更加便捷,使用更加具有多样性,系统支持也更加丰富,二次开发功能更加完善。Tenon系统的可扩展性,简化了机械臂相关的开发工作的复杂性。
本发明实施例还提供了一种用于机械臂程序开发的功能扩展方法,图5为本发明一实施例中用于机械臂程序开发的功能扩展方法流程图,如图5所示,所述方法包括如下步骤:
步骤S110:将扩展函数存放在扩展函数池中;
步骤S120:接收包含扩展函数的调用名和所述扩展函数在扩展函数池的地址的映射指令,基于映射指令将扩展函数的调用名和函数地址进行映射,产生调用名和函数地址之间的映射关系,并在系统中存储该映射关系;
步骤S130:接收包含已映射扩展函数信息的注册指令,基于所述注册指令将所述映射关系进行注册,将已注册的扩展函数加入扩展函数表中,并将已注册的扩展函数加入运行函数池;
步骤S140:接收包含已注册并已加入运行函数池的扩展函数的调用名的声明指令,基于所述声明指令将所述扩展函数进行声明,并在系统中存储该声明。
本发明实施例提供的用于机械臂程序开发的系统功能扩展方法通过接收含有扩展函数的调用名和其地址的映射指令,基于此映射指令对扩展函数的调用名和其函数地址进行映射,并将此映射关系进行保存;接收含有形成映射关系的扩展函数的信息的注册指令,基于此指令对扩展函数进行注册操作,将其注册到系统中,并将此扩展函数加入到系统的运行函数池中;接收包含已注册的扩展函数的调用名的声明指令,基于此指令将扩展函数进行声明,在程序中进行函数调用。通过此扩展方法,将以其他语言编写的对系统功能进行补充的扩展函数加入到系统中并可以直接使用,减轻了开发人员编写代码的工作量,并提升了开发人员代码的编写效率,从而增强了系统的可扩展性。
本发明实施例提供的用于机械臂程序开发的编程系统,此系统通过外部库注入机制将以C语言或其他语言编写的扩展函数加入到Tenon系统中,使得在编写代码时,可通过opaque接口直接调用扩展函数,而不需要用Tenon语言重新编写具有相同功能的函数,这样做减轻了开发人员的开发工作,提高了开发人员的工作效率,也增加了代码的可理解性,从而增强了系统语言的扩展性,避免了开发人员因机械臂设备的专用性而难以融入针对不同机械臂设备进行开发的场景。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种用于机械臂程序开发的编程系统,其特征在于,该系统包括:
扩展函数池,用于存放扩展函数,所述扩展函数包括可执行程序和属性信息;
扩展接口模块,接收包含扩展函数的调用名和所述扩展函数在扩展函数池的地址的映射指令,基于映射指令将扩展函数的调用名和函数的地址进行映射,产生调用名和函数的地址之间的映射关系,并在系统中存储该映射关系,以基于所述映射关系进行扩展函数的解析;
注册接口,接收包含已映射扩展函数信息的注册指令,基于所述注册指令将所述映射关系进行注册,将已注册的扩展函数加入扩展函数表中,并将已注册的扩展函数加入运行函数池;
声明接口,接收包含已注册并已加入运行函数池的扩展函数的调用名的声明指令,基于所述声明指令将所述扩展函数进行声明,并在系统中存储该声明,以基于所述声明进行扩展函数的调用;
扩展库模块,基于扩展函数的属性信息将所述扩展函数归类于扩展库中对应的子库中,并存储扩展函数的归类信息;
其中,所述扩展库包括以下子库:基础库、网络库、机械臂硬件功能库,每个子库中包括一个或多个API函数,所述API函数是归类于扩展库中对应的子库中的扩展函数。
2.根据权利要求1所述的编程系统,其特征在于,所述扩展函数的属性信息包含扩展函数归类于对应的子库的信息。
3.根据权利要求1所述的编程系统,其特征在于,
所述基础库的API函数包括:绝对值求取函数、余弦函数、正弦函数、两个数值型数值在按位进行与运算函数、两个数值型数值在按位进行或运算函数、打开文件函数、关闭文件函数;
所述网络库的API函数包括:关闭套接字函数、监听输入连接函数、连接远程计算机函数;
所述机械臂硬件功能库的API函数包括:重启控制器函数、连接传感器设备函数、启动IO设备函数、设置摄像头参数函数。
4.根据权利要求1所述的编程系统,其特征在于,所述系统还包括:解释器,所述解释器解析扩展函数时,跳转到所述扩展函数在扩展函数池中的地址进行解析执行。
5.根据权利要求1所述的编程系统,其特征在于,所述系统还包括:编译器,所述编译器用于将扩展函数编译生成机器代码,编译器将扩展函数编译生成机器代码的过程包括静态实现和动态实现。
6.根据权利要求5所述的编程系统,其特征在于,
在静态实现的情况下,编译器在编译扩展函数时,将扩展函数与解释器静态编译链接到一起;
在动态实现的情况下,编译器在编译扩展函数时,将扩展函数单独编译成动态库,由解释器在程序启动运行时进行动态加载。
7.根据权利要求5所述的编程系统,其特征在于,所述编译器还用于对扩展函数的可执行程序中的自增表达式和/或自减表达式进行编译。
8.根据权利要求7所述的编程系统,其特征在于,所述编译器对自增表达式或自减表达式进行编译的过程包括以下步骤:
编译器对监测到的自增或自减符号进行词法分析,返回所述自增或自减符号对应的语法分析函数;
对词法分析返回的语法分析函数进行语法分析,为所述自增或自减符号匹配对应的表达式i++或++i或i--或--i;
为上述表达式匹配相应的操作符,根据读取的操作符执行相应的指令,实现自增或自减功能。
9.根据权利要求1所述的编程系统,其特征在于,所述扩展库的子库还包括:日志系统库、文件系统操作库、原始数据库、字符串库;
所述日志系统库的API函数包括:获取日志系统默认处理程序函数、设置日志系统默认处理程序函数;
所述文件系统操作库的API函数包括:打开文件目录函数、读取文件目录函数、关闭文件目录函数、移动文件目录函数、重命名文件目录函数;
所述原始数据库的API函数包括:读取原始数据字节数据函数、写入原始数据字节数据函数、将数据装入原始数据字节数据函数、打开来自原始数据字节数据的数据函数;
所述字符串库的API函数包括:查找字符串函数、计算字符串长度函数、匹配字符串函数。
10.一种用于机械臂程序开发的功能扩展方法,其特征在于,适用于如权利要求1至9任一项所述的用于机械臂程序开发的编程系统,所述方法包括如下步骤:
将扩展函数存放在扩展函数池中;
接收包含扩展函数的调用名和所述扩展函数在扩展函数池的地址的映射指令,基于映射指令将扩展函数的调用名和函数地址进行映射,产生调用名和函数地址之间的映射关系,并在系统中存储该映射关系;
接收包含已映射扩展函数信息的注册指令,基于所述注册指令将所述映射关系进行注册,将已注册的扩展函数加入扩展函数表中,并将已注册的扩展函数加入运行函数池;
接收包含已注册并已加入至运行函数池的扩展函数的调用名的声明指令,基于所述声明指令将所述扩展函数进行声明,并在系统中存储该声明。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010437463.XA CN111767033B (zh) | 2020-05-21 | 2020-05-21 | 用于机械臂程序开发的编程系统及功能扩展方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010437463.XA CN111767033B (zh) | 2020-05-21 | 2020-05-21 | 用于机械臂程序开发的编程系统及功能扩展方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111767033A true CN111767033A (zh) | 2020-10-13 |
CN111767033B CN111767033B (zh) | 2023-08-25 |
Family
ID=72719534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010437463.XA Active CN111767033B (zh) | 2020-05-21 | 2020-05-21 | 用于机械臂程序开发的编程系统及功能扩展方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111767033B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115113860A (zh) * | 2022-08-31 | 2022-09-27 | 北京云枢创新软件技术有限公司 | 基于Python的EDA软件二次开发系统 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080010229A1 (en) * | 2006-07-05 | 2008-01-10 | Raymond Lee Shu Tak | Intelligent agent based development platform |
CN101599869A (zh) * | 2008-06-05 | 2009-12-09 | 国网南京自动化研究院 | 一种基于网络的仿真测试远程控制方法 |
CN103258159A (zh) * | 2011-12-16 | 2013-08-21 | 德商赛克公司 | 可扩展和/或分布式授权系统和/或提供类似的方法 |
CN103823467A (zh) * | 2012-05-23 | 2014-05-28 | 浙江大学 | 具备运动规划功能的工业机器人示教规划器的控制方法 |
CN107430517A (zh) * | 2015-05-27 | 2017-12-01 | 谷歌公司 | 用于增强对话系统的插件的在线市场 |
CN109196829A (zh) * | 2016-07-01 | 2019-01-11 | 英特尔公司 | 远程存储器操作 |
CN109450763A (zh) * | 2018-12-29 | 2019-03-08 | 上海新时达机器人有限公司 | 一种总线扩展方法、网关和总线扩展系统 |
CN110659088A (zh) * | 2019-09-20 | 2020-01-07 | 浙江杰芯科技有限公司 | 一种嵌入式环境下程序扩展的方法及系统 |
CN111078290A (zh) * | 2019-12-17 | 2020-04-28 | 西安电子科技大学 | 一种用于可扩展指令集的编译器及编译方法 |
-
2020
- 2020-05-21 CN CN202010437463.XA patent/CN111767033B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080010229A1 (en) * | 2006-07-05 | 2008-01-10 | Raymond Lee Shu Tak | Intelligent agent based development platform |
CN101599869A (zh) * | 2008-06-05 | 2009-12-09 | 国网南京自动化研究院 | 一种基于网络的仿真测试远程控制方法 |
CN103258159A (zh) * | 2011-12-16 | 2013-08-21 | 德商赛克公司 | 可扩展和/或分布式授权系统和/或提供类似的方法 |
CN103823467A (zh) * | 2012-05-23 | 2014-05-28 | 浙江大学 | 具备运动规划功能的工业机器人示教规划器的控制方法 |
CN107430517A (zh) * | 2015-05-27 | 2017-12-01 | 谷歌公司 | 用于增强对话系统的插件的在线市场 |
CN109196829A (zh) * | 2016-07-01 | 2019-01-11 | 英特尔公司 | 远程存储器操作 |
CN109450763A (zh) * | 2018-12-29 | 2019-03-08 | 上海新时达机器人有限公司 | 一种总线扩展方法、网关和总线扩展系统 |
CN110659088A (zh) * | 2019-09-20 | 2020-01-07 | 浙江杰芯科技有限公司 | 一种嵌入式环境下程序扩展的方法及系统 |
CN111078290A (zh) * | 2019-12-17 | 2020-04-28 | 西安电子科技大学 | 一种用于可扩展指令集的编译器及编译方法 |
Non-Patent Citations (4)
Title |
---|
JINGYANG WU 等: "Design and implementation of an omnidirectional mobile robot platform with unified I/O interfaces", 《2017 IEEE INTERNATIONAL CONFERENCE ON MECHATRONICS AND AUTOMATION (ICMA)》, pages 410 - 415 * |
中国科学院软件研究所: "中科院软件所智能操作系统FactOS及配套工具公开发布", pages 1 - 4, Retrieved from the Internet <URL:《http://school.freekaoyan.com/bj/zryhyy1/2020/05-28/15906732421192605.shtml》> * |
周孝成: "可扩展的机器人中间语言系统设计与开发", 《万方》, pages 10 - 97 * |
宫小飞: "基于ARM嵌入式码垛机器人控制系统的研发", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 2, pages 140 - 834 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115113860A (zh) * | 2022-08-31 | 2022-09-27 | 北京云枢创新软件技术有限公司 | 基于Python的EDA软件二次开发系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111767033B (zh) | 2023-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5175856A (en) | Computer with integrated hierarchical representation (ihr) of program wherein ihr file is available for debugging and optimizing during target execution | |
KR101150003B1 (ko) | 소프트웨어 개발 툴 생성 방법 | |
US7526755B2 (en) | Plug-in pre- and postconditions for static program analysis | |
US7086041B2 (en) | Extensible type system for representing and checking consistency of program components during the process of compilation | |
US5577253A (en) | Analyzing inductive expressions in a multilanguage optimizing compiler | |
US7992140B2 (en) | Compiler supporting programs as data objects | |
US6199095B1 (en) | System and method for achieving object method transparency in a multi-code execution environment | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
WO1993025963A1 (en) | Debugger program which includes correlation of computer program source code with optimized objet code | |
US7685581B2 (en) | Type system for representing and checking consistency of heterogeneous program components during the process of compilation | |
US20070074185A1 (en) | Identifier expressions | |
US7716656B2 (en) | Nullable and late binding | |
Cardelli | ML under Unix | |
Schröer | The GENTLE Compiler Construction System | |
EP0708940B1 (en) | Multiple entry point method dispatch | |
CN111767033B (zh) | 用于机械臂程序开发的编程系统及功能扩展方法 | |
Sorgatz | Dynamic Modules: User’s Manual and Programming Guide for MuPAD 1.4 | |
Grigoryan et al. | Expert C++: Become a proficient programmer by learning coding best practices with C++ 17 and C++ 20's latest features | |
EP1785848A1 (en) | Method and apparatus for semantic checking of program code | |
Warren et al. | The XSB System Version 3.7. x Volume 1: Programmer’s Manual | |
Hartogs | Code-driven Language Development: Framework for Analysis of C/C++ Open-Source Projects | |
Johnstone et al. | Designing and implementing language translators with rdp {a case study | |
Parl | C++ and Objective C | |
Louden et al. | Compilers and Interpreters. | |
To | Fictitious imperative language system |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |