编译原理 第三章
编译原理第03章PPT课件
65
-
procedure swap(var x:integer); begin x:=x+a; /*a是全局变量*/
a:=x-a; x:=x-a end; 调用swap(a);别名也影响编译器生成优化的代 a:=(x-y*z)+w ; b:=(x-y*z)+u ; 若a与x、y或z中任一个是别名
用标号控制循环体 DO 7 I=1,10 A(I)=0 B(I)=0
7 CONTINUE
19
-
②Pascal的for 语句
计数重复的值可在任何有序集上 for . . . to . . . for . . . down to . . .
20
-
2. 条件制导
①while:0次或多次重复 ②do-while,repeat-until:多次重复 ③ALGOL 68循环的一般形式:
Smalltalk 语言以对象方式来处理控 制结构。
40
-
可以认为上述语言是可扩充的,用 户可以通过定义新的(抽象)数据类型 和控制结构来扩充基本语言。
但基本的控制结构并没有发生改变。
41
-
第二节 单元级控制结构
规定程序单元之间控制流程的机制。 最简单的机制是 ALGOL60 的分程序
42
-
在程序顺序执行的过程中,遇到一 个分程序,就建立一个新的引用环境, 并执行这个分程序。
7
-
3. 多选一 嵌套 的 if then else
if语句包含if语句 ①ALGOL 60的选择结构引起二义性
if x>0 then if x<6 then x:=0 else x:=9 ②PASCAL的“最近匹配原则” ③ ALGOL 68中if语句的结束符号fi ④ ALGOL 68对else if 进行缩写
《编译原理》第3章
NFA到相应的DFA的构造的基本思路是: DFA的每 一个状态对应NFA的一组状态. DFA使用它的状 态去记录在NFA读入一个输入符号后可能达到的 所有状态.
NFA M所能接受的符号串的全体记为L(M)
结论:
上一个符号串集V是正规的,当且仅当存 在一个上的不确定的有穷自动机M,使得 V=L(M)。
DFA是NFA的特例.对每个NFA N一定存在一个DFA M,使得 L(M)=L(N)。对每个NFA N存在着与之 等价的DFA M。 有一种算法,将NFA转换成接受同样语言的DFA.这 种算法称为子集法. 与某一NFA等价的DFA不唯一.
0
1
S P
Z
{P} {}
{P}
{S,Z} {Z}
{P}
• δ为S * 到S的子集(2 S)的一种映射
• 从NFA的矩阵表示中可以看出,表项通常是一状态的集合, 而在DFA的矩阵表示中,表项是一个状态
∑*上的符号串t被NFA M接受:
• 对于Σ*中的任何一个串t,若存在一条从某一初态 结点到某一终态结点的道路,且这条道路上所有 弧的标记字依序连接成的串(不理采那些标记为ε 的弧)等于t,则称t可为NFA M所识别(读出或接 受)。 • 若M的某些结点既是初态结点又是终态结点;或 者存在一条从某个初态结点到某个终态结点的道 路,其上所有弧的标记均为ε,那么空字ε可为M所 接受。
其中: δ(S,0)={P}
δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z} • 状态图表示
1 1 S 0 0,1 Z
P
1
• 矩阵表示
状态 输入
δ(S,0)={P} δ(S,1)={S,Z} δ(Z,0)={P} δ(Z,1)={P} δ(P,1)={Z}
编译原理第三章
例3.4 Z→ A→ B→
有正规文法G: 0A 0A | 0B 1A | ε
例3.5 A→ B→ C→
有正规文法G: aB | bB aC | a | b aB
例3.6 Z→ U→ V→
有正规文法G: Z=0(0|01)*0 U0 | V1 A=(a|b)(aa)*(a|b) Z1 | 1 Z=(10|01)(10|01)* Z0 | 0
A
B
r2 ε
A C
A
B
ε
B
r1
④R为复合正规式?
例3.12 3.13 P41
教学进度
3.4.4 NFA确定化为DFA
方法(子集法) 1、改造M为M’: ①引进新的初态结点X、终态结点Y; ②对M的状态转换图实施分裂(替换)
计算机科学与工程系
2、将M’进一步变换为DFA :
①状态子集T的闭包_CLOSURE(T) ②定义状态集Ta = _CLOSURE(J) ③从DFA的初态_CLOSURE({X})开始计算状态转换矩阵;直到 不再产生新的状态子集为止。
第三章
• • • • • •
词法分析与有穷自动机
计算机科学与工程系
词法分析器的功能与输出 单词符号的两种定义方式 正规表达式与有穷自动机 正规文法与有穷自动机 词法分析器的设计 词法分析程序自动构造工具LEX简介
教学进度
3.1 词法分析器的功能
计算机科学与工程系
词法分析:对字符串表示的源程序进行从左到右的扫描和 分解,根据语言的词法规则识别出一个个具有独立意义的 单词符号。
教学进度
3.3 单词符号的两种定义方式
单词符号结构的描述方法:
计算机科学与工程系
正规文法(3型文法)(regular grammar)
编译原理第三章_有穷自动机
例 过河问题 分析(续)
初始状态:MWGC-φ;终止状态:φ-MWGC。 g
MWGC-φ
WC-MG
问题:
6
例 过河问题 状态转换图
起始 g
MWGC-φ g
g φ-MWGC
g
7
WC-MG
m
m MWC-G
w
w
c
C-MWG
c W-MGC
g
g
MGC-W c
MG-WC
w
m
c G-MWC
m
gg MWG-C
+dd. ddd;
输入符号串
数字 数字
SB
.
数字
+
A
H
-.
数字
.G
接收:若扫描完输入串, 且在一个终止状态上结 束。
数字 阻塞:若扫描结束但未 停止在终止状态上;或 者为能扫描完输入串 (如遇不合法符号)。
不完全描述:某些状态 对于某些输入符号不存 在转换。
练习:+34.567 .123 3.4.5
w
有穷自动机(FA)
数字系统:可以从一个状态移动到另一个状态;每次 状态转换,都上由当前状态及一组输入符号确定的;可以 输出某些离散的值集。
FA:一个状态集合;状态间的转换规则;通过读头来 扫描的一个输入符号串。
读头:从左到右扫描符号串。移动(扫描)是由状态 转换规则来决定的。
8
读头
一个FA的例子
(3)运行: 串f(,Q,且t1tt21)∈= Σf(,f(Qt1,t2t1∈), Σt2*),其中Q∈K, t1t2为输入字符
17
例3
题:试证abba可为例1的DFA M所识别(所接受)。
编译原理第3章文法和语言
第3章文法和语言第1题文法G=({A,B,S},{a,b,c},P,S)其中P为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。
答案:L(G[S])={abc}第2题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。
V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD....=>NDDDD...D=>D......D或者:允许0开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。
答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。
答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=>aaa..ab...bbbL(G[Z])={anbn|n>=1}第5题写一文法,使其语言是偶正整数的集合。
要求:(1)允许0打头;(2)不允许0打头。
答案:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6题已知文法G:<表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。
(5)i+(i+i)(6)i+i*i答案:(5)<表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)(6)<表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i<表达式><表达式>+<项><因子><表达式><表达式>+<项><因子>i<项><因子>i<项><因子>i()<表达式><表达式>+<项><项>*<因子><因子>i<项><因子>ii第7题证明下述文法G[〈表达式〉]是二义的。
编译原理_第3章课件
编译原理_第3章课件第三章词法分析本章将讨论词法分析程序的设计原则,单词的描述技术,识别机制及词法分析程序的⾃动构造原理。
教学要求1.掌握:正规式,DFA的概念,NFA的概念2.理解:将NFA转换为DFA ,正规式、正规⽂法与有穷⾃动机间的转换⽬录3.1 词法分析程序的设计3.2 单词的描述⼯具3.3 有穷⾃动机3.4 正规式与有穷⾃动机的等价性3.5 正规⽂法和有穷⾃动机的等价性3.6 词法分析程序的⾃动构造⼯具⼩结3.1.词法分析(lexical analysis)程序的设计回顾:1、词法分析的任务:逐个读⼊源程序字符并按照构词规则切分成⼀系列单词。
2、词法分析程序:实现词法分析的程序。
⼀.词法与语法分析程序的接⼝⽅式1、作为独⽴的⼀遍词法分析是编译过程中的⼀个阶段,在语法分析前进⾏,把字符流的源程序变为单词序列,输出在⼀个中间⽂件上。
2、与语法分析结合在⼀起作为⼀遍⼀般、把词法分析程序设计成⼀个⼦程序,由语法分析程序调⽤词法分析程序来获得当前单词,供语法分析使⽤。
….词法分析程序的主要任务:读源程序,产⽣单词符号词法分析程序的其他任务:滤掉空格,跳过注释、换⾏符追踪换⾏标志,复制出错源程序,宏展开,……⼆、词法分析程序的输出输出是单词符号。
单词是语⾔中具有独⽴意义的最⼩单位。
单词包括:保留字标识符常量运算符界符(标点符号)词法分析程序所输出的单词符号常常采⽤以下⼆元式表⽰:(单词种别,单词⾃⾝的值)。
单词的种别是语法分析需要的信息,⽽单词⾃⾝的值则是编译其它阶段需要的信息。
(标识符,指向该标识符所在符号表中位置的指针) 单词的种别可以⽤整数编码表⽰,假如标识符编码为1,常数为2,保留字为3,运算符为4,界符为5例如:程序段if i=5 then x∶=y;在经词法分析器扫描后输出的单词符号和它们的表⽰如下:- 保留字if(3,'if')- 标识符i(1,指向i的符号表⼊⼝)- 等号=(4,'=')- 常数5(2,'5')- 保留字then(3,'then')- 标识符x(1,指向x的符号表⼊⼝)- 赋值号∶=(4,'∶=')- 标识符y(1,指向y的符号表⼊⼝)- 分号;(5,';')三、词法分析⼯作从语法分析⼯作独⽴出来的原因:简化设计改进编译效率增加编译系统的可移植性3.2 单词的描述⼯具程序设计语⾔中的单词是基本语法成分.单词符号的语法可以⽤有效的⼯具加以描述,并且基于这类描述⼯具,实现词法分析程序的⾃动构造.描述⼯具:正规⽂法和正规式识别⼯具:有穷⾃动机⼀.正规⽂法多数程序设计语⾔的单词的语法能⽤正规⽂法来描述。
编译原理 第三章
• ε-Closure(q): 从状态q出发,经过任意条标记为ε的矢线所能达到的状态集合。
• f^的递归定义: 1)f^(s,ε)=ε- Closure(s) 2)f^(s,wa)=ε- Closure(p) 其中:p=f(f^(s,w),a)=∪f(q,a), q∈f^(s,w) 3)f(R,a)=∪f(q,a), q∈R (将f的定义域推广到状态集合R) 4)f^(R,w)=∪f^(q,w), q∈R (将f^的定义域推广到状态集合R)
2)有限自动机所接受符号串的递归定义(将f的定义域推广到 k x ∑*) (1) f^(s,ε)=s; (2) f^(s,aw)=f^(f(s,a),w),a∈∑,w∈∑* 结论:f^与f效果一样。
3)一个DFA M所接受的字符串的全体称为M的接受集或语言,记为: L(M)={x|f(S0, x)∈Z, x∈∑*}。
最优 (优先顺序可用括号加以改变) 次之 最后
• 正规式:将文法的终结符号用以上三种运算符连接起来组成的正规文法的表 达式,是另一种用于描述正规文法的直观表示。 例如语法范畴<标识符>的正规表达式为:字母(字母|数字)* • 正规集:正规式所描述的字符串的集合。
1. 正规表达式和正规集定义:
设∑为一字母表,则∑上的正规式及其所表征的正规集可递归地定义为:
第三章
词法分析及词法分析程序
§3.1 设计扫描器时应注意的几个问题
1. 词法分析阶段的必要性
1)与语法分析比较,可采用简单有效的方法; 2)词法分析有时需要涉及上下文,与语法分析不同; 3)编译程序各部分的功能更加单一,结构清晰,编写、调试相对简单。 注:在逻辑功能上把词法分析和语法分析划分开; 在程序编制(执行流程)上可将词法分析作为语法分析程序的子程序
编译原理_chapter3概要
3.1.5 词法分析器的位置
符 号 表 源程序 词法分析器 语法分析器 语义分析与 代码生成 目标程序
目标代码整理 图3.1 以语法分析器为中心
以语法分析器为中心的优点:
简化编译器的设计。 提高编译器的效率。 增强编译器的可移植性。
16
2018/11/26
设计成一个独立程序,完成词法分析的 任务,结果以文件的形式组织,做为语 法分析的输入
单词名称 标识符 无符号常数(整) 无符号浮点数 布尔常数 字符串常数 FOR DO IF ELSE THEN INT CHAR FLOAT WHILE
2018/11/26
类别编码 单词值 1 内部字符串 标识符常数 : 2 整数值 一类一码 数值 3 4 0 或 1 5 内部字符串 6 7 8 9 关键字: 10 一字一码 11 12 13 14 7 …… ……
符号表
源程序
词法 分析
TOKEN字
错误信息
图3.2 设计成独立的程序
17
3.2 词法分析阶段的设计与实现
区别?
2018/11/26
8
例3.1 语句if count>7 then result := 100; 的单词符号序列
(9,0) (1,指向count 的符号表入口) (30,0) (11,7) (10,0) (1,指向result的符号表入口) (24,0) (11,100) (29,0)
2018/11/26
School of Computer Science & Technology Harbin Institute of Technology
第三章 词法分析
重点:词法分析器的输入、输出, 用于识别符号的状态转移图的构造 难点:根据状态转移图实现词法分析器的设计
编译原理课件第3章
代码优化
代码优化的目的和分类
目的
提高程序运行效率,减少空间占用,提高可读 性。
局部优化
对单个程序块的优化,如基本块的优化。
全局优化
对整个程序的优化,如循环优化、死代码删除等。
代码优化的主要技术
常量折叠和替换
将常量表达式的结果在编译时计算出来,并 用结果替换掉表达式。
循环优化
编译原理课件第3章
contents
目录
• 词法分析 • 语法分析 • 中间代码生成 • 代码优化 • 目标代码生成
01
CATALOGUE
词法分析
词法分析器的任务
将源程序分解成一系列的记号(tokens) 去除源程序中的注释和空白符
识别出关键字、标识符、常量、操作符等记号 为语法分析器提供有序的记号流
通过改变循环的迭代顺序、减少循环中的计 算等方法来提高循环的效率。
死代码删除
删除永远不会被执行到的代码。
函数内联
将小的函数调用替换为函数体的直接执行, 以减少函数调用的开销。
代码优化的实现
编译器前端
负责将源代码转换成中间表示(IR),这一阶段主要 完成语义分析和语法分析。
编译器中端
对中间表示进行优化,如常量折叠、死代码删除等。
考虑文法的二义性
有些文法具有二义性,即一种语法结构可以有多种解析方 式。在设计语法分析器时需要考虑如何处理二义性问题, 避免产生错误的分析结果。
语法分析器的实现
编写词法分析器
词法分析器是将输入的字符串转 换成一个个的单词或符号,供语 法分析器使用。在实现语法分析 器之前,需要先编写词法分析器 。
实现递归下降分析
解析与语义分析
编译原理(清华)第三章文法和语言
例 文法G: S→0S1,S→01 有直接推导: 0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111 ( S→01 ) S 0S1 ( S→0S1 )
推导和归约 若存在v=w0 w1 ... wn=w ,(n>0) 则称v推导出w,或w归约到v,记为v=+>w 若有v =+>w,或v=w,则记作v=*>w
2. 符号串 – 定义:由字母表中的符号组成的任何有穷序列 – 例: 0,00,10是字母表∑={0‚1}上的符号串 a,ab,aaca是Α={a‚b,c}上的符号串 – 在符号串中,符号是有顺序的,顺序不同,代 表不同的符号串,如:ab和ba不同 – 不含任何符号的符号串称为空串,用ε表示 注意:{ε}并不等于空集合{ } – 符号串长度: 符号串中含有符号的个数 如: |abc|=3 | ε|=0
3.3 文法和语言的形式定义
1.文法的定义 2.文法的简化表示法 3.推导与归约 4.句型、句子、语言的定义 5.文法的等价
1.文法的定义
产生式(规则) 产生式是一个有序对(α,β),通常写作 α→β(或α::=β ) 文法定义: 文法G(Grammar)定义为四元组(VN,VT,P,S) VN (Nonternimal):非终结符集 VT (Terminal):终结符集 P (Production): 产生式(规则)集合 S: 开始符号或识别符号
第三章
文法和语言
学习目标: 掌握:自上而下与自下而上的分析方法 理解:文法的形式定义,推导,归约,句 型,句子,语言,上下文无关文法,规范 句型,语法树,短语,直接短语,句柄 了解:文法的类型,文法使用中的限制, 文法的二义性
编译原理第三章(4-2)
无符号数一般形式:dm dm-1 · · · d1 d0 ·d-1 d-2 · · ·d-nE+ dd · · · d E d 0 d . 3 d 1 d d E 4 d 5 d d 6
.
d
2
+∣d
. d d
d
d
F
北京交通大学 于双元 16
无符号数一般形式:dm dm-1 · · · d1 d0 ·d-1 d-2 · · ·d-nE+ dd · · · d E d 0 d . 3 d 1 d d E 4 d 5 d d 6
A B
②开始符号S作为初始状态 设一符号F不属于V作为终止状态
S
F B F F
③形如A→aB的规则
④形如A→a的规则 特别:A → ε
A A
a a
A 未曾在A的射出弧中 出现过的终结符号
北京交通大学 于双元
也可以消除ε产生式后再画状态图。
4
例:G[Z]: Z→0U∣1V U →1Z∣1 V →0Z∣0
1 初态
0 Z 1
U
1 0
F
0
V
②此过程是一种推导过程. (最右(左)推导)
相当于: Z=>0U =>01Z =>011V =>0110Z =>01100U =>011001
能否编程序实现?
有什么问题?
北京交通大学 于双元
8
3 、左线性文法的状态图
左线性文法的规则呈: A→Ba或A→a A,B∈Vn ,a∈Vt (1)状态图 ①G[S]的每一个非终结符号代表一结点(状态) A B
北京交通大学 于双元
23
3、设有如下状态转换图,试给出对应的正则文法 (左线性和右线性)。
编译原理第三章
例如:Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} + ={a,b,aa,ab,ba,bb,aaa,aab,…}
13
语言
语言:字母表上的一个语言是上的一些符号 串的集合 (上的每个语言是*的一个子集)。 例如: Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 语言1:集合{ab,aabb,aaabbb,…,anbn,…}或 {w|w∈Σ*且w=anbn,n≥1}为字母表上的一 个语言。 语言2:集合{a,aa,aaa,…}或{w|w∈Σ*且 w=an,n≥1} 为字母表上的一个语言。 语言3:ε是一个语言。 语言4:即 是一个语言。 14
20
文法的定义
文法G定义为四元组(VN,VT,P,S)
VN :非终结符集 VT :终结符集 P:产生式(规则)集合 S:开始符号, S∈VN,S必须要在一条规则 的左部出现。 VN∩VT= φ 。 V=VN∪VT,称为文法G的文法符号集合
21
文法示例1
例3.1 文法G=(VN,VT,P,S) VN = { A }, VT ={ 0, 1 } P={ A→0A1, A→01 } A为文法G的开始符号 习惯上只将产生式写出。并有如下约定: 第一条产生式的左部是开始符号 用尖括号括起的是非终结符,否则为终结符。或 者大写字母表示非终结符,小写字母表示终结符 G可写成G[S],S是开始符号 例: G: A→0A1 或 G[A]: A→0A1 A→01 A→01
4
预备知识 -----文法的直观概念
<句子>::=<主语><谓语> <主语>::=<代词>|<名词> <代词>::=我|你|他 <名词>::=王明|大学生|工人|英语 <谓语>::=<动词><直接宾语> <动词>::=是|学习 <直接宾语>::=<代词>|<名词>
编译原理 第三章 文法和语言
8
3.2 符号和符号串
四. 符号串集合(语言)的运算
设L和M是两个符号串集合,则 1.合并:L∪M={s|s∈L or s∈M} 2.连接:LM={ st|s∈L and t∈M} 3.方幂: L0={ε}, L1=L, L2=LL, ..., Ln=Ln-1L 4. 语言L的闭包,记作L*, L*=∪Li(i>=0) =L0∪L1∪L2∪L3 ∪… 5.语言L的正闭包,记作L+(L+=L L*) L+=∪Li(i >=1) =L1∪L2∪L3∪L4∪…
16
推导的定义
例: <程序><分程序>. (<程序> → <分程序>. ) <分程序>. <变量说明部分> <语句>. (<分程序> → <变量说明部分> <语句>) VAR<标识符>;BEGIN READ(<标识符>)END. VAR A;BEGIN READ(<标识符> ) END. (<标识符> →A) VAR A;BEGIN READ(<标识符> ) END. VAR A;BEGIN READ( A) END. (<标识符> →A)
22
文法G[S]: 例 文法 : (1)S→aSBE ) → (2)S→aBE ) → (3)EB→BE ) → (4)aB→ab ) → (5)bB→bb ) → (6)bE→be ) → (7)eE→ee ) → L(G)={ anbnen | n≥1 } ≥ G生成的每个串都在 生成的每个串都在L(G)中 生成的每个串都在 中 L(G)中的每个串确实能被 生成 中的每个串确实能被G生成 中的每个串确实能被 分析参见课本P37. 分析参见课本P37.
编译原理:第3章 有穷自动机
编译原理第3章内容简介学习目标第3章有穷自动机3.1 有穷自动机的形式定义3.1 有穷自动机的形式定义DFA的表示举例——状态转换表DFA的表示举例——状态转换图 3.13.1 FA的形式定义有穷自动机识别的符号串举例DFA A3.1 有穷自动机的形式定义 3.1 有穷自动机的形式定义NFA举例 3.13.1用NFA识别符号串yFA的构造FA的构造举例—1FA的构造举例—2FA的构造举例—3请构造一个有穷自动机FA的构造举例—4 3.1请构造一个有穷自动机FA的等价性举例3.2 NFA到DFA的转换 3.2 NFA到DFA的转换—NFA确定化3.2 NFA到DFA的转换3.2 NFA到DFA的转换—NFA确定化——ε闭包状态子集I的ε闭包——举例状态子集I的状态子集I的ε闭包——举例状态子集I的——Ia 子集3.2 NFA到DFA的转换Ia子集——举例Ia子集——举例 3.2 NFA到DFA的转换NFA到DFA的转换——子集法NFA=(Q NFA到DFA的转换——举例1aNFA到DFA的转换——举例2NFA DFA DFA NFA DFA DFADFA化简举例1DFA化简——注意NFA到最小化DFA的转换——举例33.3 正规文法与FA3.3 正规文法与FAFA⇒右线性正规文法FA⇒右线性正规文法——举例1y3.4 正规表达式RE与FA 正规表达式与有穷自动机3.4 RE与FA——RE的性质 3.4 RE与FA—RE⇒FARE⇒FA举例1RE⇒FA举例23.4 RE与FA——FA⇒RE FA⇒REFA⇒RE FA⇒RE举例FA⇒RE举例正规文法到正规表达式正规文法到正规表达式DFA的程序实现DFADFA的程序实现DFA DFA的程序实现lDFA的程序实现l第3章内容小结第3章内容小结参考文献。
编译原理 - 陈火旺版 - 第三章
f(V,a)=U f(V,b)=Q f(Q,a)=Q f(Q,b)=Q
S U V Q
a U Q U Q
b V V Q Q
21
确定有限自动机(DFA)
• 状态转换图
f(S,a)=U f(V,a)=U
f(V,b)=Q f(Q,a)=Q f(Q,b)=Q U b b a a a,b S Q b
3
3.1 词法分析器的要求
• 输入:源程序 • 输出:单词符号
– 单词是语言中具有独立意义的最小单位 – 分类
• 基本字:具有固定意义的标识符,
– 如Pascal中, begin, end
• 标识符:变量名、数组名、过程名等 • 常数:分为整型、实型、布尔型等
– 如 100, 0.8, TRUE
• 运算符:+、-、*、/等 • 界符:逗号,分号,括号等
24
非确定有限自动机(NFA)
• NFA: Nondeterministic Finite Automata • 定义:NFA M=S,,δ,S0,F,其中S为状态 的有限集, 为有穷字母表,δ为S * 到 S的子集(2 S)的映射,S0S是初始状态 集,F S为终止状态集。
25
NFA vs. DFA
一个确定有限状态自动机 DFA 是一个五元组 M = (S, ,δ,S0, F ).
有限状态集
有限输入符号集
转移函数 一个开始状态
δ : S S
S0 S FS
26
一个终态集合
NFA vs. DFA
一个非确定有限状态自动机 NFA 是一个五元组 M = (S, ,δ,S0, F ).
22
f(S,b)=V f(U,a)=Q f(U,b)=V a
编译原理第三章-Read
词法分析的基本概念 正规式自动机和状态图 词法分析程序的设计
1
学习目标:
掌握:词法分析程序的构造,正规式和正 规文法到有穷自动机的转换,NFA到DFA的 转换、DFA的化简
理解:正规文法、正规式、DFA的概念、 NFA的概念
了解:词法分析程序的自动构造工具
2
词法分析程序
A→(a|d)A A→ε
A→aA A→dA
最终有产生式: S→aA , A→ ε, A→aA, A→dA
30
2. 将正规文法转换成正规式 将每条产生式改写为正规式
用代入法解正规式方程组
最后只剩下一个开始符号定义的正规式,其中 不含非终结符
正规文法到正规式的转换规则:
文法产生式 正规式
规则1 A→xB B→y A=xy
分配律
5。 r=r, r=r
是“连接”的恒等元素
6。 rr=r r=rrr… “或”的抽取律
25
程序中的单词都能用正规式来定义
令l为a~z的字母,d为0~9的数字
e1= l ( l | d)* e2= dd*
e1表示标识符集合 e2表示无符号整数
注(比较): <标识符>→l|l<字母数字> <字母数字>→l|d|l<字母数字>|d<字母数字>
多含有一个终结符为止
原产生式 变换后产生式
规则1 A→xy A→xB B→y 规则2 A→x*y A→xA A→y 规则3 A→x|y A→x A→y
其中B为一新非终结符
29
例: 将R=a(a|d)*转换成相应的正则文法 令转换成文法G=(VN,VT,P,S) 其中VT={a,d}, 文法开始符为S 首先形成S→a(a|d)*,然后变换 S→aA A→(a|d)*
编译原理第三章
一个句子的表示:羊吃草 <句子> => <主语><谓语> => <名词><谓语> => 羊<谓语> => 羊<动词><直接宾语> => 羊吃<直接宾语> => 羊吃<名词> => 羊吃草 利用上述的规则,可以生成很多句子:“马吃 草”,“他喂马”等,而“羊草吃”不符合上述 规则,不是句子。这些规则称为我们判别句子结 构是否合法的依据,换句话说,这些规则看成是 一种源语言,用来描述汉语。这里仅仅涉及汉语 句子的描述。其中一种描述源语言称为文法。 “草吃羊”也是上述规则生成的一个合法的句子,
第3章 文法和语言 教学要求: 1、掌握:文法的概念,语言的定义, 符号串,文法的形式定义,0型文法, 1型文法,2型文法,3型文法 2、理解:自上而下与自下而上的分析 方法 3、了解:上下文无关文法的ε 规则
预备知识 1、一个程序设计语言是一个记号系统, 其完整定义应包括语法和语义两个方面 2、语法是一组规则,用它可以形成和产 生一个合法的程序,定义什么样的符号 序列是合法的,与符号的含义无关 3、语义是一组规则,定义程序语言的含义 如类型匹配,变量作用域等
编译原理 第三章
q2
q3
q0
F = {q0 , q3 }
正规语言及其描述
DFA如何接受输入符号串
1 Start
1 0 0 1
《编译原理》
q0
0
0
1
1
q1
0
0
0
q2
1 1
q3
正规语言及其描述
DFA如何接受输入符号串
1 Start
1 0 0 1
《编译原理》
q0
0
0
1
1
q1
0
0
0
q2
1 1
q3
正规语言及其描述
1 r
{ q, r }
0, 1
Start
p
0
q
( p , 01001 ) = { q , r }
正规语言及其描述
NFA 的语言
设一个 NFA A = (Q, , , q0 , F )
定义 A 的语言:
L(A) = w ( q0 , w) F
q2
1 1
q3
正规语言及其描述
DFA如何接受输入符号串
1 Start
1 0 1
《编译原理》
0
1
q0
0
1
q1
0
0
0
q2
1 1
q3
正规语言及其描述
DFA如何接受输入符号串
1 Start
1 0 1
《编译原理》
0
1
q0
0
1
q1
0
0
0
q2
1 1
q3
正规语言及其描述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
符号串的方幂
设x是符号串,把x自身连接n次得到的符号串z=xx…xx, 称为x的方幂,记为z=xn 。 特别地,a0=ε。
Σ的闭包Σ*:表示Σ上的一切符号串(包括ε)组成的 集合,即Σ的闭包,表示为方幂的形式如下: Σ*=Σ0∪Σ1∪Σ2∪…Σn∪… Σ的正闭包Σ+: Σ+=Σ1∪Σ2∪…Σn∪…
定义3.7 若L(G1)=L(G2),则称文法G1和G2是等价的。 也就是说,如果两个文法定义的语言一样,则称这两个文 法是等价的。
文法中的元符号 →或 ∷= 表示左部由右部定义 | 表示定义同一个左部的几个可选择的右部 文法中的源符号 文法定义的语言中的符号,全部由文法的终结符构成。
文法是一个数学系统 ,一个形式数学系统可由下列 基本成分来刻画:一组基本符号,一组形成规则,一组公 理,一组推理规则。 定义3.1 文法G定义为四元组(Vn,VT,P,S)。其中Vn为非终结 符号集(或语法实体,或变量) ;VT为终结符号集;P为产 生式(也称规则)的集合;Vn,VT 和 P是非空有穷集。S称 作识别符号或开始符号,它是一个非终结符,至少要在一 条产生式中作为左部出现。 Vn 和 VT 不 含 公 共 的 元 素 , 即 Vn∩VT=φ 通常用V表示Vn∪VT,V称为文法G的字母表或字汇表 。 其中规则,也称重写规则、产生式或生成式,是形如 α→β或α∷=β的(α,β)有序对,其中α是字母表V的 正闭包V+中的一个符号,β是V*中的一个符号。α称为规 则的左部,β称为规则的右部。
间的差异) 。
如果不考虑语义和语用,即只从语法这一侧面来看语言,这种 意义下的语言称作形式语言。形式语言抽象地定义为一个数学系统。 “形式”是指这样的事实:语言的所有规则只以什麽符号串能出现 的方式来陈述。形式语言理论是对符号串集合的表示法、结构及其 特性的研究。是程序设计语言语法分析研究的基础。
3.2 符号和符号串
第3章 文法和语言
【学习目标】
本章目的是为语言的语法描述寻求工具 ◇ 掌握对源程序给出精确无二义(严谨、简洁、易读)的语法描 述手段——文法。 ◇ 熟练使用文法定义程序设计语言的单词和语法成分 ◇ 对形式语言的理论有一个初步基础
【本章难重点】
本章将介绍文法和语言的概念,它们是形式语言的理论基础,形 式语言抽象地定义为一个数学系统。重点讨论上下文无关文法及其句 型分析中的有关问题。
例3.1 文法G=(Vn,VT,P,S),其中Vn={S},VT={0,1}, P={S→0S1,S→01}。这里,非终结符集中只含一个元素S;终
结符集由两个元素0和1组成;有两条产生式;开始符号是S。 例3.1还可以写成: G:S→0S1 S→01 或G[S]:S→0S1 S→01 为书写简洁,常把相同左部的产生式,形如 A→α1 A→α2 … A→αn 缩写为: A→α1|α2|…|αn 这里的元符号"|"读做"或"。
语言L和M的并表示为 L∪M,是一个语言,满足: {w|w is in L or is in M}
语言L和M的连接是一个语言,记为 LM,LM={st |s∈L且 t∈M} 如: L1M1 ={a1,b1,…y1,z1,a2,b2…a9…z9}。 特别地,L {ε}= {ε}L=L。 语言L的闭包记为 L*,L* = L0 ∪ L1 ∪ L2 ∪... 特别地, L0= {ε};Ln = LLn-1 = Ln-1 L,n≥1。 语言L的正闭包记为 L+,L+= L1 ∪ L2 ∪ L3 ... L+ = LL* = L*L; L* = L+ ∪ {ε} 如:(L1∪M1)* ={a,b,… y,z,1,2…8,9 ,aa,1a,…xyz, 6789st..} L1(L1∪M1)* ={所有字母打头的字母和数字符号串}
2、由规则去推导或产生句子 一旦有了一组规则以后,我们可以按照如下方式用它 们去推导或产生句子。我们开始去找∷=左端的带有〈句 子〉的规则并把它表示成∷=右端的符号串,这个动作如 下所示:
<句子> <主语><谓语> <代词><谓语> 我<谓语> 我<动词><直接宾语> 我是<直接宾语> 我是<代词> 我是<名词> 我是大学生
为定义文法所产生的语言,我们还需要引入推导的概念,即定 义V*中的符号之间的关系:直接推导 、长度为n(n≥1)的推导 和长度为n(n≥0)的推导 。
定义3.2
如α→β是文法G=(Vn,VT,P,S)的规则(或说是P中的一产 生式),γ和δ是V*中的任意符号,若有符号串v,w满足: v=γαδ,w=γβδ 则说v(应用规则α→β)直接产生w,或者说,w是v的直接推导 ,也可以说,w直接归约到v,记作v w。 例 3 . 1 的 文 法 G, 可 以 给 出 直 接 推 导 的 一 些 例 子 如 下 : v=0S1,w=0011,直接推导:0S1 0011,使用的规则:S→01, 这里γ=0,δ=1。 v=S,w=0S1,直接推导:S 0S1使用的规则:S→0S1,这里γ=ε ,δ=ε。 v=0S1,w=00S11,直接推导:0S1 00S11,使用的规则:S→0S1, 这里γ=0,δ=1。
每个程序都是一个“基本符号”串,设有一基本符号集,那么PASCAL 或C语言可看成是在这个基本符号集上定义的,按一定规则构成的一切基 本符号串组成的集合。 1、字母表Σ:亦称符号表,是符号的有穷集合。 2、符号串:由字母表中的字符组成的任何有穷序列,称为符号串。 3、符号串的运算 符号串x包含的符号个数即为其长度,表示为|x|。 空符号串,即不包含任何符号的符号串,用ε表示,其长度为0。 符号串的头尾,固有头和固有尾:若z=xy是一符号串,则x是z的头, y是z的尾,如果x是非空的,那么y是z的固有尾,同样如果y非空,x是固 有头。 符号串的连接
定义3.3
如果存在直接推导的序列: v=w0 w1 w2… wn=w,(n>0),则称v推导出(产生) w(推导长 度为n) ,或称w归约到v。记作v w。
定义3.4
若有v w,或v=w,则记作v w。
定义3.5
设G[S] 是一文法,如果符号串x是从识别符号推导出来的,即 有S x,则称x是文法G[S]的句型。若x仅由终结符号组成, 即S x,x∈VT*,则称x为G[S]的句子。 例3.1的文法,存在直接推导序列v=0S1 00S11 000S111 00001111=w,即0S1 00001111,也可记作0S1 00001111。 例3.2的文法,存在直接推导序列v=〈标识符〉 〈标识符〉 〈数字〉 〈字母〉〈数字〉 x〈数字〉 x1=w,即: 〈标识符〉 x1,也可记作〈标识符〉 x1。 S,0S1,000111都是例3.1的文法G的句型,其中000111是G的 句子。〈标识符〉〈字母〉,〈字母〉〈数字〉,a1等都是例3.2 文法G的句型,其中a1是G的句子。
定含义(各个记号和记号所表示的对象之间的关系) 。 语用 Pragmatics:表示在各个记号所出现的行为中,它们的来源、 使用和影响。 每种语言具有两个可识别的特性,即语言的形式和该形式相关 联的意义。 语言的实例若在语法上是正确的,其相关联的意义可以从两个 观点来看,其一是该句子的创立者所想要表示的意义,另一是接收 者所检验到的意义。这两个意义并非总是一样的,前者称为语言的 语义,后者是其语用意义(幽默、双关语和谜语就是利用这两方面意义
3.3文法和语言的形式定义
如果语言是有穷的(只含有有穷多个句子),可以将句子逐一 列出来表示;但是如果语言是无穷的,我们不可能将语言的句子逐 一列出来,而是希望寻求语言的有穷表示。 语言的有穷表示有两个途经:一种是生成方式,就是利用文法, 利用文法的规则和推导手段,可以将语言中的每个句子用严格定义 的规则来构造。另一种方法是识别方式,是使用自动机的行为描述 语言:它的行为相当於一个过程,当输入的一个符号串属于某语言 时,该过程经有限次计算后就会停止并回答“是”,若这个符号串 不属于此语言,该过程要麽能停止并回答“不是”,要麽永远继续 下去。 我们要介绍的文法即是生成方式描术语言的:语言中的每个句 子可以用严格定义的规则来构造。下面给出文法的定义。 下面给出文法的定义。进而在文法的定义的基础上,给出推导 的概念,句型、句子和语言的定义。
两个符号串集合A和B的乘积
符号串集合:若集合A中的一切元素都是某字母表上的符 号串,则称A为该字母表上的符号串集合。 若A、B是符号串集合,则AB={xy|x∈A,y∈B}。
字母表∑上的一个语言是∑上的一些符号串的集合 (字母表 ∑上的每个语言是∑* 的一个子集)。 例如:若有字母表Σ={a,b}, 则∑*={ε,a,b,aa,ab,ba,bb,aaa,aab,…} 关于语言的概念,我们说集合A={ab,aabb,aaabbb,…,anbn,…} 为字母表∑上的一个语言,也可以把集合A描述为: {w|w∈∑*且w=an bn,n≥1}。 我们说集合B={a,aa,aaa,…}为字母表∑上的一个语言,同 样也可以把集合B描述为{w|w∈∑*且w=an,n≥1}。 既然将语言定义为一个集合,那么有关集合的运算也适合语 言。即:设L是(∑上的)一个语言,M是(∑上的)一个语言, 则语言L和M的并,交,差,补是一个语言。
定义3.6 文法G所产生的语言定义为集合{x|S x,其中S为文法识 别符号,且x∈VT*}。可用L(G)表示该集合。
从定义3.6看出两点:第一,符号串x可从识别符号推出,也即x 是句型。第二,x仅由终结符号组成,即x是文法G的句子。也就是说 ,文法描述的语言是该文法一切句子的集合。 考虑例3.1的文法G,有两条产生式(规则) (1)S→0S1和(2)S→01, 通过对第一个产生式使用n-1次,然后使用第2个产生式一次,得到: S 0S1 00S11 … 0n-1S 1n-1 0n1n