第3章 词法分析和词法分析程序

合集下载

词法分析及词法分析程序

词法分析及词法分析程序
语义加工过程:
– w,p,n初值为0,e初值为1;
– 处理整数部分时,对于每个di ,令w=w10+di ; – 处理小数部分时,对于每个di ,令w=w10+di ;及n++;
– 处理指数时,E后若有‘-’号,令e=-1;计算指数值 p=p10+d;
– 在出口处,令ICON=w或FCON=w10^(e(p-n)).
(2)设当前处在Ai状态,所扫描的字符为ai+1,在结点Ai所 射出的诸矢线中,寻找标记为ai+1的矢线(若不存在,则 表明w有语法错误),读入ai+1,并进入状态Ai+1;
(3)重复(2),直到w中所有字符被读完且恰好进入终态F 时,宣告整个识别结束,w可被接受.
28
例:G[Z]:
状态转换图:
Z→0U∣1V
{return ( ICON= w ); {n++; w=w*10+d;}
{return (FCON =w*pow(10,e*p-n) ) ;} {n++;w=w*10+d;} error {p=p*10+d;}
e=-1; error {p=p*10+d;} error {p=p*10+d;} {return (FCON=w*pow(10,e*p-n) );
(1)对于G中形如Aa 的产生式,引矢线RA,且标记
为a;
(2)对于G中形如ABa 的产生式,引矢线 BA,且标
记为a。
34
由左线性文法构造状态转换图
已给文法G=({S,U},{0,1},{SS1 |U1, UU0 | 0},S)
R0
0
1
U1 S

《编译原理》第3章

《编译原理》第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}

北航编译原理课件 03.词法分析

北航编译原理课件 03.词法分析

3. 词法分析程序算法
北京航空航天大学计算机学院
17
1.单词及内部表示 单词及内部表示: 单词及内部表示
单词名称
BEGIN END FOR DO IF THEN ELSE 标识符 常数(整 常数 整) : + * , ( ) :=
保留字和分界符采用一符一类
记忆符
BEGINSY ENDSY FORSY DOSY IFSY THENSY ELSESY IDSY INTSY COLONSY PLUSSY STARSY COMSY LPARSY RPARSY ASSIGNSY
字母、数字
标识符 无符号整数
单字符分界符
S S S
字母
标 数字
非字母数字
出口
数字

非数字
出口
+ * , 单界 ( ) :
其他字符 非=
出口
双字符分界符
北京航空航天大学计算机学院
S
冒号
=
双界
其他字符
出口 15
查保留字表 读字符
字母、数字
S
字母
标 数字
非字母数字
标识符
非数字
数字

无符号整数 单字符分界符
如:b{ab} = {ba}b {a|b} = {{a} {b}} = (a*b*)*
北京航空航天大学计算机学院 23
例:设 ∑ = { a,b },下面是定义在∑上的正则表达式和正则集合 正则表达式 ba* a(a|b)* (a|b)*(aa|bb)(a|b)* 正则集合
北京航空航天大学计算机学院
北京航空航天大学计算机学院 20
‘*’ : ‘,’ : ‘(’ : ‘)’ : ‘:’ :

第三章 词法分析及词法分析程序 课后答案【khdaw_lxywyl】

第三章 词法分析及词法分析程序 课后答案【khdaw_lxywyl】

课 后 答 案 网
第三章 词法分析及词法分析程序 1 试用某种高级语言编写一个 FORTRAN 源程序的预处理子程序,其功能是: 每调用它一次, 即把源程序中的一个完整语句送入扫描缓冲区。要求删去语句中的注释行;删去续行标记字 符,把语句中的各行连接起来,并在语句的末端加上语句结束符。此外,还要求此程序具有 组织源程序列表输出的功能。 2 画出用来识别如下三个关键字的状态转移图。 STEP STRING SWITCH 3 假定有一个猎人带着一只狼、一头山羊和一棵白菜来到一条河的左岸,拟摆渡过河,而岸 边只有一条小船,其 大小仅能装载人和其余三件东西中的一件,也就是说,每一次猎人只 能将随行者中的一件带到彼岸。若猎人将狼和山羊留在同一岸上而无人照管,那么,狼就会 将羊吃掉;如果猎人把山羊和白菜留在同一岸,山羊也会把白菜吃掉。现在,请你用状态转
试找出一个长度最小的输入串,使得:
h (1) 在识别此输入串的过程中,每一状态至少经历一次;
(2) 每一状态转换至少经历一次。 9 对于下列的状态转换矩阵:[]a[]bS[]A[]SA[]A[]BB[]B[]B(i) 初态:S
k 终态:B[][][]a[]bS[]A[]BA[]B[]AB[]B[]B(ii) 初态:S
26 指出下列 LEX 正规式所匹配的字符串:
. (1) "{" [^{]*"}"
(2) ^[^a-z][A-Z][0-9]$ (3) [^0-9]|[\r\n]
w (4) \′([^′\n]|\′\′)+\′
(5) \"([^"\n]|\\["\n])*\"
a 27 写出一个 LEX 正规式,它能匹配 C 语言的所有无符号整数 (例如:OX89ab,0123,45,

编译原理词法分析及词法分析程序

编译原理词法分析及词法分析程序
∴M能识别出L(G)中的全部句子。
状态图=>右线性文法
文法G[0] 0->a1
d 0
S->aA A->dA A->b
a c
1 2
b
d
3
1->d1 1->b
0->c
0->c2 2->d
S->c
S->cB,2有出弧 B->d
左线性文法=>状态转换图
设G=(VN,VT,P,S)是一左线性文法,令|VN|=K, 1) 则所要构造的状态转换图共有K+1个状态. 2) VN中的每个符号分别表示K个状态 2.1) G的开始符S为终止状态 3) 起始状态,用R(VN)标记
识别符号串与归约
S





