17 Star 85 Fork 21

数心开物 / 青语言

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

青语言

项目介绍

青语言是一门完全基于中文语言习惯打造的编程语言,主要面向青少年、儿童和非专业人士。

语言主页:https://qingyuyan.cn

语言文档:https://doc.qingyuyan.cn

语言社区:https://forum.qingyuyan.cn

开发说明

开发环境

操作系统:Win10 x64

开发工具:VS2022

SDK:.Net7

打包方式

1、VS生成菜单->发布选定内容

2、命令行方式:

dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true 
/p:PublishTrimmed=true /p:TrimMode=Link /p:IncludeNativeLibrariesForSelfExtract=true

可切换目标运行环境

项目说明

当今世界信息化高速发展,信息技术已成为促进社会进步的重要推力。随着我国信息化的不断进步,尤其是互联网行业的高速发展,我国已迈入信息化强国的门槛,然而与发达国家相比,在信息技术创新、技术分享等方面仍存在较大差距。

这一现在现状的原因包含多个方面,但我们认为其中存在一个基础性的问题,中国没有良好的学习编程的”土壤“。当前主流的编程语言均以英文为载体,各种语言文档、使用手册也均使用英文,这对于母语非英语的人群造成了一定的使用门槛。对于专业的程序开发人员来说,可以通过学习英文来克服困难,但对于业余人员和学生来说,这大大增加了学习成本。实际上,国外很多知名程序员,包括比尔·盖茨、扎克伯格等,大多从青少年时期甚至儿童时期就开始接触编程,对于母语为英语的他们来说,不存在基础的语言障碍。反观国内,虽然近年来开始部分推行编程进入课程,但整体推广的效果并不理想。这就导致了我国缺少广泛的、良好的编程”土壤“,在争取科技制高点的过程中,这将成为我国的劣势。

为了解决这一问题,我们需要以中文为载体的编程语言,以方便大众学习和使用。

在青语言之前,已经存在一些中文编程语言,其中比较成功的有易语言、习语言等等。然而,这些语言均存在一些问题,例如闭源、不支持跨平台等。当前主流的编程语言均采用开源的发展模式,企业和社区共同扩展语言的功能,构建良好的语言生态。而上面提到的现有的中文编程语言,大多采用闭源的模式,这就导致了语言的发展推力单一,开发力量薄弱,无法形成基础的语言生态,最终无法进入主流大众视线。

基于此,我们决定打造一门完全开源的中文编程语言——青语言。

取名为青语言,意为主要面向广大青少年、儿童和业余爱好者学习和使用的编程语言,同时也希望这门语言充满青春朝气,蓬勃发展。

为了适应目标人群的需求,我们对青语言的设计目标如下: 1、使用中文为载体,消除语言障碍。 2、语法设计简洁,易于学习和使用。 3、具备简单的扩展接口,方便社区开发扩展功能。

在确定了使用中文为载体后,还需要明确中文编程语言的实现方式,我们对中文编程语言分类如下: 1、使用现有语言,采用关键字替换,实现中文编程,但本身依赖原语言。 2、从头编写实现中文编程,但语法逻辑参考主流编程语言。 3、从中文出发,设计和实现全新的编程范式。

这3种方式中,第一种实现难度低且可以借用原语言生态,但同时对原语言的依赖过高。第三种方式实现难度太高,近几十年来并未出现新的成功的编程范式,且实现后其生态构建和推广难度都较大。 综上,我们选择采用第2种方式,具体的设计构成如下:

1、语言核心参考Lisp语言。 Lisp被称为实现编程语言的语言,其极简的语言内核,非常便于实现。这样可以使得青语言的核心语言实现十分简洁,方便开源开发者参与和推动语言核心的发展。

2、语法上参考JavaScript语言。 JS编程语言语法非常简单,其最初设计也是Lisp核心,因此实现起来非常容易。对于使用者来说,需要掌握的概念少,可以很容易地学习和使用。

3、使用C#开发,运行在.Net平台上。 目前.Net平台可以说是最开放、跨平台兼容最好的编程语言之一,且本身有良好的语言生态可以借用。基于.Net平台可以使青语言具备是否良好的跨平台兼容性,同时可以方便地扩展其功能。

