自然语言
语言,直观来说,就是用来说,用来听,用来读。
语言都有一定的结构! 从大的方面来说, 分为 单词、语法、语义。
不同的单词组成了句子,句子的组成有一定的规则,这就是语法。 每个句子都有其具体的含义, 这就是语义。
最简单的语法就是: 主-谓-宾。如:汉语中:“我爱你”,英语中:“I love you”, 都遵循这个语法规则。
那么语义是什么呢?
“苹果爱橘子” 和 “我爱你” 有一样的语法结构,都是 :主-谓-宾。
但是 “苹果爱橘子” ,这句话有点难以理解, 苹果怎么会爱橘子呢? 这句话的语义就不对了, 所以不能被理解!
上面说的是自然语言。计算机语言,当然也是属于语言范畴。
计算机语言
既然是语言,也必定遵循一定的结构: 单词,语法,语义。只是这个语言是为计算机服务的,能够被计算机理解并且执行。
单词
对于计算机语言来说,最基本的单词就是 关键字、标识符、字符串、数字、运算符。
if else, while 是最常见的关键字。
+、-、*、/ 是最基本的运算符。
变量名、函数名、类名,是最基本的标识符。
语法
每个语言都有独特的语法。 如 while, if else, 函数的定义、类的定义, 不同的语言,就有不同的语法。
语义
除了语法,当然还得识别语义。 如 遇到了while, 就知道这是循环; 遇到了 if else, 就知道这是条件判断, 这些需要通过语义分析才知道。
说了这么多,其实就是想说明,五花八门的语言 ,它们都有一定的规律,有规律的语言才能为计算机所用。 所以是否有一套通用的语法规则,可以去定义一门语言呢?当然了, 上下文无关文法就可以用于定义目前所有的计算机语言。
上下文无关文法
上下文无关文法是由语言学家Chromsky提出的, 后面就被运用于计算机语言的设计了。 上下文无关文法只是属于Chromsky语法框架里的一种而已。 在他的语法框架中有四种四种语法:3型语法、 2型语法、1型语法、0型语法, 这四种语法的表达能力逐渐增强。其中3型语法就是所说的正则表达式。 说到正则表达式, 就要联系到有限自动机,正则表达式是等价于有限自动机的, 当然这不在本次讨论范围之内。 从这个里也看出,学科之间存在普遍的联系, 语言学家提出的语法框架竟然能被计算机所用, 并且广泛的应用于编译原理, 自动机理论。
编译原理
所以计算机语言是有一套理论基础的, 这个理论基础就包括上面提及的上下文无关文法和正则表达式 以及 自动机理论。
一门语言要被计算机所用,计算机就得理解这门语言。 怎么理解呢?当然是直接从语言的结构展开。前面说了, 语言都存在基本的结构, 即: 词法、语法、语义。
那么计算机要理解语言,当然就得从 词法分析, 语法分析,和语义分析展开, 这属于编译原理的范畴了。
词法分析
词法分析,就是分析单词。 把语言中的单词抽取出来,并且忽略无关的信息。 注释、 空格就是无关的信息。 字符串、数字、标识符、关键字, 这些单词需要靠词法分析程序去识别。
那怎么分析呢? 正则表达式非常适用于定义单词,如 最常见的手机号码,就可以用正则表达式来表达。 所以可以用正则表达式做词法分析。正则表达式的背后实现逻辑是可以基于自动机的。
语法分析
目前的计算机语言的语法都可由上下文无关文法表达。定义好语法之后, 就要基于语法分析程序去判断语法是否正确, 并且生成一棵语法树。
总结
计算机语言和自然语言一样, 遵循一样的语言结构。基于语言结构展开,用正则表达式去表达单词,用上下文无关文法去表达语法。而正则表达式和上下文无关文法都是由语言学家Chromsky发明的。定义好单词和语法之后,计算机还得理解该语言,通过词法分析, 语法分析和语义分析, 该语言才能被计算机理解!
网友评论