从初态R到下一状态A对应Ba,即终结 符a归约成非终结符B; U 从状态B转换到状态A对应ABa,即将 Ba归约为A; 状态A转换到状态S(终态)对应S Aa,即 U 将Aa归约为开始符S. 归约成功,恰好进入终态,即状态转换图识 U 别了(或接受)该符号串. 识别00011的例子的归约过程
f是转换函数,是在K×Σ →K上的映像,即:如果f(ki,a)=kj, (ki,kj∈K)意味着,当前状态为ki,输入字符为a时,将转换 为下一个状态kj,我们把kj称作ki的一个后继状态;
1.确定的有限自动机
通常把这五要素组成的五元式M=(K,∑,f, S0,Z)称为确定的 有限自动机(DFA),它是相应的状态转化图的一种形式描 述,或者说,是状态转换矩阵的另一种表示。 在状态转换的每一步,据DFA当前所处状态及扫视的输入 字符,能唯一确定下一状态。

例:文法G=({S,U},{0,1},{SS1 |U1,

编译原理词法分析

编译原理词法分析
❖ 数字:继续读,直到非数字字符出现或文件尾。输 出无符号整数的单词记号及数字串;
❖ =、<、>、!:读下一个字符,判断是否为双字 符分界符,若是,组成双字符分界符,输出类码; 若不是,输出单分界符记号;
编译原理
❖ 非=、<、>、/等与双分界符首字符不同的单分界 字符:输出相应单词记号及单分界符。
1.S是一个有穷集,它的每个元素称为一个状态;
2.Σ是一个有穷字母表,它的每个元素称为一个输入 符号,所以也称Σ为输入符号表;
3.δ是在S×Σ→S上的单值映射,即,如δ (s,a)=s’, (s∈S,s’∈S)就意味着,当前状态为s,输入符为 a时,将转换为下一个状态s’,我们把s’称作s的一 个后继状态;
编译原理 在 入 准初带备整•••始的读输读有个时开入始入头穷模,始,状带:控型读位状态:可制由头置态存以器如状的所三处,处放在:果态符识部于表于输输控读正号别分输示初入入制头好组组符带状移是成成号上态动终的:向发到结字后生最状能移变后态被头每有动化一,该转向读穷个则有移后入控符输限到移一 制号入自下动个器后带动一一符控面上机个个号制,状位,状态置读态,
编译原理
词法分析 读字符
结束 Y
结束
N Y 空字
N 字母 N 数字
Y 组合标识符 Y 组合整数
查保留字Βιβλιοθήκη N 纯单分符Y 输出单分符
N
>,<,!,= Y 读字符
=
N
N
/ Y 读字符
*
N
Y
错误处理
输出保留字
Y 保留字
N 输出标识符
组合整数
读字符
Y 输出双分符
输出单分符 N 输出单分符/
注释处理
读字符

清华大学编译原理第二版课后习答案

清华大学编译原理第二版课后习答案

Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。

答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

第3章 词法分析(3)

第3章 词法分析(3)

3.4 正规式与有穷自动机的等价性
1. NFA M正规式R
在消结过程中,逐步用正规式来标记弧, 规则如下:
1.对于
1
2.对于
R1
2
R2
代之为
3
1
R1 R2
3
代之为 R1 R1| R2 1 2 1 2 R2 R2 3.对于 代之为 R1R2﹡R3 R 1 R 3 1 3 1 2 3
例如:有NFA M如图3.14,求其等价的正规式R。
a,b a 3
x ε 0 b 1 a|b a|b x ε 0
aa
a
4
ε
b
y (a|b)*(aa|bb)(a|b)* x y ε 2 a,b a|b aa(a|b) * y bb(a|b) *
4
ε y x
bb
2
ε
a|b
ε
0
3.4 正规式与有穷自动机的等价性
课堂练习 求以下NFA的正规式 a a 3 a 1 2 b
第一步
a
5 6 b
b
4
b
a
a
3
a
a
s

1 2
b
5 b
4 b

6 b

z
3.4 正规式与有穷自动机的等价性
第二步
a|b s 1 2
aa bb aa|bb 5
a|b
6

z
第三步
s
第四步
(a|b)*
2
5
(a|b)*
z
s
(a|b)*(aa|bb)(a|b)*
z
课堂讲解
• 【例5.12】第72页 • 【例5.13】第73页

词法分析

词法分析

B
7
Z
a
8
Z
(a) 分析过程
A ababaaa
(b) 语法树
2020/5/7
中南大学软件学院 陈志刚
26
第三章 词法分析
五、用状态转换图为正则语言构造正则文法
例如:正则语言{(ab)nb2|n≥0}
基于其句子的一般形式,为其构造状态转换图:
a
Sa Ab b
BbCb Z
从上面状态转换图,可得到相应的正则文法: G[Z]: Z::=Cb C::=Bb|b B::=Ab A::=Ba|a
2020/5/7
中南大学软件学院 陈志刚
12
第三章 词法分析
3.1 词法分析概述
五、词法分析程序的输出形式
语言的单词符号
单词符号是程序语言的基本语法单位,一般分为下面5种: 关键字(基本字):(个数确定,可全体编为一类,也 可一字一类) 标识符:(个数不确定,作为一类) 常数:各种类型的常数 。(个数不确定,按类型分类) 运算符:如+、-、*、/、<等。(个数确定,一符一类) 界符:如,、;、(、)、: 等。(个数确定,一符一类)
2020/5/7
中南大学软件学院 陈志刚
18
二、状态转换图的实现
第三章 词法分析
为了描述方便,引入一些标准过程(函数)与变量: 1.全程字符变量Char:存放最新读入的源程序字符; 2.字符串TOKEN:存放构成单词符号的字符串; 3.过程GETChar:读入一个源程序字符,放入Char中,
注意:一种语言的单词如何分类、怎样编码,主要取决于技 术上的方便。
2020/5/7
中南大学软件学院 陈志刚
13
3.1 词法分析概述

编译原理 第3章

编译原理 第3章
编译原理 6
3.1.3 识别标识符的若干约定和策略
定义标识符的语法规则为 <标识符>→<字母>∣<标识符><字母>∣<标识符><数字> 从语法上来说,标识符的长度似乎可以任意。 然而,考虑实现技术,许多语言都对标识符的最大允许长度作 了限制。
编译原理
7
设计扫描器时,按如下原则行事: 1. 如果一个标识符中的字符个数超过最大允许长度,则把尾部 多出的字符截去; 2. 对于字符个数不超过最大允许长度的标识符,则按“尽可能 长”的策略来识别标识符。
图3.5 状态图
首先,在开始状态R下扫描的第一个符号是0,转到状态 V,表示0是句柄,归约到V。接下来,在状态V扫描1, 转到状态S,此时句柄为V1,归约成S。再往下扫描1,由 状态S转到状态U,表示句柄为S1归约为U。最后,扫描0, 转到状态S,此时句柄为U0,归约为S,
编译原理 27
图3.6(a)列出分析的每一步。形成图3.6(b)所示的语法 树。 自底向上的分析。
读入a1,沿矢线方向到下一状态,在此状态时扫 描a2,……, 直至W中全部字符读完且进入终态F,则W已被接受。
编译原理 19
例:下面的状态图对于串baabba的识别 S→aA|bB,A→bB|aD|a,B→aA|bD|b,D→aD|bD|a|b
a
A a a
a

S b
b
B
a
D b a,b b Z
编译原理
16
E d
d 0
d
d
d 5 d 6
1
.
d
2
E
4
±
. 图3.4文法G<无符号数>的状态图

编译原理作业集-第三章-修订版

编译原理作业集-第三章-修订版

编译原理作业集-第三章-修订版第三章词法分析本章要点1.词法分析器设计,2.正规表达式与有限⾃动机,3.词法分析器⾃动⽣成。

本章⽬标:1.理解对词法分析器的任务,掌握词法分析器的设计;2.掌握正规表达式与有限⾃动机;3.掌握词法分析器的⾃动产⽣。

本章重点:1.词法分析器的作⽤和接⼝,⽤⾼级语⾔编写词法分析器等内容,它们与词法分析器的实现有关。

应重点掌握词法分析器的任务与设计,状态转换图等内容。

2.掌握下⾯涉及的⼀些概念,它们之间转换的技巧、⽅法或算法。

(1)⾮形式描述的语⾔?正规式(2)正规式→ NFA(⾮确定的有限⾃动机)(3)NFA → DFA(确定的有限⾃动机)(4)DFA →最简DFA本章难点(1)⾮形式描述的语⾔?正规式(2)正规式→ NFA(⾮确定的有限⾃动机)(3)NFA → DFA(确定的有限⾃动机)(4)DFA →最简DFA作业题⼀、单项选择题(按照组卷⽅案,⾄少15道)1. 程序语⾔下⾯的单词符号中,⼀般不需要超前搜索a. 关键字b. 标识符c. 常数d. 算符和界符2. 在状态转换图的实现中,⼀般对应⼀个循环语句a. 不含回路的分叉结点b. 含回路的状态结点c. 终态结点d. 都不是3. ⽤了表⽰字母,d表⽰数字, ={l,d},则定义标识符的正则表达式可以是:。

(a)ld*(b)ll*(c)l(l | d)*(d)ll* | d*4. 正规表达式(ε|a|b)2表⽰的集合是(a){ε,ab,ba,aa,bb} (b){ab,ba,aa,bb}(c){a,b,ab,aa,ba,bb} (d){ε,a,b,aa,bb,ab,ba}5. 有限状态⾃动机可⽤五元组(V T,Q,δ,q0,Q f)来描述,设有⼀有限状态⾃动机M的定义如下:V T={0,1},Q={q0,q1,q2},Q f={q2},δ的定义为:δ(q0,0)=q1δ(q1,0)=q2δ(q2,1)=q2δ(q2,0)=q2M所对应的状态转换图为。

Chapt3_词法分析

Chapt3_词法分析

由于部分单分界符与双分界符或注释的首字符相同, 如>、<、=、*和/,所以这些单分界符要在双分界符或 注释中处理。
TEST语言的各条词法规则的状态图
a,b,…,Z,0,1,…,9
S
a,b,…,Z
identifier
0,1,…,9
S S
0,1,…,9
number
+、-、…、;
singleword =
V→Z0|0
画出该文法对应的状态图。
S
0
1
U
1 0
V
1 0
Z
3.3 正则文法及状态图
例3-1 设有正则文法G[Z]: Z→U0|V1 U→Z1|1 利用正则文法来分析符号 串。 例如:分析符号串1001是不 是文法G[Z]的合法句子? 用文法的产生式来推导:
: if、else、for、while、
注释符:用/*….*/括起
TEST语言的词法规则
<identifier>∷= <letter> | < identifier > <letter> | <identifier><digit> <number>∷= <digit> | <number> <digit> <letter>∷= a | b | … | z | A | B | … | Z <digit>∷= 1 | 2 | … | 9 | 0 <singleword>∷= + | - | * | / | = |(|)|{|}|:|,|;|<|>|! <doubleword>∷=>= |<= |!= |= = <commend_first>∷= /* <commend_last>∷= */

第3章词法分析

第3章词法分析

例:语言L[G]={abn|n>=1},其正规文 语言L[G]={ab |n>=1},其正规文 法为G[A]: 法为G[A]: A→aB A→aB B→bB| B→bB| b 画出状态转换图
例:部分单词的状态图
Letter,digit
s
letter digit
其它 (IDN,入口) ,入口) digit 其它 (NUM,值) , (ASG,_) , ) =
3.2 状态转换图
•识别标识符的流程图 识别标识符的流程图 开始
出口 N N 数字 Y
字母 N 出口
Y
取字符
字母 Y
结点:状态用○表示;终态用◎表示 结点:状态用○表示;终态用◎ 有向弧 弧标记 初态 开始 1 letter 2 ── 箭头 ── 输入字符 Letter,d号的表示
• 常用单词种别 常用单词种别——分类 分类
–各关键字(保留字、基本字) 各关键字(保留字、基本字) 各关键字 –各种运算符 各种运算符 –各种分界符 各种分界符——各用一个种别码标识(特定符号类) 各用一个种别码标识( 各种分界符 各用一个种别码标识 特定符号类) –其它标识符 其它标识符——用一个种别码标示(非特定符号类) 用一个种别码标示( 其它标识符 用一个种别码标示 非特定符号类) –常数 常数——用一个种别码标示(非特定符号类) 用一个种别码标示( 常数 用一个种别码标示 非特定符号类)
• 例:文法 文法G[Z]: : • Z→ Z→Za| Aa| Bb • A→ A→Ba | a • B→ B→Ab| b • 画出状态转换图
2、从右线性正规文法出发,构造状态图 从右线性正规文法出发, 以每个非终结符为状态结点, 1. 以每个非终结符为状态结点 , 开始符号 对应初态S 对应初态S ; 2.增设一个终态 Z; 3. 对于规则 A→aB , 画从状态 A 到 B 的 A→aB, 弧,标为 a; A→a, 4. 对于规则 A→a , 画从状态 A 到终态 Z 的弧, 的弧,标为 a。

