第二章文法和形式语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档