编译原理实验2:解析句子二义性

需积分: 35 1 下载量 2 浏览量 更新于2024-07-14 收藏 1.65MB PPT 举报
"句子二义性-编译原理实验2" 在编译原理中,句子二义性是一个重要的概念,它涉及到如何理解和解析编程语言中的语句。二义性是指一个句子(在语言学和编译原理中,句子指的是符合特定文法的符号串)可以有多种不同的语法解释,即存在多棵语法树来表示同一句子的不同结构。这种现象可能导致编译器或解释器在处理时产生混淆,从而影响程序的正确执行。 以标题中提到的例子为例,文法G定义了一个简单的表达式解析规则,其中E是起始符号,表示表达式。文法规则E可以推导为E加上E、E乘以E或者一个括号内的E,以及单个的数字i。对于句子`( i* i+ i)`,存在两种不同的最左推导方式: 1. E → (E) → (E+E) → (E*E+E) → ( i*E+E) → ( i*i+E) → ( i* i+ i) 2. E → (E) → (E*E) → ( i*E) → ( i*E+E) → ( i*i+E) → ( i* i+ i) 这两种推导都符合文法规则,但产生了不同的解析路径,这便是句子的二义性。这种二义性可能导致编译器在解析时产生错误,例如不清楚乘法和加法的操作顺序。 除了二义性,这里还提到了一些编译原理的基础概念: 1. 符号:是构成语言的基本单元,不可再分。 2. 字母表:符号的有限集合,常用大写字母表示。 3. 符号串:由字母表中的符号组成的有限序列,空串是特殊的符号串。 4. 句子:符合特定规则的字母表上的符号串。 5. 语言:由字母表上的句子组成的集合。 此外,还有关于符号串集合的运算,如连结(乘积)运算,以及闭包与正闭包的概念: - 闭包(A*):表示所有可能由字母表A的符号组成的串,包括空串。 - 正闭包(A+):不包括空串的A*,即所有非空的由A的符号组成的串。 接下来,文法被介绍为描述语言结构构造的形式规则,包括: - 非终结符:表示语法概念的词,出现在规则的左边。 - 终结符:不可再分割的字符串,通常是语言的基本构建块。 - 开始符号:用于定义语法范畴的非终结符,也叫识别符号。 - 产生式:定义符号串之间的关系,形如A→β。 - 推导:通过使用产生式的右部替换左部,从开始符号生成句子的过程。 - 归约:推导的逆过程,从句子开始,通过规则的左部替换右部,直到达到开始符号。 句型是通过推导从开始符号得到的字符串,而句子是只包含终结符的句型,它们构成了文法所能描述的语言。 总结来说,这个实验主要探讨了句子二义性及其对编译原理的影响,并介绍了与编译原理相关的基础概念,如文法、产生式、推导和归约,这些都是理解编译器工作原理的关键元素。