实现语言的自举

几乎所有的语言项目,其核心都是用更底层的语言写的.

底层语言大部分是 C,C++,而扩展这门语言的核心,就要用另外一种语言
去写。这给语言设计者较大的挑战。

开发语言必须具备底层语言的编写能力,而为了能用自己喜欢的语言编写
代码,就必须用另外一种低级的语言去写要经历反复测试的优秀的代码,
这是一种无奈。

很多语言的自举项目是非常吸引人的,例如 PyPy, Java 语言也实现了
自举。

现在有一种新的实现语言自举的办法:从解析语法开始

Perl6 从语言设计阶段就决定让语言实现自举:让语法分离出来。

语言的能力总是要有一定的表现形式,而这种表现形式的制定具有很强的
随意性,这种随意性和开发者的喜好,性格,阅历,经验有关。而语言的
核心能力其实相差无几,在形式上的喜好追求,造就了编程语言的多样性。

大部分语言都有和其相似的语言存在,很多人的沉迷在形式的构建上,做
了许多重复的事情。

其实形式是可以单独形成一门语言的,而这门语言可以被解释执行。这让那些
注重形式的人可以从不同形式语言的形式中解放出来,可以专注于按照自己
的风格书写代码。这种将形式独立出来的东西就是语言的语法。

在语言的语法背后,是非常单调的语言能力:

   变量赋值
   数据类型
   算数表达式
   条件判断
   循环结构
   代码续延
   函数代码块
   命名空间
   代码预处理宏
   代码注释
   类型,函数的组织架构(面向对象,元类)

还有一些语言支持并发,抽象出进程和协议栈等数据结构。
这些结构本质上是续延:

   代码可以在后台运行,而让接下来的代码继续执行。

管理在后台运行的代码,合并后台代码计算的结果,构成了并发的各种
不同表现形式。

描述语言的语言叫做语法,大部分现存的语法规则都是文档性质的,
也就是不是作为代码执行的依据,而是人写代码的参考。

也有一些可以作为代码被执行的语法,但形式多样,能力不一:

   这和语言的现状一样,形式化的不同造成了这个领域的重复建设

既然把形式分离出来,还要注重形式吗?

所有的东西,都要有一定的表现形式,如果这种形式可以被定义,那么:

   形式应当尽可能的简洁,尽可能的沿用现有的规则,被大多数人理解

      language Ruby

      main : expression+
      expression: condition | loop | assign | compute


有解析语言的能力的人,都有能力创立新的语言。有人愿意拥有这种能力后,只是转换别的语言吗?

      现存的语法主要有 BNF EBNF Antlr-g4 Haskell-Parsent


 

转载于:https://my.oschina.net/u/563463/blog/489388

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值