- 1、本文档共112页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 文法与语言 讨论问题: 文法和语言的概念和定义 文法和语言的分类 文法等价变换 句型分析 简单回顾 对程序的理解 程序是计算机执行的一系列指令; 程序是计算任务的 处理对象和处理规则的描述。 ? 对程序设计语言的理解 程序设计语言是程序的书写规范; 程序设计语言的要素: 一组记号(符号)和一组规则。 程序设计语言程序是 程序设计语言之符号集合上的、 按一定规则组成的符号串。 2.1 符号串与符号串集合 语言实际上是一个符号串集合; 文法规定语言中句子的构造规则。 句子是一个语言之字母表上按一定规则构造的符号串。 2.1.1 字母表 字母表: 有穷非空的符号集合。 例 A={ a, b, c } ∑={ 0,1 } C语言字母表={ 字母,数字,界限符 } 不同的语言有不同的字母表。 字母表上的元素(即符号)组成符号串。 字母表∑上的一个语言就是∑上的一些符号串组成的集合。 空集 ф 是一个语言,仅含一个空符号串集合{ф }也是一个语言。特别需要指出的是, ? 和{? }是不同的语言。 2.2 文法与语言的形式定义 { } 用于指定重复次数 标识符::= 字母 {字母数字}05 [ ] 内中符号至多出现一次 整数::= [+|-]数字{ 数字} ( ) 提公因子 E::=E+T|E-T 可改写为 E::=E(+|-)T 文法产生句型和句子的例子 【例】设有文法G[Z]: Z::=aZb| ? 有推导: Z =* ? Z =* aZb= aaZbb =* aaabbb 可见,符号串 ε,aZb,aaZbb和aaabbb都是文法G[Z]的句型,而 ε 和aaabbb才是文法G[Z]的句子。 思考 设计编程语言时, 是先设计语言形式,还是先设计BNF形式的文法? 例如要表示形如 i+i, i+i*i的表达式 建议: 学习时注意积累,何种典型文法可以得到某种典型的语言形式 考试考查:能够由文法写出语言,也能由语言设计出文法 句柄是重要概念之一。归约是自底向上的语法分析关键,何时进行归约则必须依赖句柄。 分析句型时,要搞清楚哪些符号串能构成短语和直接短语。 概括 4. 文法句子之生成的实现 实质是推导的构造。 要点是推导在计算机内的存储表示。 文法的链式表示: 文法G[E]的数据结构 2.2.2 语言的定义 2.3 语言的分类 2.4.3消去左递归的文法等价变换 左递归的存在将导致自顶向下语法分析失败 自顶向下:即从识别符号出发,使用不同规则进行推导。 左递归可使分析陷入无穷循环,导致栈溢出 U=Ux=Uxx=Uxxx=…= 因此,对自顶向下分析技术,需要消除左递归。 语法分析树 一个句型推导过程的树形表示称为语法分析树,或简称语法树。语法树的优点是:它有助于理解一个句子语法结构的层次。 语法树通常表示成一棵倒立的树,根在上,树叶在下。 语法树离不开句型,一棵语法树是相对于某个句型而存在,脱离句型的语法树是不存在的。 最后得到文法G[S]: G[S]: S∷=Sa|Tbc|Td T∷=Se|gh 消去了左递归的等价文法G[S]: S∷=T (bc|d) S S∷=aS |ε T∷=ghT T∷=(bc|d) SeT |ε 例 设有文法G[A]: G[A]: A∷=Ba|Cb|c B∷=dA|Ae|f C∷=Bg|Ah试消去该文法的左递归。 G[A]: A∷=Ba|Cb|c B∷=dA|Ae|f C∷=Bg|Ah 解:首先判别知,该文法存在文法左递归。 步骤1 排序成:U1=A,U2=B, U3=C; 步骤2 执行循环: i=1, j=1: j>i-1,不执行关于j的循环,且关于U1=A不存在规则左递归。 i=2, j=1: 有规则B∷=Ae|dA|f,呈U2::=U1…形,把规则A∷=Ba|Cb|c代入,得 B∷=(Ba|Cb|
文档评论(0)