AlexiaChen / AlexiaChen.github.io

My Blog https://github.com/AlexiaChen/AlexiaChen.github.io/issues
88 stars 11 forks source link

开始学编译原理一点有趣的东西 #49

Open AlexiaChen opened 4 years ago

AlexiaChen commented 4 years ago

title: 开始学编译原理一点有趣的东西 date: 2017-03-28 10:48:27 tags:

唉,好像又回到大学被《编译原理》狂虐的时代了。因为最近在设计自己的脚本语言解释器,由于词法分析阶段用正则文法(3型文法)就能搞定,但是语法分析阶段不学习上下文无关文法(2型文法)是不行的了,所以出来混迟早是要还的

我在之前的文章《什么是类型安全》提到过著名语言学家乔姆斯基的一个例子,是为了说明语法和语义的区别。其实乔姆斯基作为世界顶级的语言学专家为语言学的研究发展做出了很大的贡献,不要以为人类的语言与程序设计语言没有半点关系(确实,它们之间的关系并不大),乔姆斯基的贡献之一,就是在形式语言(formal language)领域提出了著名的乔姆斯基层级谱系(Chomsky hierarchy),它把所有的形式语言的形式文法分成了四大类,分别是0型文法,1型文法,2型文法,3型文法。从包含关系上来说,0型文法 > 1型文法 > 2型文法 > 3型文法。 符号'>'表示,X范围大于X, 0型文法是1,2,3型文法的超集(superset)。

那么计算机编程语言到底与上面的形式文法有什么关系呢?因为计算机编程语言的定义就需要用到上面的形式化文法来描述。

其实很多计算机相关的语言背后都有一定的基础。比如:

参考