注:博客内容是先在Word文档中编辑后,粘贴过来的,语法树的连线和表示空字的希腊字符显示不出来。
编译原理学习总结
——第二章 高级语言及其语法描述
一、 知识体系
(一) 程序语言的定义
1. 语法:是指一组规则,用它可以形成和产生一个合式的程序。一部分称为词法规则,另一部分称为语法规则。
(1) 词法规则:指单词符号的形成规则。
(2) 语法规则:指语法单位的形成规则。
2. 语义:指可以用来定义一个程序的意义的一组规则,这些规则称为语义规则。
(二) 高级语言的一般特性
1. 高级语言的分类
(1) 强制式语言;
(2) 应用式语言;
(3) 基于规则的语言;
(4) 面向对象的语言。
2. 程序结构
(1) FORTRAN;
(2) Pascal;
(3) Ada;
(4) Java;
3. 数据类型与操作
(1) 初等数据类型:数值数据、逻辑数据、字符数据、指针类型;
(2) 数据结构:数组、记录、字符串、表格、栈和队列;
(3) 抽象数据类型
4. 语句与控制结构
(1) 表达式;
(2) 语句(赋值句、控制语句、说明句、简单句和复杂句)。
(三) 程序语言的语法描述
1. 上下文无关文法
(1)文法:描述语言的语法结构的形式规则(即语法规则)。
(2)上下文无关文法:它定义的语法范畴(或语法单位)是完全独立于这个范畴可能出现的环境的。
(3)上下文无关文法由四部分组成:一组终结符号,一组非终结符号,一个开始符号,一组产生式。
(4)其他概念:句型、句子、语言、最左推导、最右推导。
2.语法分析树和二义性
(1) 语法树:表示了一个句型种种可能的(但未必是所有)不同推导过程,包括最左(最右)推导。
(2) 二义性:如果一个文法存在某个句子对应两个不同的语法树,或有两个不同的最左(最右)推导,则这个文法是二义的。
3. 形式语言
(1)0型文法:也称短语文法,左部和右部都既可含有终结符,也可含有非终结符,但左部至少含有一个非终结符。
(2)1型文法:也称上下文有关文法,在0型文法的基础上,左部长度必修小于等于右部长度(右部为空字除外)。
(3)2型文法:也称上下文无关文法,在0型文法的基础上,左部只可含非终结符,右部既可含终结符也可含非终结符。
(4)3型文法:也称正规文法,在0型文法的基础上,左部只含非终结符,右部只含终结符或既含终结符又含非终结符。若右部终结符在非终结符左侧,则称右线性文法;反之,则称左线性文法。
二、 课后习题
4.(1)1+1*2↑2*1↑2
=2*2↑2*1↑2
=4↑2↑2
=16↑2
=256
(2)1+1*2↑2*1↑2
=1+1*4*1
=2*4*1
=8*1
=8
6.(1)N→D
N→D1…DnN
∴L(G6)=Dn
(2)0127 最左推导:N=>DN=>0N=>0DN=>01N=>01DN=>012N=>012D=>0127
最右推导:
N=>DN=>DDN=>DDDN=>DDDD=>DDD7=>DD27=>D127=>0127
34 最左推导:
N=>DN=>3N=>3D=>34
最右推导:
N=>DN=>DD=>D4=>34
568 最左推导:
N=>DN=>5N=>5DN=>56N=>56D=>568
最右推导:
N=>DN=>DDN=>DDD=>DD8=>D68=>568
7.S→AB|AFEB
A→+|-| 空字
B→1|3|5|7|9(末位)
C→2|4|6|8
D→B|C|0
E→ED|D| (中间位)
F→B|C (首位)
8.(1) i+i*i最左推导:
E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i
最右推导:
E=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i=>i+i*i
i*(i+i) 最左推导:
E=>T=>T*F=>F*F=>i*F=>i*(E)=>i*(E+T)=>i*(F+T)=>i*(i+T)
=>i*(i+F)=>i*(i+i)
最右推导:
E=>T=>T*F=>T*(E)=>T*(E+T)=>T*(E+F)=>T*(E+i)=>T*(T+i)
=>T*(F+i)=>T*(i+i)=>F*(i+i)=>i*(i+i)
(2)语法树:
i+i+i
代次
E(根) 1
E + T 2
E + T F 3
T F i 4
F i 5
i 6
i+i*i
代次
E(根) 1
E + T 2
F T * F 3
i F i 4
i 5
i-i-i
代次
E(根) 1
E - T 2
E - T F 3
T F i 4
F i 5
i 6
9.
∵
S=>iSeS=>iSeiS=>iSeiiSeS=>iSeiiSei=>iSeiiiei=>iieiiiei
S=>iSeS=>iSeiSeS=>iSeiSei=>iSeiiSei=>iSeiiiei=>iieiiiei
该文法存在iieiiiei右两个不同的最右推导
∴这个文法是二义的。
11.L1:
S→EF
E→aEb|空字
F→Fc|空字
L2:
S→EF
F→bEc|空字
E→Fa|空字
L3:
S→EF
E→aEb|空字
F→aFb|空字
L4:
三、 感受
学习编译原理,虽然知道知道它的用途,但貌似感觉距离很遥远。刚刚开始学习,感觉概念性的知识很多,能理解但是很难记住,只看课本和课上听讲,虽然能理解大部分的内容,但是感觉好像每个知识点都是独立的,串不起来,到章节末进行了总结,列了知识体系,才把各部分关联起来。文法部分刚开始的时候有些地方理解不了,后来看了书做了题,就感觉没那么难了。每章总结对理解和巩固知识有很大的帮助。