- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序语言的语法描述与分析
目的:
本章内容
引言
-文法
文法与语言
-上下文无关文法
-推导与语言
语法树与二义性
第三章 上下文无关文法
(context-free grammar)
文法(grammar)
一、引言
1、文法的描述应达到要求:
2、文法分类:分为四类(0、1、2、3型文法),对应四类语言;
与程序语言语法有关的是上下文无关文法
上下文无关文法只能描述一部分语言,但已足够
描述现今的程序设计语言
自然语言要用其他的文法来描述
二、文法与语言
1、 一个上下文无关文法G是一个四元式(VT,VN,S, P ),其中:
例1、 考虑下面的算术表达式的文法及语言
VT: id + - * / ↑ ( )
VN: 表达式、运算符
S: 表达式
P: 表达式 -表达式 运算符 表达式
表达式 -(表达式)
表达式 - -表达式
表达式 - id
运算符 - +| -| * |/|↑
得到 文法G1(E):
E -EAE|( E )| -E |id
A - + |-|*|/|↑
由此可见,文法G1(E)所定义的语言是上述算术表达式,
如:id+id,id*(id+id) 等
它表达了简单算术表达式由id用A连接起来
2、从此可见
该语法范畴叫“句子”,在程序语言中叫“程序”
语言的句子是由一串VN定义,到最后才是一串VT
A - α
↓ ↓
左部符号 右部候选式
VN α=X1X2…Xn,Xi∈V
3、习惯记号
VN: 大写字母A、B、C、S等
VT: 小写字母,0~9,+、- 等运算符,
标点,分界符,黑体字母串id、if
X、Y、Z: 文法符号,或VN或VT一个符号
u、v、 w…z: VT中串
α、β、γ: 文法符号串∈(VT∪VN)*
S: 开始符号,第一个产生式中出现
-: 定义为(元语言符号)
|: 或(元语言符号)
有穷条产生式,产生无穷集,要求产生式必须递归
定义算术表达式,用了两条浓缩的产生式,一般定 义一个语言的产生式是很复杂的
对递归的算术表达式的产生式,进行反复推导产生 表达式语言
4、推导与语言
例2 根据文法G:
E - E+E|E*E|( E )| i
句子i1*(i2+i3)推导过程如下:
注意:从一个句型到另一个句型的推导过程并不唯一,但 通常只考虑最左推导和最右推导。
最左推导
最右推导
三、语法树与二义性
1、语法树
树的叶:非终结符|终结符,对应一个句型
语法树为语法分析提供一些新的途径
树的内节点:非终结符A标记
若A -α,则该产生式的一棵子树为
在语法树中找出文法中的概念
内结点A VN
叶 文法符号
子树 直接推导
根结点 S
任一次全剪 句型
叶子∈VT时,将叶子顺序排列 句子
语 法 树
由此可见,
例4 根据文法G对句子id + id * id进行推导
①文法G
E - E+E|E*E|( E )| i
②推导1
E = E+E = id+E = id+E*E = id+id*E
= id+id*id
③推导2
E = E*E = E+E*E = id+E*E = id+id*E
= id+id*id
②与 ③两种推导对应两棵不同的语法树,如下所示:
推导1的语法树
推导2的语法树
2、二义性问题
定义:
文法G的某一句子有两棵不同的树,则G为二义的。
处理二义性对语法分析不便,因此希望:
1)判定二义否
2)控制充分条件,消除二义性
解决办法:尽量去掉二义性
语言的二义性问题与文法的二义性问题
①如L找到一个文法是无二义的,则L是无二义的;
②如未找到一个文法是无二义的,则也不能断定它 二义,但先天二义也存在;
③文法的二义性是不可判定的。 (因为文法的二义性由句子的语法树决定,不可能对无穷句子来判别)
最后,作为描述程序语言的上下文无关文法,
我们限制:
文档评论(0)