4、目前使用动态链接库DLL的方式扩展功能。 青语言提供简单的C#原生功能的封装方法,开发者可以通过参照示例项目,将需要的功能封装成为单个DLL文件,可以方便地分享和使用。

目前,我们已经实现了青语言的语言核心,也实现了诸如音频播放、GUI、机器学习功能的简单封装。未来我们希望通过开源社区的助力,进一步扩展青语言的功能,构建良好的语言生态。 除了语言本身和扩展功能的开发外,语言的发展还离不开丰富和优质的文档支持,所以我们也希望社区能够进一步补充青语言的教程、使用文档、代码示例等文档内容。

路在脚下,愿你我同行,迈向崭新世界。

语法概览

青语言设计中的一个核心点就是:语法尽量简单

青语言的语法主要参考了JavaScript语言,需要学习的概念较少,是一门难度极低的编程语言。在正式开始学习青语言的语法细节之前,我们先总体上了解一下青语言的语法设计。这部分适合有编程基础的使用者快速掌握青语言,如果没有编程基础看不懂也没关系,我们会在之后更详细地进行介绍。

青语言代码输入解释器后,会首先分割为语法元素,可以分为4种语法元素——关键字、符号、变量、函数 其中关键字和符号是固定的,关键字包括:

元    空    真    假    如果    再则    否则    当 
执行    直到    返回    跳出    继续    取反
异步    等待    尝试    排查    例行    遍历

由于关键字本身也是中文,如果和其他中文代码连在一起,会造成断句歧义,所以请记住,关键字需要能够和其他代码分隔开,包括通过空白、符号等实现间隔,最简单的方式就是前后留空白。

第二种语法元素是符号,包括:

;     中文分号开头表是单行注释
;; 连续两个中文分号是多行注释的开头,一直到另一个连续的双分号
,     逗号没有具体的意义,在青语言中仅表示间隔,解析期会被丢弃,同时支持中英文两种逗号
”“      中文的双引号用来表示字符串
、     中文的顿号用来向函数传递单个参数

{ }    【 】    ( )    《 》

+    -    *    /    %    +=    -=    *=    /=    %=
>    <    ==    >=    <=    !=    <>    
&&    ||
=    :

部分符号我们还提供了对应的中文,但是要注意一点,符号会自动作为语法中的分隔符,所以使用的时候可以连着其他代码一起写,但是使用中文替代时,需要前后添加空白,以避免断句歧义。符号对应的中文包括:

加    减    乘    除以    模    加等    减等    乘等    除等    模等
大于    小于    等于    大于等于    小于等于    不等于
且    或
为    设为

除了固定的关键字和符号外,剩下的就是用户可以自定义的变量和函数了,对于这两种语法元素,青语言使用了简单的方式进行标记。

#开头的都是变量,不能是单独的#号,语法解析上是从#号开始直到下一个分隔标记,包括空白或者符号。例如:

#变量1    
#甲    
#乙

@开头的都是函数,不能是单独的@号,语法解析上是从@号开始直到下一个分隔标记,包括空白或者符号。例如:

@显示  
@读文本文件

下面是基础语法概览

第一个程序
@显示、“你好,编程世界”
注释

从分号到行末的都是注释,注释的内容不会作为代码执行,以两个;;开头是多行注释,直到另一个;;

;这是一行注释,这里的内容作为对代码的说明,不会被执行

;;
    这是一段注释
    支持多行注释
    这部分内容都不会执行
;;
数据类型
空     ;空类型,表示不存在或者值为空


真     ;逻辑类型,表示逻辑真


假     ;逻辑类型,表示逻辑假


0xFF   ;二进制类型,表示二进制数据


123    ;这是整数


4.56   ;这是小数


“这是一段字符串”    ;用中文双引号括起来的部分是字符串
赋值
#甲 : 123      ;用冒号表示在当前语境给变量#甲绑定值123 


#乙 = 4.56      ;用等于号表示顺着语境链向上查找变量#乙并绑定值4.56
取值

直接调用变量名,解释器会根据当前语境向上查找变量对应的值,并将值返回,例如经过上面的赋值之后,我们输入

#甲

将会看到这样的输出

>> 123

