第二部分上下文无关文法20.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

wx171113 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档