本发明涉及一种编程方法及编程语言实现方法,具体涉及一种使用别名在计算机编程语言JavaScript上实现跨人类语言编程的方法。
背景技术:
现在的JavaScript计算机编程语言是基于英语的,虽然它支持使用Unicode作为标识符,但是它的关键字是英语,提供的基础库编程接口是英语。对于许多不熟悉英语的人来说,要想编写JavaScript代码,这些英语名称对他们来说是有阻碍的。
技术实现要素:
本发明的目的是针对现有技术中的不足,提供一种在计算机上实现跨人类语言编程的方法,让JavaScript计算机编程语言实现跨人类语言编程,通过设置编程语言关键字别名和设置程序库接口别名,让人们可以使用英语、中文、阿拉伯语、西班牙语等等不同的人类语言来编程。
不同人类语言编写出来的程序代码,可以让别人使用他熟悉的语言来调用接口。例如:可以使用中文来调用英语编写出的代码,可以使用中文调用阿拉伯语编写出的代码,可以使用阿拉伯语调用中文编写出的代码等等。设置别名的代码由懂得原始名语言与别名语言的人提供。不同的人类语言使用自己语言的编程语言关键字,编程语言基础库接口也是自己的语言,基础库内部实现可以是任何人类语言编写的代码。
为实现上述目的,本发明公开了如下技术方案:
一种在计算机上实现跨人类语言编程的方法,包括如下步骤:
S1设置不同人类语言下的编程语言的关键字别名,生成关键字别名注册表;关键字的别名可以是不同的人类语言;
在JavaScript语言引擎对代码作词法分析的阶段,通过查询关键字别名注册表和比较初始关键字列表,寻找对应标识符的关键字代码,如果没有找到,则把它当作普通标识符identifier;
S2通过设置对象属性的别名,实现编程语言基础库提供各种人类语言调用接口,实现提供跨人类语言编程的程序库(library);
S2.1对于已经存在的对象,通过设置该对象的属性的别名,来实现提供各种人类语言的接口;
S2.2对于通过原型对象创建的对象,通过设置原型对象属性的别名,来实现提供跨人类语言接口。
S3在程序的运行中,当需要访问某个对象的属性时,JavaScript语言引擎使用输入的属性名称查询该对象的属性别名列表和继承的原型对象的属性别名列表;如果属性别名列表有该名称,则用对应的原始名称访问对象的属性;如果属性别名列表不存在输入的属性名称,则用输入属性的名称访问对象的属性。
进一步的,所述步骤S1设置编程语言关键的方法在JavaScript语言引擎加载程序代码前执行。
进一步的,所述步骤S2.1中,设置对象属性的别名时,参数内容包含要设置属性别名的对象,属性的原始名和属性的别名。
进一步的,一个原始名可以设置一个或多个别名。
进一步的,所述步骤S2.2中,在语言引擎中,当调用设置对象属性的别名时,为该对象创建属性别名列表,该列表保存设置的别名与对应的原始名称。
本发明公开的一种在计算机上实现跨人类语言编程的方法,具有以下有益效果:
使用设置别名,能够方便增加对某一种人类语言编程的支持。当需要支持新的人类语言编程时,需要设置编程语言关键字别名,设置编程语言的基础库接口的别名和设置需要的第三方库接口的别名。
使用该方法,开发人员可以使用熟悉的人类语言编程,不需要学习英语。
使用别名,不同人类语言写出的代码可以相互通用。提供不同人类语言的别名设置,就可以调用不同人类语言编写出的代码库。
使用别名,可以混合人类语言编程。代码中可以同时出现多种人类语言编写的程序。
使用别名,可以重用现有的代码库。提供别名设置,就可以让现有的代码库支持多种人类语言。
使用开发人员熟悉的人类语言编程,可以实现编程全民化。
附图说明
图1是确定标识符类型流程图;
图2是判断访问属性名称流程图。
具体实施方式
下面结合实施例并参照附图对本发明作进一步描述。基于现有的JavaScript引擎V8,https://github.com/v8/v8,版本4.9.278实现。
一种在计算机上实现跨人类语言编程的方法,包括如下步骤:
S1设置不同人类语言下的编程语言的关键字别名,生成关键字别名注册表;关键字的别名可以是不同的人类语言;
在JavaScript语言引擎对代码作词法分析的阶段,通过查询关键字别名注册表和比较初始关键字列表,寻找对应标识符的关键字代码,如果没有找到,则把它当作普通标识符identifier;请参见图1。
步骤S1的处理的实现代码如下:修改文件src/js/v8natives.js,增加方法function GlobalObjectPropertiesAlias(alias_set),调用utils.InstallFunctions,注册_0_为GlobalKeyWordsAlias。
修改文件src/runtime/runtime.h,src/runtime/runtime-object.cc,实现GlobalObjectPropertiesAlias方法,生成关键字别名注册表。
修改文件src/parsing/scanner.cc,方法Token::Value Scanner::ScanIdentifierOrKeyword(),查询关键字别名注册表,判断是关键字还是普通标识符。
设置不同人类语言下编程语言的关键字。
中文:
阿拉伯语:
西班牙语:
_0_为设置编程语言关键字别名的方法,参数为关键字设置对数组。关键字设置对的第一个值为初始关键字,第二个为关键字别名。关键字的别名可以是任何人类语言。
通过这些方法调用,就可以把中文的'子'设为编程语言关键字'function','值'为'var',阿拉伯语为'function',西班牙语'función'为'function'等等。
作为具体实施例,所述步骤S1设置编程语言关键的方法在JavaScript语言引擎加载程序代码前执行。
在使用上面的注册关键字后,以下代码:
等价于:
function测试(){
var甲='你好!';
var乙='大家好!';
var丙=甲+乙;
};
S2通过设置对象属性的别名,实现编程语言基础库提供各种人类语言调用接口,以及实现提供跨人类语言编程的程序库library;
S2.1对于已经存在的对象,通过设置该对象的属性的别名,来实现提供各种人类语言的接口;
如:
_1_为设置对象属性别名方法,第一个参数为属性所属的对象。当该对象为空(null)时,为全局(global)对象。第二个参数为别名对数组。别名对的第一个参数为原始名,第二个参数为别名。一个原始名可以设置一个或多个别名。
通过以上设置,以下代码:
{
数.随机();
物.建();
}
等价于:
{
Math.random();
Object.create();
}
设置别名的代码在这些对象创建后调用。
S2.2对于通过原型对象创建的对象,通过设置原型对象属性的别名,来实现提供跨人类语言接口;
例如有以下函数原型代码:
通过这样设置别名:
加上关键字别名,就可以这样使用代码:
值甲=新建项();
甲.标();
甲.属性='大家好!';
甲.准备好();
值乙=新建项();
乙.标();
乙.属性='大家好!';
乙.准备好();
以上代码等价于:
设置别名的代码在这些原型对象创建后调用。
S2.3当为另一种人类语言编写的代码库提供参数时,使用原型对象别名和常量别名来实现。
当以下英语代码库所需要的参数为对象时,
function f(b){
console.log(b.name);
console.log(b.sex);
}
对象b的结构为:
可以使用以下代码设置别名。
调用设置中文别名的代码后,就可以用中文调用这个用英语实现的代码库。
值小明=新建人();
小明.名='小明';
小明.性别=人.男;
方法(小明);
值张三=新建人();
张三.名='张三';
张三.性别=人.男;
方法(张三);
设置别名的代码在使用代码库之前调用。
作为具体实施例,所述步骤S2.1中,设置对象属性的别名时,参数内容包含要设置属性别名的对象,属性的原始名和属性的别名。
作为具体实施例,一个原始名可以设置一个或多个别名。
作为具体实施例,所述步骤S2.2中,在语言引擎中,当调用设置对象属性的别名时,为该对象创建属性别名列表,该列表保存设置的别名与对应的原始名称;
步骤S2的处理的实现代码如下:
修改文件src/js/v8natives.js,增加方法function GlobalObjectPropertiesAlias(alias_set),调用utils.InstallFunctions设置全局方法_1_为GlobalObjectPropertiesAlias。
修改文件src/objects.h,修改Map类,纪录对象属性别名。作如下修改:
修改文件src/objects-inl.h,实现DECL_ACCESSORS(alias,Object)。
修改文件src/heap/heap.cc,初始化对象属性别名为空。作如下修改:
修改文件src/runtime/runtime.h,src/runtime/runtime-object.cc,实现GlobalObjectPropertiesAlias方法,设置对象属性别名。别名列表存储在对象的map的alias属性内。
S3在程序的运行中,当需要访问某个对象的属性时,JavaScript语言引擎使用输入的属性名称查询该对象的属性别名列表和继承的原型对象的属性别名列表;如果属性别名列表有该名称,则用对应的原始名称访问对象的属性;如果属性别名列表不存在输入的属性名称,则用输入属性的名称访问对象的属性。
步骤S3的处理的实现代码如下:
修改文件src/lookup.cc,方法void LookupIterator::Next(),在运行该方法时,查询对象属性别名列表。作如下修改:
本发明中的关键字别名也可直接写入代码中,不用设置方式。
以上所述仅是本发明的优选实施方式,而非对其限制;应当指出,尽管参照上述各实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,其依然可以对上述各实施例所记载的技术方案进行修改,或对其中部分或者全部技术特征进行等同替换;而这些修改和替换,并不使相应的技术方案的本质脱离本发明各实施例技术方案的范围。