这里,前面的>> 是输出提示符,后面的123是变量对应的值。

中缀运算

事实上,上面提到的赋值语句其实本事就是是一种中缀运算。常见的中缀运算符还包括

1+2*3/4-5  ;四则算术运算


5%3    ;取模运算


2>3    ;比较运算,包括 >, <, >=, <=, ==, <>,


1 小于 2 ;中缀运算都有对应的中文包括  加、减、乘、除以、模、大于、小于、大于等于、小于等于、等于、不等于 


        ;注意,使用中文中缀符时,一定要注意前后要有空格或其他空白字符,用作代码的分割标识





#甲 设为 123  ;设为用于赋值,对应 :号


#乙 为 4.56   ;为用于赋值,对应 = 号
数组
【1,2,3】   ;中括号表示数组,内部存放多个元素,可用逗号分隔


【1 2 3】    ;不用逗号分隔也是可以的


【1,2.3,“你好”】    ;数组可以存放任意类型的元素
对象
#张三 = @{      ; @{……}表示对象
	#姓名: “张三”      ;对象本质上也是语境,对象的属性使用 : 定义,本质上是在本级语境执行绑定
	#年龄: 15
路径

类似于中文中的组词,当我们把变量名组合起来,就表示变量的访问路径

#数组 = 【1,2,3】

#数组#1    ;这里先访问到变量#数组,然后在#数组里访问#1


          ;这里的#1表示访问序号为1的元素,数组序号从0开始,所以#1表示访问的是第2个元素,显示 2


#对象 = @{

	#姓名: “张三”

	#年龄: 15

	@显示姓名: @【】{

		@显示、#姓名



#对象#姓名     ;这里先访问到#对象,再在#对象里访问#姓名,显示 “张三”
#对象@显示姓名【】   ;对象里的函数会在对象语境内执行,这里会显示#对象内的#姓名属性
自定义函数
@双倍 = @【#某】{              ;@开头表示是函数,定义函数的格式是 @【参数列表】{执行语句...}
	返回 2 * #某           ;返回语句用于返回值






@双倍【3】     ;调用函数的方式是在函数名后面加上【实参列表】


@双倍、3       ;如果函数只有一个参数,可以使用顿号简化传参


              ;以上两种调用方式等价,返回 6
分支
如果 2 < 1 {
	@显示、“条件为真”    ;由于分支的判断条件为假,这个代码块不会执行
}否则{

	@显示、“条件为假”   ;由于分支的判断条件为假,所以执行这个代码块



;如果存在多种可能,我们可以使用“再则”进行多次判断
#甲 = 3

如果 #甲 等于 1 {
	@显示、“变量#甲的值为1”
}再则 #甲 等于 2 {
	@显示、“变量#甲的值为2”
}再则 #甲 等于 3 {
	@显示、“变量#甲的值为3”
}否则 {
	@显示、“变量#甲的值大于3”
循环
#序 = 1                   ;设置循环控制变量初始值为 1


当 #序 小于等于 10 {       ;当#序小于等于10时,循环执行

	@显示、#序             ;这里会显示从1到10

	#序 加等 1             ;每次循环让#序自增1




当 #次:1,#次 小于等于 5,#次 加等 1 { ;当语句后面跟随3个语句
	@显示、#次                        ;分别是定义循环控制变量,循环条件,每次循环结束对控制变量的操作



#某 = 1


执行 {                    ;先执行后判断循环控制条件,至少执行一次
	@显示、#某
	#某 加等 1

}直到 #某 等于 5
多任务
@斐波那契=@【#某】{如果 #某 小于 2 { 返回 #某}否则 { 返回 @斐波那契【#某-1】+@斐波那契【#某-2】}}


;使用 @分支 函数开启新的任务,这里传递的参数是代码块

@分支、{@显示、@斐波那契、30}



;使用 @并行 函数,一次开启多个任务

@并行、【


	{@显示、@斐波那契、30}


	{@显示、@斐波那契、30}


	{@显示、@斐波那契、30}


空文件

简介

简单的中文编程语言 展开 收起
C#
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C#
1
https://gitee.com/NjinN/Qing.git
git@gitee.com:NjinN/Qing.git
NjinN
Qing
青语言
master

搜索帮助