一、知识点
1.程序语言由语法和语义两方面定义。
2.语义:一组规则,使用它可以定义一个程序的意义。
3.语法:一组规则,用这组规则可以产生形式上正确的程序。
(1)字母表是一个有限的字符集,包括大小写英文字母、数字、特殊字符。
(2)单词符号是语言中具有独立意义的最基本结构,一般包括常数、标识符、基本字、算符和界符。
(3)语法单位是由单词符号构成的更大的结构,一般包括表达式、语句、分程序、函数、程序。
4.高级语言分类
(1)根据程序设计范式分类:强制式语言,应用式语言,基于规则的语言,面向对象的语言。
(2)编译时是否需要类型检查分类:静态类型语言和动态类型语言。
(3)根据类型检查强弱分类:弱类型语言和强类型语言。
5.一个数据类型包括以下三种要素:
(1)用于区别这种类型的数据对象的属性
(2)这种类型的数据对象可以具有的值
(3)可以作用于这种类型数据对象的操作
6.字母表:由若干元素组成的有限非空集合,用S表示,它的每个元素称为一个符号。
7.符号串: 由S中的符号所构成的有穷序列。
空字:不包含符号的序列称为空字,记为e。
8.上下文无关文法
文法是描述语言的语法结构的形式规则,上下文无关文法的特点,它定义的语法范畴完全独立于这种范畴可能出现的环境的。
特点:独立性 缺点:不能用来描述自然语言
9. 一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。
(VT,VN,S,P)
10.语法分析树:简称语法树。用来表示推导过程。
(1)语法树的根结由开始符号所标记。
(2)随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。
(3)在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型
11.文法的二义性
如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是法是二义的。
12.文法二义性的几个问题
(1)文法二义不等于语言二义
(2)文法的二义性是不可判定的
(3)文法的二义性证明:找出一个句子,它有两个不同的最左推导或最右推导
(4)文法二义性的消除:给每个产生式定义优先级
二、课后作业
6.(1)L(G6)是0,1,2,3,4,5,6,7,8,9
(2)最左推导:
N=>ND=>NDD=>NDDD=>0DDD=>01DD=>012D=>0127
N=>ND=>3D=>34
N=>ND=>NDD=>5DD=>56D=>568
最右推导:
N=>ND=>N7=>N27=>ND27=>N127=>D127=>0127
N=>ND=>N4=>D4=>34
N=>ND=>N8=>ND8=>N68=>D68=>568
7. N=>AB|B
A=>AC|D
B=>1|3|5|7|9
D=>B|2|4|6|8
C=>0|D
8.文法:
E=>T|E+T|E-T
T=>F|T*F|T/F
F=>(E)|i
最左推导:
E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i
E=>T=>T*F=>F*F=>F*(E)=>i*(E+T)=>i*(T+T)=>i*(F+T)=>i*(i+T)=>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
E=>T=>F*T=>F*F=>F*(E)=>F*(E+T)=>F*(E+i)=>F*(T+i)=>F*(F+i)=>F*(i+i)=>i*(i+i)
语法树:
i+i+i : E i*(i+i): E i-i-i: E
/ | \ / | \ / | \
E + T E + T E - T / | \ | | / | \ / | \ |
E + T F T T * F E - T F
| | | | | | | | |
T F i F F i T F i
| | | | | |
F i i i F i
| |
i i
9.
S=>iSeS=>iSei=>iiSei=>iiiei
S=>iS=>iiSeS=>iiSei=>iiiei
10.
S=>TS|T
T=>(S)|()
11.L1:
S=>AC
A=>aAb|ab
C=>cC|ε
L2:
S=>AB
A=>aA|ε
B=>bBc|bc
L3:
S=>AB
A=>aAb|ε
B=>aBb|ε
L4:
S=>A|B
A=>0A1|ε
B=>1B0=>A
三、感悟
习了编译原理第二章,知道了一些基础的定义、高级语言的一般特性,程序语言的语法描述,上下文无关文法及语法树。其实个人感觉这门课不简单,本身自己学习这类的课程就很难理解,入门比别人慢,但是还是会认认真真的学习,争取学习到一些东西,为将来就业工作积累基础。