自制中文编程语言一

  • 一、语言设计
    • 1. 设计目的:
    • 2. 设计目标:
    • 3. 代码规则

一、语言设计

1. 设计目的:

一直以来,有关于中文编程语言的争论从未停止,很多程序员认为没必要设计中文编程语言,主要观点为没必要,例如中文编程不如英文方便,中文编程语言风格难以习惯,甚至与感觉中文写的代码很怪异等。但使用中文写的程序在可读性上无疑更优于英文编程(至少对大部分中国人来说是这样),而且使用中文编程也能使非专业人士更容易上手编程,从而自己设计程序完成工作。
        当然,设计一门语言绝对不是一件轻松容易的事,首先作为现代编程语言,面向对象是基础,然后灵活性,可扩展性,与其他语言互相调用以及平台的兼容性等都需要考虑。其次现在计算机基本都是多核CPU,那么如何方便使用多核加速等也应当考虑其中。当然这需要很多大佬的参与才能完成,而我目前的目的很简单:探索一套适合中文编程的语法规则。当程序编写规则确定之后,底层的各种功能支持皆可由感兴趣的网友一起完善。

顺便说一句,项目暂命名为“无极”。作为开源项目,仓库建立在gitee(码云)中,网址为:
https://gitee.com/zhf888/wuji.git

2. 设计目标:

1、项目参考前桥和弥所著《自制编程语言》,使用lex和bison工具制作词法分析器和语法分析器。之所以不自己写而使用工具的原因有两个,第一本人非计算机专业,没学过编译原理,所以从零开始写词法分析器有一定难度。第二既然有可用工具,而且本项目是完全开源,不作为商业用途,任何人都可以参与完善和优化,任何人都可以下载使用的,不会涉及许可证等问题,因此可不必花太多时间在造砖上。当然后续如果有大佬支持使用纯C语言写出词法分析器则更好。(只是不知道有没有感兴趣的网友一起来完善)
        2、考虑应当方便各硬件平台兼容,因此决定设计解释语言,使用C语言编写解释器,待解释器完善后,可在各平台编译出适合其运行的程序。另外虽然作为程序,也不应该如天书一般谁都看不懂,所以自然语言化也是考虑之一。

3. 代码规则

1. 源文件使用UTF-8编码:当前使用范围较广的编码方式为utf-8,且大部分编辑器都支持编写utf-8格式文档。
        2. 程序结构:支持在顶层结构中书写代码,例如要打印“hello word”,无需像C或java一样包裹在函数或者类中,直接在源文件中使用以下方式即可

打印(“hello word”)

当然其中的括号,双引号等均为中文输入模式下的标点符号,作为中文编程语言,自然需要使编程时尽可能少切换输入法即可完成编程,否则不断切来切去我自己都烦。
        3. 数据类型:
            a. 布尔型:值为“真”或者“假”
            b. 整数型:即为解释器C语言环境的int型
            c. 实数型:即底层C环境的double型,当整数型和实数型运算时,整数型将被扩充为实数型
            d. 字符串型:可以通过+运算符连接,当字符串在左侧,用+连接其他内容的话,右侧内容将被转为字符串型。例如

圆周率 = 3.1415926
打印(“圆周率:”+圆周率)    # 将显示 圆周率:3.1415926

e. 原生指针型:类似于C语言的FILE*,用于解释器内部跳转(不同于操作内存的C语言指针)。
        4. 变量:与python等一样,都是采用静态无类型(变量无需声明类型)语言,变量的类型在初始化赋值的时候就已经声明,如果直接引用未初始化的变量则报错。
            a. 变量命名,除了支持和C语言一样的英文字符命名外,最终要的肯定是支持汉字命名了。所以解释器中设计了支持纯汉字变量名和“英文_汉字”的命名方式。这样设计的好处是,除了类似“苹果”,“香蕉”可以作为变量名外,还能使用如“NLP算法()”等这样高逼格的变量或函数名(YY一下有网友去做这个牛逼的功能)
            b. 在顶层结构中赋值的变量会成为全局变量,函数内使用全局变量是需要使用“全局:”进行声明,声明后即可在函数中使用全局变量,否则函数内使用的变量均为局部变量

全局:变量名,变量名

声明后即可在函数中使用全局变量,否则函数内使用的均为局部变量,例如:

人数 = 10
函数: 公司人数()
{   全局:人数人数 = 30    # 此时的人数是全局变量
}函数:班级人数()
{人数 = 40   #此使的人数是局部变量打印(“班级人数:”+人数)
}公司人数()   # 将全局变量修改未30
班级人数()    # 打印出的人数为40
打印(“人数:”+人数)  # 打印出的人数为30

5. 语句与结构控制:
            a. 条件语句,说到条件判断,首先想到的肯定是:如果……否则……,因此无极采用的条件判断于此类似具体形式如下所示:

如果:判断条件 {# 执行的代码块
}
若是:判断条件 {# 执行的代码块
}
否则 {    # 执行的代码块
}

b. 循环语句,与英语不同的是,中文里循环的表达好像只有“循环”这一个词比较贴切,所以考虑只用一个词作为循环结构的语句关键字,用它实现以下结构:

# 1. 类似 while 的使用方法
循环:苹果 > 0 {   打印(“你还有”+苹果个数+“可以吃”)
}# 2. 类似 for 的使用方法
循环:苹果 = 5,苹果 > 0,苹果-- {打印(“你的苹果还剩”+苹果+“个”)
}

使用以上方法,则可以直接用一个关键字作为两种循环的功能,虽然他们彼此之间可以互相代替,但是考虑代码的简洁性等还是保留这两种用法。当然,还需要有使其跳转的流控制语句,无极选用:跳出(跳出内层循环),跳过(跳过内层循环的剩余部分,开始下一次循环),返回(退出当前函数)。其中返回对于部分函数具有返回值而言,需要进行值返回,可采用

返回       # 无返回值的退出方式
返回:返回值   # 有返回值的退出方式,中间用冒号连接

6. 运算符

符号 汉字描述 作用
- 单目取负
* / % 乘、除、求余 乘法、除法、求余
+ - 加、减 加法、减法
> >= < <= 大于、大于等于、小于、小于等于 大小比较
== != 等于、不等于 同值比较
&& || 同时、或者 逻辑与、逻辑或
= 赋值 赋值符

综上,目前版本的无极已支持数组及函数共功能,贴上经典的冒泡算法源码及运行结果。其它内容后续边开发边发布,诚挚邀请感兴趣的网友一起用业余时间来完善,欢迎联系QQ:1159878350


自制中文编程语言一(语言设计一)相关推荐

  1. 中文编程语言Z语言开源正式开源!!!

    (Z语言基于.NET环境,源码中有很多高技术的代码,让更多的人知道对大家有会有很好的帮助,请管理员一点要批准放在首页) 本人实现的中文编程语言Z语言现在正式开源,采用LGPL协议. 编译器核心的网址为 ...

  2. 编程语言C语言用中文代写方法,C语言中如何输入汉字,C语言乱码详细解答

    OK,那么我们首先来看一下中文编码: 你以为会写中文就会编程吗?这就像你以为会写汉字就会写出好文章一样.编程是和机器沟通,因此要用机器的语言而不是人类的语言.最早的程序就是0和1的数字,不是中文也不是 ...

  3. 用 C 语言开发一门编程语言 — 字符串的设计与实现

    目录 文章目录 目录 前言 前文列表 字符串与文件库 字符串 print 关键字函数 error 关键字函数 注释 文件加载 函数注册 命令行参数 前言 通过开发一门类 Lisp 的编程语言来理解编程 ...

  4. 2018-01-05 通用型的中文编程语言探讨之一: 高考

    在可预见的未来, 高考仍是最重要的也最有社会影响力的人才选拔机制. 很久没有关注, 最近得知高考自选科目中开始增加了编程一项(见如何评价2017浙江高考七选三科目中包含技术?). 虽然个人对编程是否应 ...

  5. java和易语言对比_国外流行排行榜编程语言和易语言相比较的优势和劣势

    国外流行排行榜编程语言和易语言相比较的优势和劣势 适合对象:对于初学者或者没有接触过编程语言的朋友有巨大参考价值. 比较特点:以C语言和Java两门最流行也是最经典的外国编程语言来和易语言相比较, 比 ...

  6. APP的多语言设计我们可以做点什么?

    最近app上线的时候遇到很多多语言的问题,因为我们的app有七八种语言,而设计的时候是用英语设计的,所以遇到很多的问题,在网上找到下面这篇文章,里面有些内容可以参考. 前言:因为工作关系,我目前做的A ...

  7. 通用型的中文编程语言探讨之一: 高考

    在可预见的未来, 高考仍是最重要的也最有社会影响力的人才选拔机制. 很久没有关注, 最近得知高考自选科目中开始增加了编程一项(见如何评价2017浙江高考七选三科目中包含技术?). 虽然个人对编程是否应 ...

  8. 2018-01-05 通用型的中文编程语言探讨之一: 高考 1

    在可预见的未来, 高考仍是最重要的也最有社会影响力的人才选拔机制. 很久没有关注, 最近得知高考自选科目中开始增加了编程一项(见如何评价2017浙江高考七选三科目中包含技术?). 虽然个人对编程是否应 ...

  9. Go在谷歌:以软件工程为目的的语言设计

    From: http://www.oschina.net/translate/go-at-google-language-design-in-the-service-of-software-engin ...

  10. deepin终端编译c程序_在deepin linux上安装国人开发的编程语言-“明”语言

    闲来无事,在网上看到了介绍<>这篇文章,找到了它在gitcafe的地址:http://gkmail.gitcafe.io/ming/,这是国人开发的一个脚本语言,中文名称"明语言 ...

最新文章

  1. LeetCode集锦(八) - 第26题 Remove Duplicates From Sorted Array
  2. PowerDesigner教程系列(四)概念数据模型
  3. 00069_DateFormate
  4. juns java,学习动态性能表第六篇-(1)-V$SESSION_WAIT 转自三思 http://junsansi.itpub.net/post/29894/292373...
  5. RedisTemplate设置过期时间
  6. glob,正则表达式元字符,扩展正则表达式总结
  7. linux as5 启动mysql_RedHat AS5 PHP添加JSON模块
  8. linux系统装好后优化,CentOS 5.6 Linux安装系统后的基本优化
  9. 对JVM GC进一步的实例解析
  10. 教育统计与测量【1】
  11. 【数字信号调制】基于matlab 16QAM信号调制解调【含Matlab源码 2050期】
  12. excel文件被写保护怎么解除_u盘被写保护怎么解除_u盘怎么解除写保护状态
  13. web3调用智能合约取事件
  14. 目标检测:损失函数之SmoothL1Loss
  15. uva 572 Oil Deposits
  16. 基于Java毕业设计大学生兼职网站源码+系统+mysql+lw文档+部署软件
  17. mysql触发器大全
  18. java 路由框架_使用Spring框架和AOP实现动态路由
  19. 操作系统文件系统设计实验报告
  20. 快手国际版Kwai测试海外电商直播,社交App的尽头是直播电商?

热门文章

  1. 腾讯敏感词汇大全_腾讯数平精准推荐 | OCR技术之识别篇
  2. mysql明文密码_MySQL明文密码备份解决
  3. SPSS中K均值聚类操作案例
  4. Qt 之 QQ系统表情(三)
  5. 线性插值和双线性插值
  6. RFID ACR-122U M1射频卡破解分析
  7. matlab给语音信号添加噪声
  8. 最适合入门的laravel初级教程(一)序言
  9. 医院标准化信息中心机房建设心得
  10. JS 如何实现获取本地文件夹名称