第3章编译原理答案(主编张晶)

第3章编译原理答案(主编张晶)

others *
1/
2*
3* 4/ others
5
others others
all
6 all
others *
1/
2*
3* 4/ others
5
状态1:注释开始状态。 状态2:进入注释体前的中间状态。 状态3:表明目前正在注释体中的状态。 状态4:离开注释前的中间状态。 状态5:注释结束状态,即接受状态。
(1)分析和识别单词及属性, 包括识别语言的关键字、标识符、常数、运算符等;
(2)跳过各种分隔符,如空格,回车,制表符等; (3)删除注释; (4)进行词法检查,报告所发现的错误; (5)建立符号表。
main( )/*ADD*/ {int x=10,y=20,sum; sum=x+y; }
词法分析
正则表达式也是描述单词的重要工具。
【例2】设Σ={a,b}
正规式 ba* a(a|b)* (a|b)*abb (a|b)*(aa|bb) (a|b)* (aa|ab|ba|bb) * (a|b)(a|b)(a|b) *
正规集 所有以b为首后跟任意多个a的符号串 所有以a为首的符号串 所有以abb为尾的a,b符号串 所有含有两个相继的a或相继的b的符号串 空串和任何长度为偶数的符号串 任何长度大于等于2的符号串
转换
正规文法
main、(、)、{、int、 x、=、10、,、y、=、 20、,、sum、;、sum、 =、x、+、y、;、}
词法分析程序的设计与实现?
词法规则
状态图
词法分析程序
为识别单词而专门设计的有向图, 是设计词法分析程序的一种好途径。
(1)根据词法规则写出正规文法; (2)将正规文法转换成状态图; (3)将状态图转换成流程图。

