第二章文法和形式语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章文法和形式语言
《编译原理》课程组
计算机工程学院
第二章文法和形式语言
2.1 文法的直观概念
2.2 符号和符号串
2.3 文法和语言的形式定义
2.4 文法的类型
2.5 上下文无关文法机器语法树
2.6 句型分析
2.7 文法的实用限制
第2章文法和语言
【学习目标】
本章目的是为语言的语法描述寻求工具
◇掌握对源程序给出精确无二义(严谨、简洁、易读)的语法描述手段之一——文法。
◇对形式语言的理论有一个初步基础
◇根据语言文法的特点指导语法分析的过程
本章将讨论词法分析程序的设计原则,单词的描述技术,识别机制及词法分析程序的自动构造原理。
第2章文法和语言
【教学重点】
概念:文法,推导,直接推导,最左(右)推导,产生式,句型,短语,直接短语,句柄,语法树,规范推导,二义文法等
4种文法的定义、文法的构造和文法的推导
语法树的构造和最左(右)推导;
二义文法、二义性的证明;
句型分析;
2.1 文法的直观概念
一、语言概述
语言是由符合语法的句子组成的集合。
–汉语-- 所有符合汉语语法的句子的全体
–英语-- 所有符合英语语法的句子的全体
–程序设计语言-- 所有该语言的程序的全体
每个句子构成的规律
研究语言每个句子的含义
每个句子和使用者的关系
一、语言概述(续1)
研究程序设计语言
每个程序构成的规律
每个程序的含义
每个程序和使用者的关系
语言研究的三个方面
语法Syntax
语义Semantics
语用Pragmatics
一、语言概述(续2)
语法:指语言的一组规则,用它可以形成和产生一个合适的程序。
–如何由基本字符构成一个个单词;
–如何由一系列单词构成程序
语法只定义什么样的符号序列是合法的,而不表达这些符号及符号序列的含义 语义:明确程序各部分的含义
–静态语义:由一系列限定规则组成,并确定哪些合乎语法的程序是合适的;
–动态语义:表明程序要做些什么,要计算什么
一、语言概述(续3)
形式语言:只考虑语法而不考虑语义的符号语言。
每种语言具有两个可识别的特性,
–语言的形式
–该形式相关联的意义
“形式”是指这样的事实:语言的所有规则只以什么符号串能出现的方式来陈述。 形式语言理论是对符号串集合的表示法、结构及其特性的研究,是程序设计语言语法分析研究的基础。
语言可以看成在一个基本符号集上定义的,按一定规则构成的基本符号串组成的所有集合。
二、文法的直观概念
表达语言时,一般无法穷尽语言的所有句子,常用规则加以描述
例:汉语句子的构成规则:
〈句子〉∷=〈主语〉〈谓语〉
〈主语〉∷=〈代词〉|〈名词〉
〈代词〉∷= 我| 你| 他
〈名词〉∷= 王明| 大学生| 工人| 英语
〈谓语〉∷=〈动词〉〈直接宾语〉
〈动词〉∷= 是| 学习
〈直接宾语〉∷=〈代词〉|〈名词〉
二、文法的直观概念(续2)
推导:“我是大学生”是汉语的一个句子
〈句子〉⇒〈主语〉〈谓语〉
⇒〈代词〉〈谓语〉
⇒我〈谓语〉
⇒我〈动词〉〈直接宾语〉
⇒我是〈直接宾语〉
⇒我是〈名词〉
⇒我是大学生
2.2 符号和符号串
程序设计语言中的单词是基本语法成分,单词符号的语法可以用有效的工具加以描述,并且基于这类描述工具,实现词法分析程序的自动构造.
一. 符号、字母表和符号串
符号:可以相互区别的基本记号(元素),如字母,数字,标点符号。
字母表:符号(元素)的非空有穷集合,常用Σ表示。
例:V={0,1},Σ={a, b, c, … , x,y, z}
2.2 符号和符号串
符号串:由字母表中的符号构成的有穷序列叫符号串。
例:字母表∑={a,b,c,d} 则有符号串:a,b,c,d,aa,ddd,acc…
字母表∑ ={0,1}上的符号串0,1,00,11,10
注意:ε表示空符号串,它表示不包含任何符号串,不是空格符。符号串中的符号是有顺序的。
符号串集合:字母表上若干个符号串组成的集合.
例:字母表∑={a,b,c,d} 的符号串集合A={ab,acc,da,a};
约定:小写字母a,b,…,r表示符号.
小写字母: s,t,…,z表示字符串;
2.2 符号和符号串
符号串s的头(前缀)和尾(后缀):
–如果z=xy 是一符号串,那么x 是z 的头,y 是z 的尾。如果x 是非空的,那么y 是固有尾;同样如果y 非空,那么x 是固有头。
–前缀:移走符号串s 尾部的零个或多于零个符号得到的符号串。
如:设z=abc, 那么z 的头是ε,a,ab,abc
–后缀:删去符号串s 头部的零个或多于零个符号得到的符号串。
如:z =abc 的尾是ε,c,bc,abc,z 的固有尾是ε,c,bc。
2.2 符号和符号串
符号串s的子串:
–从s中删去一个前缀和一个后缀得到的符号串.
–如:ana是符号串banana的一个子串.
对于每个符号串s,s和ε两者都是符号串s的前缀、后缀和子串。
符号串s的真前缀,真后缀,真子串:
–任何非空符号串x,相应地,是s 的前缀,后缀或子串,并且s ≠ x
2.2 符号和符号串
二. 符号串的运算
符号串相等:
符号串x,y,如果两者诸符号依次相等,则两符号相等。
符号串的长度:符号串中包含符号的个数。
|abc|=3;| ε |=0;
符号串的连结:
x,y是字母表上的两个字符串,把y的所有符号相继写在x的符号之后所得到的符号串称为x 与y的连结,用xy表示。
X=abc,y=def 则xy=abcdef;yx=defabc;xy yx,ε x=x ε =x;
符号串的逆:设x是字母表上的符号串,其逆为符号串x的倒置,记为x。x=abcd;x=dcba;2.2 符号和符号串
符号串集合的乘积:
设A、B为两个符号串集合,其乘积为AB={xy|x ∈A,y∈B};
eg:A={aa,bb},B={cc,dd},则
AB={aacc,aadd,bbcc,bbdd}
{ε }A=A {ε }=A;
空集:
不含任何元素的集合称为空集。记为φ;
对任何集合A:A φ= φA= φ; 注意:ε∉φ
2.2 符号和符号串
符号串的幂:
x是字母表上的符号串,则x的幂运算为:
x0= ε ; x1= x; x2= xx;… x n= x n-1x=x x n-1 (n>0)
x n表示n个x相连结。
eg:x=ok;
则x0= ε ; x1= ok; x2= okok; … x n=okok…ok(n个ok连结)
符号串集合的幂:
A为符号串集合,则符号串集合A的幂运算为:
A0={ε}; A1=A; A2=AA;... A n= A n-1A=AA n-1;(n>0)
A={aa,bb},则A0={ε};A1={aa,bb};
A2=AA={aaaa,aabb,bbaa,bbbb};...
2.2 符号和符号串
符号串集合的闭包和正闭包
集合A的闭包表示为A*(亦称为自反闭包或星闭包)具体定义为:
A*=A0⋃ A1⋃ A2⋃ A3⋃…=⋃A k,k≥0
正闭包表示为A+具体定义为
A+=A1⋃ A2⋃ A3⋃…=⋃A k,k≥1