猫史档案馆


【简体化同步发帖】【编程语言】Awa Script - 预告

用户:Fox_AwaFox_Awa查看:1 回复:10 评论:1 创建时间:2020-08-31T12:38:56


Awa Script,一门简单并可自定义的编程语言。

此编程语言可快速被解释器解释,并且和Javascript有一些相似之处,可以快速上手。

例:

function add(a,b){
    return a+b;
}

在Awa Script中不需移植即可使用。

【快速编译解释器】附带的dlfcn.h可以让解释器程序在Windows下也顺利完成编译。

【! 】注意:如果您的平台不是Windows或Linux之间的任何一种,请提供dlfcn.h的实现方式并将其copy到库中。

【简单性】相比Javascript,Awa Script移除了一些难以理解或您的软件不需要的特性,如this关键字(变更为在类中调用函数会先搜寻类内部再搜寻全局)。同时,Awa Script不接触2进制,因此没有与,或,异或等二进制运算。要模拟二进制运算,请使用Array。以下是一个1 Byte(8位)二进制(值为120)的表示方式:

[true,true,true,true,false,false,false] => 1111000 => 120

【new关键字】new关键字只能用于=操作符(当然可以重写eval方法,自己进行重载),否则会发生错误。 new关键字的作用和Javascript类似,不过由于this对象移除,所以直接在函数体内var即可。系统会自动取导出变量表,转换成Object并赋值到变量。

【没有引用】在C++,Javascript中,都存在着引用一说。然而,Awa Script中是没有引用的,因为变量参数在parse阶段就被替换了(如果是expression,会调用内部方法解析expression),当然,您也可以修改parse方法,使其不自动替换变量,从而达到引用的效果。您也可以在eval方法,执行函数后导出变量表并覆盖来达到引用的效果,不过这有些难。

【避免无效语句】在编程当中,常会出现类似于1+1;这样的无意义语句,在Awa Script中,若您不变更parse.h,这是不被允许的。这有助于提升程序效率。

【可自定义的】您几乎可以自定义Awa Script的任何代码!只要您有相应的技术,您甚至可以完全改写文法(或者以解释器为基础制作Javascript(ECMAScript)解释器)。以下列出了从简单到困难的自定义,从上(愈简单)往下(愈困难)排列。

1.关键字改名 这几乎不费吹灰之力,只要您会一点C++,就可以很好地做到这一点。

2.扩展库 您可使用C++进行库编写,然后import "libxxx.so";即可使用。不过这可能不美观,您可在.awh文件中写import,然后import "libxxx.awh";来包含文件。和import "libxxx.so"具有同等效力。不过,在C++编译器中,函数名可能被改写(改写后的函数名比较奇怪),可以在函数声明前加入extern "C",示例:

extern "C" int add(int a,int b){
    return a+b;
}

(这只是示范而已,实际上参数并不是这样的!)

则在.aws文件中可直接使用"add"函数。否则,您需要使用

Linux:喵 libxxx.so | grep "函数名"

Windows(在安装了gcc并且设定了环境变量的情况下):喵 libxxx.so | find "函数名"

来获得编译后的函数名。

 

上述提到的,有些已完成,有些还未开始,有些正在开发中。

 

一切请看未来的Github Awa Script项目。

 

(Language:zh-cn)

 

 

 


回复

上一页1 页 / 共 1下一页
Fox_AwaFox_Awa

【作者消息】最近因为UTF-8不支持的问题从Dev-C++换成了Code::Blocks,有些不适应,正在练习中~

点赞0


评论


Fox_AwaFox_Awa

【作者消息】应大多数人要求,发布了简体版,并同步作者消息。请不要在意发布时间emotion_编程猫_冷漠

点赞0


评论


Fox_AwaFox_Awa

【悲报】明天开学,生产力大幅下降,请谅解

点赞0


评论


阳光的流熔怪Uyt5阳光的流熔怪Uyt5

GIAO!加油

点赞0


评论


Abyss_深渊Abyss_深渊

点赞0


评论


Fox_AwaFox_Awa

【作者疑问】目前为了内部开发测试,基于现有的代码实现了一个简易解释器原型(仅支持print,print的定义为:print(string,string...))(实际上并没有参数规定,只是调用parse方法后取Argument而已)。但是出现了不支持中文的问题。在活动代码页为936(GBK?)的情况下,能够正常地处理中文。但是,在活动代码页为65001(UTF-8,美国,英语)时,程序无法正常处理中文字符,但可以处理英文。为什么???

点赞0


评论


Fox_AwaFox_Awa

【投票】由于同步发贴可能会导致统计不便,所以请前往繁体版查看投票,谢谢。

点赞0


评论


Fox_AwaFox_Awa

【投票】投票已结束,废除【避免无效语句】项,请注意。

点赞0


评论


Fox_AwaFox_Awa

最新进展:

center_image

点赞0


评论


Fox_AwaFox_Awa

最新进展(作者114514%努力的结果):

center_image

点赞0


评论