编译原理:文法与推导深度解析

需积分: 35 2 下载量 144 浏览量 更新于2024-07-14 收藏 354KB PPT 举报
"推导与广义推导-编译原理2文法和形式语言" 在编译原理中,文法和形式语言是研究计算机程序设计语言的基础理论。文法是用来描述语言结构的形式化工具,而形式语言则是由特定规则生成的一组符号串。本节主要关注的是推导和广义推导的概念。 推导(Derivation)是编译原理中的核心概念之一,它描述了如何从文法的起始符号出发,通过应用文法规则生成目标字符串的过程。例如,在描述文法G[E]的过程中,我们可以看到起始符号E经过一系列变换推导出了字符串'i+i* i'。这个过程可以表示为E → i+i* i。这里的箭头表示应用了一个或多个文法规则。如果推导序列中包含n个步骤,我们就说有一个长度为n的直接推导。在这个例子中,推导长度为1,因为只进行了一次变换。 广义推导(Generalized Derivation)是推导的一个更宽松的形式,允许推导长度为0。这意味着即使没有应用任何文法规则,起始符号也能够推导出自身,这在某些文法中是可能的。因此,广义推导的长度可以是任何非负整数,包括0。 形式语言的描述通常涉及三个关键因素:语法、语义和语用。语法关注的是语言的数据结构,即符号如何组合成合法的表达式。语义则涉及这些表达式的含义,即它们代表什么。语用则从用户的角度解释语言的使用和理解。 在形式化的描述中,字母表(Alphabet)是基本的构建块,它是有限且非空的符号集合。符号串(String)是由字母表中的符号组成的有限序列,包括空串ε,它不包含任何符号。符号串的运算包括相等比较、计算长度、连接、求逆以及查找前缀、后缀和子串等。例如,两个符号串相等当且仅当它们在每个对应位置上的符号都相同;符号串的连接是将两个串合并为一个新的串;符号串的逆是将串中的符号顺序反转。 符号串集合的乘积是指集合A中的每个元素与集合B中的每个元素依次连接,形成的所有新符号串的集合。例如,如果A={ab, bc},B={ac, cb},则AB={abac, abcb, bacb, bcbc}。需要注意的是,空集ε不同于只包含空串的集合,而且空集与任何符号串集合的乘积都是空集。 推导和广义推导是理解文法如何生成形式语言的关键工具,而形式语言的定义则依赖于字母表、符号串及其操作。这些概念在编译器设计中至关重要,因为它们帮助我们构建和分析编程语言的结构,以便于计算机能正确理解和执行程序。