编译原理第二版第3章词法分析

编译原理第二版第3章词法分析
一、正规式与正规集的递归定义
1. ε和φ都是∑上的正规式,它所表示的正规集分
别为{ε}和Ф; 2. 任何a∈∑,a是∑上的正规式,它所表示的正 规集为{a}; 3. 假定e1和e2都是∑上的正规式,他们所表示的 正规集分别为L(e1)和L(e2),那么,以下也 都是正规式和他们所表示的正规集;
一、正规式与正规集的递归定义
3.2 单词符号及输出单词的形式
单词自身值
对常数,基本字,运算符,界符就是他们本 身的值 对标识符,将标识符的名字登记在符号表中, ‚自身值‛是指向该标识符所在符号表中位 置的指针。
假定基本字、运算符和界符都是一符一种 例:if(a>1) b=100; 词法分析后输出的单词序列是: (2, ) if (29, ) ( (10,‘a’) a (23, ) > (11,‘1’) 1 (30, ) ) (10,’b’) b (17, ) = (11,‘100’) 100 (26, ) ;
4. 仅由有限次使用上述三步定义的表达式才是∑上的 正规式,仅由这些正规式所表示的字集才是∑上 的正规集。
重点回顾
四、将正规文法转换成正规式 求非终结符的正规式 将正规文法中的每个非终结符表示成关 于它的一个正规式方程,获得一个联立 方程组 用代入法解正规式方程组 最后只剩下一个开始符号定义的正规式, 其中不含非终结符
3.3 语言单词符号的两种定义方式
作用: 描述单词的构成规则,基于这类描 述工具建立词法分析技术,进而实现词法 分析程序的自动构造。 工具有: 正规文法 正规式(Regular Expression)
多数程序设计语言的单词符号都能用正 规文法或正规式来定义。
3.3.1 正规文法
多数程序设计语言单词的语法都能用正 规文法(3型文法)描述 正规文法回顾 文法的任一产生式α →β 的形式都为 A→aB或A→a,其中A ,B∈VN ,a∈VT A→Ba或A→a,其中A ,B∈VN ,a∈ VT 正规文法描述的是VT*上的正规集

