任何高级语言程序都可以看成一个特定字母表上的一个字符串(有穷序列)。

1.语法:就是指上面字母表的规则,用它可以形成和产生一个合法的程序。

词法规则:是指单词符号的形成规则(一般包括标识符、常量、保留字、界符、算符等类型)。

语法规则:就是使用单词符号构成更大的结构。一般高级语言的语法单位有:表达式、语法、函数、程序等。

字母表:元素的非空有穷集合,习惯上用和大写字母表示。

2.符号串的正闭包

A是符号串集合,则A+称为符号串集合A的正闭包

A+ = A+=A1A2A3 …∪An

(和星闭包的区别就是没有空串)

符号串集合的的星闭包

A* =A0A1A2A3 …∪An=A0A+

(这就是一个无限的信息,即由A中的元素构成任何串都在其中。)

3.文法:语言是特定字母表具有一定语法结构的符号串序列的结合。

文法就是描述语言的语法结构的一组形式规则。一个文法G是由一个四元组:G=(Vn,Vt,S,P)

Vn:一个非空有限非终结符号的集合。(出现在左边大写字母或<>括起来表示一个字符串的就是非终结符号)

Vt:一个非空有限的终结符号的集合。

S:文法的开始符号。开始符必须在某个产生式的左部出现一次。

P:产生式的有限集合。

4.文法的分类

 将文法和语言分为4大类:0型、1型、2型、3型。(每一个前面的都包含后一个,可以说后一个是前一个的特例)

0型:又可以称为无限制文法。例如:ADAC这种一定是0型。

1型:就是规范了一下0型,提供一个上下文,所以又称上下文有关文法。xUyxuy(xyV*UVnuV+)

2型:又称上下文无关文法。就是1型中的xy均为ε。这个也是最常见的一般文法。

3型:文法G=(Vn,Vt,S,P),如果它产生形式都如下:

    AAа:左线性文法

    AаBAа:右线性文法

其中A,BVnаVt*.

5.短语:代替的部分是被代替的部分的短语,只是代替一个非终结符号。

简单短语:最后的直接的推到,并且代替的是一个非终结符号。、

句柄:最底层最左边的简单的短语就是句柄。

6.文法的二义性:简单的来说就是一个文法有两颗不同的语法树。

乔姆斯基把文法分为四种类型

   0,1,2,3

   0型强于1型,1型强于2型,2型强于3型。这几文法的差别在于对产生式施加不同的限制。

7.文法的实用限制:

有害规则:如u--->u,他会产生文法的二义性。

多余规则:在所有的推到过程中没有用到的或用于就是得到非终结符号。

 

课后习题:
编译原理第二章课程笔记

 

 学习总结:学完第二章,感觉编译原理偏向于理论化比较抽象,虽说有语法文法,但更多的与数学相关。总之还是要学好基础,多加利用,才能熟练掌握。

 

相关文章: