编译原理(二)文法和语言、符号和符号串、文法的类型、语法树
要点:
- 符号和符号串的相关概念
- 文法和语言的形式定义
- 文法的类型
- 上下文无关文法及其语法树
- 上下文无关文法的句型分析
- 有关文法实用中的一些说明
目的:
掌握文法和语言的相关概念,为以后的词法分析、语法分析、语义分析等做出准备。
2.1 文法的直观概念
语言:
是由句子组成的集合,是一组记号所构成的集合。
汉语—— 所有符合汉语语法的句子的全体
英语 —— 所有符合英语语法的句子的全体
程序设计语言 —— 所有该语言的程序的全体
形式语言和文法
如果不考虑语义和语用,只从语法这一侧面来看语言,这种意义下的语言称作形式语言。
形式语言抽象地定义为一个数学系统。
“形式”是指:语言的所有规则只以什么符号串能出现的方式来陈述。
形式语言理论是对符号串集合的表示法、结构及其特性的研究。是程序设计语言语法分析研究的基础。
文法:描述词法、语法规则的工具。用一组规则严格定义句子的结构,即对含有“无穷句子”的语言进行“有穷的表示”。
2.2 符号和符号串
2.3 文法和语言的形式定义
文法的定义
推导的定义
句型、句子
语言
2.4 文法的类型
2.5 上下文无关文法及其语法树
二义文法
- 若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
- 或者,若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的。
产生某上下文无关语言的每一个文法都是二义的,则称此语言是先天二义的。
注:程序设计语言的文法不要二义!
2.6 句型的分析
一般画出语法树来判断
判断方法:一个句型的语法树中任一子树叶结点所组成的符号串都是该句型的短语;
当子树中不包含其他更小的子树时,该子树叶结点所组成的字符串就是该句型的直接(简单)短语;
一个句型的最左直接短语称为该句型的句柄。
每棵语法树的叶子结点从左到右排列构成一个句型
每棵语法树的子树的叶子结点从左到右排列构成一个短语
每棵语法树的简单子树(只有父子两层结点)的叶子结点从左到右排列构成一个简单(直接)短语
2.7 有关文法实用中的一些说明
练习
答案:B
答案:(1) 3 (2)1010,0110,1001,0101
答案:BCD
答案:
短语:E+T、(E+T)、F、 F*(E+T)、E+F*(E+T)
直接短语:F、E+T
句柄:F
答案:
(1)终结符:if, then, else,,x,-,(,)
非终结符:S,A,B,C,D
(2)短语:if x+x then xx else –x,x+x,x*x, –x,x
直接短语:x
句柄:x
答案:B
答案:D
总结:
(1) 优先级最低的VT,出现在开始符号的产生式中
(2) 优先级越低,VT离S越近
(3) 右向左结合——左递归
左向右结合——右递归