6.第三章词法分析(2)

6.第三章词法分析(2)
11
DFA表示为状态转换图:例
例1的DFA M=({0,1,2,3},{a,b}, δ,0,{3})
δ 所对应的状态转换图如 P48.图3.5
a
1
b a
a
0
b

3
b
a,b
2
以后,将不加区别的使用DFA和状态转 换图。
12
DFA识别(读出,接受)字α

DFA识别字α 对于*中的任何一个字,若存 在一条从初态结点到某一终态结点的通路,且 这条通路上所有箭弧的标记符连接成的字等于 ,则称为DFA M所识别。 例: 图3.5的DFA识别字abbab, 因为存在路 径 012333;但不接受字ababa, 因为不存 在识别路径。 a a 1 a,b 3 b a 0

状态 0 1 2 3
a 1 3 1 3
b 2 2 3 3
10
DFA表示为 --- 状态转换图

DFA也可以表示成一张确定的状态转换图。 假定DFA M含有m个状态n个输入字符,那末 这张图: 含有m个状态结点 每个结点顶多有 n条箭弧射出和别的结点相 连接 每条箭弧用上的一个不同字符作标记 整张图含有唯一的初态和若干个 ( 可以是 0 个)终态结点。 某个结点可以既是初态同时又是终态。

任务:从左到右一个字符一个字符地读入源程 序,对构成源程序的字符流进行扫描和分解, 从而识别出一个个单词符号。
逻辑上紧密相连的一组字符, 这些字符具有集体含义。

单词:标识符,保留字,常数,算符,界符 词法分析阶段的工作所依循的是语言的词法规 则。描述词法规则的有效工具是正规式和有限 自动机。
第3章 词法分析(II)
词法分析(Lexical Analysis) 词法的表示 词法分析器的设计与实现

03第3章 词法分析1

03第3章 词法分析1
正则表达式的部分操作符满足结合律、交换律和分配律: 即 (ab)c=a(bc) (a|b)|c=a(b|c) a|b=b|a a(b|c)=ab|ac 注意:连接不满足交换律,即ab≠ba
3.5.2 正则文法与正则表达式的等价性
正则文法与正则表达式有等价性,即可以将正则文法转换成正则 表达式。 例如,用正则文法表示标识符的文法规则如下: <标识符>∷= a|b|…|z |<标识符>a|<标识符>b|…|<标识符>z |<标识符>0|<标识符>1|…|<标识符>9 而采用正则表达式则为: <标识符>= (a|b|c|…|z){a|b|…|z|0|1|…|9} 或简写成 <标识符>=字母{字母|数字} 由此可见,正则表达式在描述语言时比正则文法更为简洁 由此可见,正则表达式在描述语言时比正则文法更为简洁。
3.5.1 正则表达式定义
3.5.1 正则表达式定义
在正则表达式的运算符中,重复优先级高于连接,而连接高于 选择,因此,(p) | ((p) . (q))可写成p | pq , 但表达式(p|q).r中的括 号则不能去掉。 例3.5,设字母表∑={a,b},则a,b, Φ和ε都是∑上的正则表达式, 所描述的语言为{a}、{b}、{}、{ε},求表达式{a}{b}、{a|b} {aa|ab|ba|bb} 和{aa|ab|ba|bb}定义的语言。 解:根据正则表达式的形式定义,可得如下结果: 表达式{a}{b}定义的语言为:{ambn|m≥0,n≥0}, 表达式{a|b}定义的语言为:{x|x ∈{a,b}*},即字母a或b组成的 任意长度字符串。 而表达式{aa|ab|ba|bb}表示的语言由字母a或b组成的所有偶长 度字符串。
3.5.2 正则文法与正则表达式的等价性
例3.7,有正则文法如下,将其换成 等价的正则表达式。 S → aS S →aB B →bC C →aC C →a 解: 先用元符号“{”和“}”将文法改 写成如下: S={a}aB B =bC C = {a}a 然后按解方程组的方法可得: C={a}a B= b{a}a S={a}ab{a}a 最终转成正则表达式 S={a}ab{a}a 可以验证,它表示的语言与原来 的正则文法描述的语言相同。

第三章_词法分析

第三章_词法分析

∑*的子集U和V的连接(积)定义为
UV { | U, V}
V自身的 n次积记为 V n VV V
n
规定V0={},令

V * V 0 V1 V 2 称V*是V的闭包;

记 V VV * V 1 V 2
称V+是V的正规闭包。
3.3.1 正规式与正规集
有限自动机
有限自动机所讨论的问题
确定的有限自动机DFA 不确定的有限自动机NFA NFA的确定化 DFA的最小化
标识符单列一种;标识符自身的值表示成按机器字节划分 的内部码。
常数按类型分种;常数的值则表示成标准的二进制形式。
3.1.1 词法分析器的功能和输出形式
例 FORTRAN程序
IF (5.EQ.M) GOTO 100 输出单词符号: 逻辑IF (34,-) 左括号 (2,-) 整常数 (20, ‘5’的二进制) 等号 (6,-) 标识符 (26, ‘M’) 右括号 (16,-) GOTO (30,-) 标号 (19, ‘100’的二进制)
END;
状态转换图实现示例
'0'..'9':
BEGIN WHILE DIGIT DO BEGIN CONCAT;GETCHAR END; RETRACT; RETURN ($INT,DBT)
END;
'=': RETURN ($ASSIGN,-); '+': RETURN ($PLUS,-);
状态转换图实现示例
4 算符和界符的识别
把多个字符符合而成的算符和界符拼合成一个 单一单词符号。:=, **, .EQ.
3.2.3 状态转换图

编译原理部分课后答案,仅供参考

编译原理部分课后答案,仅供参考

第一章编译程序概述1.1 什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序。

对有些高级语言甚至配置了几个不同性能的编译程序。

1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。

从概念上来讲,一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。

一般一个编译过程划分成词法分析、语法分析、语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法。

事实上,某些阶段可能组合在一起,这些阶段间的源程序的中间表示形式就没必要构造出来了。

我们将分别介绍各阶段的任务。

另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系。

编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关的表格,因此需要有表格管理的工作;如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。

图1.3表示了编译的各个阶段。

图1.3 编译的各个阶段1.3 高级语言解释系统为了实现在一个计算机上运行高级语言的程序,主要有两个途径:第一个途径是把该程序翻译为这个计算机的指令代码序列,这就是我们已经描述的编译过程。

第二个途径是编写一个程序,它解释所遇到的高级语言程序中的语句并且完成这些语句的动作,这样的程序就叫解释程序。

从功能上说,一个解释程序能让计算机执行高级语言。

它与编译程序的主要不同是它不生成目标代码,它每遇到一个语句,就要对这个语句进行分析以决定语句的含义,执行相应的动作。

右面的图示意了它的工作机理第二章:PL/0编译程序问答第1题PL/0语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译原理第三章词法分析和词法分析程序设计扫描器时应考虑的问题▪词法分析程序亦称为扫描器▪任务:扫描程序,识别单词▪扫描器的输出是语法分析程序的输入词法分析的必要性▪描述单词的结构比其它语法结构简单,仅用3型文法就够了;▪将单词识别从语法分析识别分离出来,可采用更有效的工具实现;▪有些语言的单词识别与前后文相关,不宜将其与语法分析合并;▪使编译程序各部分独立出来,有利于设计、调试和维护单词符号的内部表示▪常用的内部表示方法: (class,value)▪为便于阅读,常用助记符(或常量标识符、宏定义等)表示class。

▪在识别出变量名、函数(过程)名时,还应进行查填符号表的工作。

识别标识符的若干约定和策略▪在允许长度下,应按最长匹配原则进行识别▪有时需要超前扫描来进行单词识别。

由正规文法构造状态转换图例:正规文法如下:3.2 正规文法和状态转换图<无符号数> → d.<余留无符号数><无符号数> → .<十进小数><无符号数> → E<指数部分><余留无符号数> → d<余留无符号数> <余留无符号数> → .<十进小数><余留无符号数> → E<指数部分><余留无符号数> → ε<十进小数> → d<余留十进小数><余留十进小数> → d<余留十进小数> <余留十进小数> → E<指数部分><余留十进小数> → ε<指数部分> → d<余留整指数><指数部分> → +<整指数><指数部分> → -<整指数><整指数> → d<余留整指数><余留整指数> → d<余留整指数><余留整指数> → ε所对应的状态转换图123456dd••dd dd dEE+ | -无符号数的状态转换图3.2 正规文法和状态转换图由正规文法构造状态转换图▪程序设计语言的单词都能用正规文法描述▪一般说来,凡能用正规文法描述的语言,均可由某种有限状态算法——状态转换图进行分析▪状态转换图:▪有向图(一个初态+N个终态)▪射出结点,进入结点由右线性文法构造状态转换图1.|V N |=K ,则所要构造的状态转换图共有K+1个状态(结点)•构造规则:A →aB ,A →a ,A →εAFBaaA2. 识别串:字符串w=a1a2…a n, a i∈V T•实际:建立推导S⇒* w3.(1) 自顶向下(2) 从S出发:a1a2…a k A k(3) 对任一句子y,必存在一条路从S至F,各标记相连即y显然,若我们从初态出发,分别沿一切可能的路径到达终态结点,并将中径中矢线上所标记的字符依次连接起来,便得到状态转换图所能识别的全部符号串,这些符号串组成的集合构成了该文法识别的语言——句子必有一条从初态S到终态F的路径,此路径上各矢线的标记依次拼接起来所组成的符号串恰为该句子▪由左线性文法构造状态转换图▪初态R(∉V N )▪构造规则A →aA →Ba▪例:文法G=({S,U},{0,1},{S →S1 |U1, U →U0 | 0},S)•识别句子00011▪归约——对应的语法树BAaRAaRU1S1B ij :a 1…a mS 1B 11…B 1m S 2B 21…B 2m…S nB n1…B nmS iB ija j若无则置“出错”太浪费!!!用有效的数据结构如表3-1构造状态矩阵,控制程序对单词加以识别控制程序大都相同,状态矩阵不同开始初始化getchar()查状态矩阵(state, symbol )end?回退一个字符返回(R, N )实数类码二进制浮点正规表达式构造识别该正规表达式的带ε的自动机将ε-自动机转化为DFA,并且最小化根据最小化的DFA构造状态矩阵编写控制程序,对词法进行识别有限自动机▪状态转换图实际上是有限自动机的图形表示▪DFA NFA确定的有限自动机DFA▪五要素M=(K, ∑, f , S0, Z )状态集合字母表状态映射初态终态集状态映射f:K⨯∑→K可将f定义域推广为K⨯∑* →K(1) f^ (s,ε)=s, s∈K;(2) f^ (s,aw)=f^ ( f(s,a),w), s∈K, a∈∑, w∈∑*; 所以,f与f^不可区分▪DFA M识别∑*中的x:从初态S0出发,经一恰好标有x 的路径后可达到某终态S∈Z即:f(S0,x)=S,S∈Z▪M的接受集L(M)={ x| f(S,x) ∈Z, x∈∑* }▪DFA:给一状态,一字符,则唯一确定下一状态▪任一正规文法G,都存在一个DFA M,使得:L(G)=L(M)对于文法:G=({S,A,B,C,D}, {a,b,c,d},P,S),P由如下产生式组成:S→aA|B A→abS|bB B→b|cC C→DD→d|bB(1)构造该文法的状态转换图(2)构造一等价的左线性文法非确定的有限自动机▪NFA M=(K, ∑, f , S 0, Z )▪f :K ⨯∑→ρ(K),即将(Si ,a j )映射到K 的一个子集{S k 1,…,S k m } 即:下一状态不唯一▪可类似地,把f 的定义域拓广到K ⨯∑*(1) f^(S,ε)={S};(2) f^(S,aw)=f^(f(S,a),w) a ∈∑,w ∈∑*mi k k k k w S f w S S S f w a S f f aw S f i m 1^^^^),()},,,,({)),,((),(21====的接受集▪L(M)={x | f(S 0, x )∩Z ≠∅, x ∈∑}▪例:S ABCaa,b ab baa识别符号串ababbNFA 与DFA 的等价性▪NFA 的确定化:构造一DFA ,使得它们有相同的接受集▪思路:使DFA 的状态与NFA 某一状态子集相同S 0S 1abba|b定理3.1例:M=({S 0,S 1}, {a,b}, f, S 0, {S 1}) 此确定化算法的弱点具有ε动作的FA▪允许对ε作转移▪例:0123εεεa bbcf 也可以拓广到f ’: K ⨯∑* →ρ(K). f ’(S,x)是由这样的状态Q 组成,存在从S 到Q 的路径,该路径上的连线标记组成的符号串恰好为x ,其中,允许有有限个标记为ε串aacc 可被接受S的ε-闭包:ε-CLOSURE(S)▪定义(1)S∈ε-CLOSURE(S);(2)设S j∈ε-CLOSURE(S),且S j →εS k,则S k∈ε-CLOSURE(S);(3)有限地使用规则(2)所得的集合为ε-CLOSURE(S).▪例0123εεεabbc的定义Rq Rq KKKw S f q w q f w R f a q f a R f K R R f R f f a q f a w S f f P P CLOSURE wa S f S CLOSURE S f w a K S ∈∈∈==⊆∈∀→∑⨯==-=-=∑∈∑∈∈∀),(),()4(),(),(:)(2,22:)2(,)3(),()),,((,);(),()2();(),()1(,,^^*^),(^^^*^对的定义拓广到及将实际上其中εεεf与f^不相等f(S,a) ⊆ε-CLOSURE(f(S,a)) ⊆f^(S,a)只走一步a矢线| 多步,第一步必须走a矢线| 路径a :第一步可以是ε矢线ε-NFA的接受集:L(M)={w|f^(S0,w)∩Z≠∅} ε-NFA的用途:构造更复杂的FA5ε-FA 的确定化▪构造一DFA ,使得它与ε-FA 等价。

▪例0123εεεa bbc试将下面的ε-FA 确定化为DFA:S125634εεεεaaa abbbbF6DFA状态数的最小化▪对一个DFA M,构造另一个DFA M’,使得:L(M) = L(M’),后者有最小的状态数▪可区分状态:s,t ∈K,若∍w∈∑*,f(s, w) = q ∈Z,而f(t, w) = p ∉Z,则s,t为一串w所区分▪s和t等价:∀w,f(s,w) ∈Z,f(t,w) ∈Z▪所以,可以将等价的状态合并▪算法主要思想:将K划分为r个互不相交的子集,子集内任何两个状态是等价的,而不同子集任两个状态可区分。

▪例:S2S4b aaabbS0S1S3ba ab正规表达式及正规集▪L(G)≡L(M),即:正规文法与FA等价▪所以,现在来为一个正规表达式构造一等价的FA正规表达式及正规集的定义▪举例▪定义设∑是一字母表,则∑上的正规表达式(正则表达式,正规式)及其表示的正规集可递归定义如下:▪(1) φ是一正则表达式, 相应的正规集为φ;▪(2) ε是一正则表达式, 相应的正规集为{ε};▪(3) ∀a∈∑, a 是一正则表达式, 相应的正规集为{a};▪(4) 设r, s是正则表达式, 且它们所表示的正规集为Lr, Ls,则• 1. (r) •(s)是正则表达式, 相应的正规集为Lr•Ls;• 2. (r)|(s)是正则表达式, 相应的正规集为Lr ∪Ls;• 3. (r)*是正则表达式, 相应的正规集为Lr*▪有限地使用上面的规则(4),所得的表达式均是正规表达式▪a*, aa*, a|ba*, (a|b) (a|b) (a|b)*▪正规集1:n 正规式▪正规式r =正规式s L r =L sA1. r|s=s|r A2. r|r=rA3. r|φ=r A4. (r|s)|t=r|(s|t)A5. (rs)t=r(st)A6. r(s|t)=rs|rtA7. (s|t)r=sr|st A8. rφ=φr=φA9. rε=εr=r A10. r*=(ε|r)*=ε|rr*由正规文法构造相应的正规式▪例:S→aS | bA | b,A→aS 则所产生的正规集为▪论断3.1 方程x= rx + t 有解x= r*t▪例S→bS|aA A→aA|bBB→aA|bC|b C→bS|aA▪左线性文法:x=xr+t的方程,有解x=tr*正规式构造FA−Thompson法▪对运算符个数n进行递归▪算法:1、n=0时:r=φr=εr=a∈∑s f f s fa2、设当n=1,2,…,k-1时,M均可构造,当n=k时,根据正规式的定义,r只能是r1|r2, r1•r2, r1*这三种形式之一.其中, r1,r2中最多含k-1个运算符,且设相应的自动机为M1=(K1, ∑,f1,S01,{S f1})L(M1)=L r1M2=(K2, ∑,f2,S02,{S f2})L(M2)=L r2K1∩K2=∅法(续)(1) r= r 1|r 2,引入新开始状态S 0,终态S f ,将M 1,M 2并联:S 01S f1S 02S f2sS f εεεε(2) r=r 1∙r 2,将M 1,M 2串联S 01S f1S 02S f2ε(3) r=r*,引入新开始状态S 0,终态S f ,令原M 1构成循环S 01S f1S S fεεεε在实际的构造中,我们可省略一些ε矢线。

相关文档
最新文档