当前位置:文档之家› 编译原理 第三章

编译原理 第三章


几种写法
➢当我们对符号z=xy的头感兴趣而对其余部分 不感兴趣时,我们可以采用省略写法:z=x…;
➢如果只是为了强调x在符号串z中的某处出现, 则可表示为:z=…x…;
➢符号t是符号串z的第一个符号,则表示为 z=t…。
符号串的运算
➢ 符号串的长度:符号串中符号的个数.符号串s的长度记为 |s|。 ε的长度为0
第三章 文法和语言
第3章 文法和语言
➢ 3.1 文法的直观概念 ➢ 3.2 符号和符号串 ➢ 3.3 文法和语言的形式定义 ➢ 3.4 文法的类型 ➢ 3.5 上下文无关文法及其语法树 ➢ 3.6 句型的分析 ➢ 3.7 有关文法实用中的一些说明 ➢ 3.8 典型例题及解答
学习目标
➢本章目的是为语言的语法描述寻求工具 ➢掌握对源程序给出精确无二义(严谨、简洁、
易读)的语法描述手段之一---文法。 ➢熟练使用文法定义程序设计语言的单词和语
法成分 ➢对形式语言的理论有一个初步基础
本章知识点(内容)
➢ 引言和预备知识
➢文法和语言的形式定义 ➢文法的类型 ➢上下文无关文法及其语法树 ➢上下文无关文法的句型分析 ➢有关文法实用中的一些说明
学习内容
➢什么是文法,什么是它定义的语言? ➢在乔姆斯基(Chomsky)的文法类型中,我
3.1 文法的直观概念
➢ “我是大学生”的构成符合上述规则,而“我大学生是” 不符合上述规则,我们说它不是句子。
➢ 这些规则成为我们判别句子结构合法与否的依据,换 句话说,这些规则看成是一种元语言,用它描述汉语。 这里仅仅涉及汉语句子的结构描述。这样的语言描述 称为文法。
➢ 文法是描述语言的语法结构的形式规则。
3.1 文法的直观概念
➢ 比如:“我是大学生”是汉语的一个句子。采用 EBNF来表示汉语的构成规则: 〈句子〉∷=〈主语〉〈谓语〉 〈主语〉∷=〈代词〉|〈名词〉 〈代词〉∷= 我 | 你 | 他 〈名词〉∷= 王明 | 大学生 | 工人 | 英语 〈谓语〉∷=〈动词〉〈直接宾语〉 〈动词〉∷= 是 | 学习 〈直接宾语〉∷=〈代词〉|〈名词〉
3.1 文法的直观概念
➢ 有了句子的一组规则以后,我们可以按照如下方式用它 们去推导或产生句子。
➢ 从〈句子〉开始,逐渐用规则的右边代替左边,直到 产生字符串。这个动作过程为:
3.1 文法的直观概念
句子:“我是大学生”的全部动作过程是: 〈句子〉 〈主语〉〈谓语〉 〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉 我是〈名词〉 我是大学生
们为什么关注上下文无关文法? ➢什么是语法分析?语法分析方法的分类?
一个程序设计语言一个记号系统,如同自然语言 一样,它的完整定义包括语法和语意两个方面。
语法:是指一组规则,用它可以形成和产生一个合法的 程序。目前,文法是广泛使用的语法描述工具。
语法只定义什么样的符号序列是合法的,与这些符号的 含义毫无关系,如类型匹配、变量作用域等就无法使用使用 文法来检查,这些工作属于语义分析的工作。
语言概述
➢ 语言是由句子组成的集合,是由一组符号所构成的集合。 ➢ 汉语--所有符合汉语语法的句子的全体 研究语言 每个句子的含义
每个句子和使用者的关系
➢ 程序设计语言--所有该语言的程序的全体。 ➢ 研究程序设计语言
每个程序构成的规律 每个程序的含义 每个程序和使用者的关系
➢ 语言研究的三个方面 语法 Syntax 语义 Semantics 语用 Pragmatics
➢ “形式”是指这样的事实:语言的所有规则只以什么符 号串能出现的方式来陈述。
➢ 形式语言理论是对符号串集合的表示法、结构及其特性 的研究。是程序设计和符号串
➢ 符号:可以相互区别的记号(元素)。
➢ 字母表:是字母的非空有穷集合;用Σ、V表示。
➢ 符号串:字母表中符号组成的任意有穷序列。 空串:不含有任何符号的串称作空串,记作。 1、空符号串ε(没有符号的符号串)是上的符号串 2、若x是∑上的符号串,a是∑的元素,则xa和ax是∑上 的符号串; y是∑上的符号串,当且仅当它可以由1和2导出。 例:Σ={a,b} ,则ε,a,b,aa,ab,aabba…都是上的符号串
语义有静态语义和动态语义。静态语义是一系列限定规 则,确定那些合乎语法的程序是合适的;动态语义是指运行 语义或执行语义,表明程序程序要做些什么,要计算什么。
3.1 文法的直观概念
➢ 当我们表述一种语言时,无非是说明这种语言的句子 如果语言只含有有穷多个句子,则只需列出句子的有 穷集就行了 对于含有无穷句子的语言来讲,存在着如何给出它的 有穷表示的问题。 以自然语言为例,人们无法列出全部句子,但是人们 可以给出一些规则,用这些规则来说明(或者定义)句 子的组成结构-----汉语规则
➢ 语法 : 表示构成语言句子的各个记号之间的组合规律
➢ 语义: 表示各个记号的特定含义。(各个记号和记号所表示 的对象之间的关系)
➢ 语用: 表示在各个记号所出现的行为中,它们的来源、使用 和影响。
➢ 如果不考虑语义和语用,即只从语法这一侧面来看语 言,这种意义下的语言称作形式语言。
➢ 形式语言抽象地定义为一个数学系统。
3.2 符号和符号串
➢ 符号串的运算 符号串s的头(前缀):移走符号串s尾部的零个或多于零 个符号得到的符号串. 如: b是符号串banana的一个前缀. 符号串s的尾(后缀):删去符号串s头部的零个或多于零 个符号得到的符号串. 如:nana是符号串banana的一个后缀. 符号串s的子串:从s中删去一个前缀和一个后缀得到的符 号串. 如:ana是符号串banana的一个子串.
3.2 符号和符号串
➢ 固有头和固有尾:如果z=xy是一符号串,那么x是z的头, y是z的尾,如果x是非空的,那么y是固有尾;同样如果y 非空,那么x是固有头。
➢ 例子:设z=abc, 那么z的头是ε,a,ab,abc,除abc外,其它都是固有头; z的尾是ε,c,bc,abc,z的固有尾是ε,c,bc。
相关主题