您的位置:首页 > 其它

SPIR-V 研究:编译器基本原理(二)

2015-12-18 15:48 246 查看

SPIR-V 研究:编译器基本原理(二)- 语法

标签(空格分隔): SPIR-V Graphics Vulkan

上一篇介绍了计算机语言的基本知识,这一篇主要讲讲语法。语法是一组能生成对应语言语句的规则,这一般是一个有限集合,也就是只有有限多个规则。所以,根据给定语法和字母表,我们可以生成所有符合规则的语句。比如下图:



Formal Language

这里所讲的语言其实就是形式语言(formal language),对应的语法就是formal grammar。语言L是一组长度有限的字符串(语句)。

L可以包含有限个数的语句;最小的语言不包含任何语句。

L还可以包含无限多个语句;比如一般编程语言就是如此。

由于一个句子可以属于或不属于某一语言,所以需要一种规则或方法还检验给定语句是不是属于特定语言。这种规则就是语法;检验的过程就是Parse的过程。

Formal Grammar

语法有四种元素构成。可以参见这篇好文章:Formal Grammar。

首先是一个字母表Σ,它包含所有的**有限个的**terminal symbols;terminal symbols,顾名思义就是最终的字符,不是中间的表示符号。因为语法基本上是一个递归替换的符号的过程;当所有符号都是最终字符时,替换过程结束,这时得到的就是这种语法生成的一个语句。比如:

Σ = { "a", "the", "dog", "cat", "barked", "napped"}


其次是一个包含有限个中间字符的集合N(nonterminal symbols).

中间字符是特殊的,可以把它们想象成wildcards;最终会被替换成其他符号。比如:

N = { "<sentence>", "<noun>", "<verb>", "<article>" }


再次是必须有一个中间符号最为起始符号S;它是所有可能的替换生成过程的开始。比如:

S = "<sentence>"


最后我们要有一组生成规则P(production rules);这是有限集合,定义了怎么样来组建语句。比如:

P = {
"<sentence>" → "<article><noun><verb>"
"<article>" → "a"
"<article>" → "the"
"<noun>" → "dog"
"<noun>" → "cat"
"<verb>" → "barked"
"<verb>" → "napped"
}


一个Formal Grammar就可以表示为以上四个集合的元组(tuple)。

G = { N, Σ, P, S }


正式的数学语言描述为:



具体也可参见wikiFormal_grammar.

The Chomsky hierarchy

数学大牛Noam Chomsky很早就研究了语言和语法,并对语法提出了分类。也就是所谓的Type-0,Type-1, Type-2和Type-3语法。其中最有用的是Context-free grammars (Type 2) and Regular grammars (Type 3).

它们之间是包含关系,Type-0是没有任何限制的语法,可以描述最多的语言;其他的都是一步步加上各种限制后得出的语法,它们能描述的语言也就越来越少;然而它们却更简单更有用。事实上很多编程语言的语法都是正则表达式来描述的,也就是type-3。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: