《编译原理》第三章词法分析

合集下载

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

编译原理第三章

编译原理第三章

例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)

北航编译原理课件 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
‘*’ : ‘,’ : ‘(’ : ‘)’ : ‘:’ :

西安理工大学《编译原理》编译原理作业集-第三章-修订版

西安理工大学《编译原理》编译原理作业集-第三章-修订版

第三章词法分析本章要点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所对应的状态转换图为。

6. 有限状态自动机可用五元组(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所能接受的语言可以用正则表达式表示为。

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

编译原理词法分析及词法分析程序
∴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 输出单分符/
注释处理
读字符

编译原理第三章练习题答案

编译原理第三章练习题答案

编译原理第三章练习题答案编译原理第三章练习题答案编译原理是计算机科学中的重要课程之一,它研究的是将高级语言程序转化为机器语言的过程。

在编译原理的学习过程中,练习题是提高理解和应用能力的重要途径。

本文将为大家提供编译原理第三章的练习题答案,希望能够对大家的学习有所帮助。

1. 什么是词法分析?请简要描述词法分析的过程。

词法分析是编译过程中的第一个阶段,它的主要任务是将源程序中的字符序列划分为有意义的词素(token)序列。

词法分析的过程包括以下几个步骤:1)扫描:从源程序中读取字符序列,并将其转化为内部表示形式。

2)识别:根据预先定义的词法规则,将字符序列划分为不同的词素。

3)分类:将识别出的词素进行分类,如关键字、标识符、常量等。

4)输出:将分类后的词素输出给语法分析器进行进一步处理。

2. 什么是正则表达式?请给出一个简单的正则表达式示例。

正则表达式是一种用于描述字符串模式的工具,它由一系列字符和操作符组成。

正则表达式可以用于词法分析中的词法规则定义。

以下是一个简单的正则表达式示例:[a-z]+该正则表达式表示匹配一个或多个小写字母。

3. 请简要描述DFA和NFA的区别。

DFA(Deterministic Finite Automaton)和NFA(Nondeterministic Finite Automaton)是有限状态自动机的两种形式。

它们在词法分析中常用于构建词法分析器。

DFA是一种确定性有限状态自动机,它的状态转换是确定的,每个输入符号只能对应一个状态转换。

相比之下,NFA是一种非确定性有限状态自动机,它的状态转换是非确定的,每个输入符号可以对应多个状态转换。

4. 请简要描述词法分析器的实现过程。

词法分析器的实现过程包括以下几个步骤:1)定义词法规则:根据编程语言的语法规范,定义词法规则,如关键字、标识符、常量等。

2)构建正则表达式:根据词法规则,使用正则表达式描述不同类型的词素。

3)构建有限状态自动机:根据正则表达式,构建DFA或NFA来识别词素。

词法分析-编译原理-03-(二)

词法分析-编译原理-03-(二)

5. 5.1 5.2 5.3 5.4 5.5 5.6 5.7 6 6.1 6.2
isalpha(ch) : ch→buf; 下一字符→ch WHILE isalpha(ch) OR isdigit(ch) DO ch→buf; 下一字符→ch 回送 ch; key = isKeyword(buf) IF key >= 0 THEN 返回 key Lookup( buf ) → attr 返回 IDN ':' : 下一字符→ch; IF ch等于'=' THEN 返回 ASG 出错处理
第三章 词法分析 3.1 词法分析的任务
输入源程序,输出单词符号
把构成源程序的字符串转换成语义
上关联的单词符号的序列
单词符号
token
按照最小的语义单位设计, 通常表示为二元组
(单词种别,属性值)
1) 单词符号的表示
单词种别
通常按照语法分析的需要设置. 常用: 各关键字,标识符,常数,各
例3-3 状态图的实现算法
1. 2. 3.1 3. 4. 4.1 4.2 4.3 4.4 4.5 读入当前字符 ch //跳过空格 WHILE ch 是空格 DO 下一字符 → ch CASE ch OF isdigit(ch) : ch→buf; 下一字符→ch WHILE isdigit(ch) DO ch→buf; 下一字符→ch 回送 ch 将缓冲区的数字字符串变成数字→attr 返回 NUM
7 8 9 10 11 12 13 14 15 16 17 18
'+' : 返回 ADD '-' : 返回 SUB '*' : 返回 MUL '/' : 返回 DIV '=' : 返回 EQ '>' : 返回 GT '<' : 返回 LT '(' : 返回 LP ')' : 返回 RP ';' : 返回 SEMI 其它 : 出错处理 END OF CASE

《编译原理》西北工业大学第三版课后答案

《编译原理》西北工业大学第三版课后答案

第一章绪论1.1何谓源程序、目标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系?1.2一个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么?1.3选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。

1.4选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。

1.5试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。

第一章习题解答1.解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3.解:C语言的关键字有:auto break case char const continuedefault do double else enum extern float for goto if int longregister return short signed sizeof static struct switch typedef union unsigned void volatile while。

编译原理 第3章 词法分析与有穷自动机(第5-8讲)

编译原理 第3章 词法分析与有穷自动机(第5-8讲)

它所对应的状态表如图:
状态 0 1 2 3 a 1 3 1 3 后继 状态 b 2 2 3 3
输入字符 接受 否 否 否 是
式的转化
22
第3章 词法分析与有穷自动机
■DFA所识别的语言
给定DFA M,对于字符c1,c2,…,cn,当以下条件成立时, 称M接受由c1,c2,…,cn组成的字符串c1c2…cn: 存在状态序列s0,s1,s2,…,sn,使得s1=f(S,c1), s2=f(s1,c2),…,sn=f(sn-1,cn),且sn∈Z。 由DFA M接受的语言L(M)是所有M接受的字符串组成的集 合。
25
第3章 词法分析与有穷自动机
判断下图是DFA还是NFA的状态转换图,并 写出其他2种表示形式
26
第3章 词法分析与有穷自动机
■由正规表达式R构造NFA
1.基本正规表达式 (a)对于正规式φ,所构造NFA: (b)对于正规式ε,所构造NFA: (c)对于正规式a,a∈Σ,则 NFA:
x ε y
练习:若S=a|bb,则L((a|bb)*)=?
5
第3章 词法分析与有穷自动机
■正规式中运算的优先级
括号优先,* 次之,•(连接)再次之,| 最后 例:a|bc* ≌ a|(b(c*)) ab|c*d ≌ (ab)|((c*)d)
■ 正规式与正规集举例
L(a|bc*)=L(a)∪L(bc*) 思考:L(ab|c*d)=? =L(a)∪L(b)L(c*) =L(a)∪L(b)(L(c))* ={a}∪{b}{ε,c,cc,ccc……} ={a,b,bc,bcc,bccc,……}
17
第3章 词法分析与有穷自动机
■有穷自动机的状态转移图表示方法

编译原理第三版 第三章 词法分析

编译原理第三版 第三章 词法分析

超前搜索
例:FORTRAN语言中关键字的识别: DO99K=1,10 识别DO为关键字要搜 DO99K=1.10 索到“,” FORTRAN语言中常数的识别:
5.EQ.M, 5.E08
识别5为常数要搜索到Q
2、状态转换图
大多数程序设计语言中单词符号的词法规则可 以用正规文法描述。如: <标识符>→ 字母|<标识符>字母|<标识符>数字 <整数>→数字|<整数>数字 <运算符>→+|-|×|÷„ <界符>→; |, |( | )|„
#
3.3 正规表达式与有限自动机


目的: 形式化地描述词法规则和词法分析程序 词法分析程序的自动生成 主要内容 正规式与正规集 确定有限自动机 (DFA) 非确定有限自动机(NFA) 正规式与有限自动机的等价性 确定有限自动机的化简
正规文法

多数程序设计语言单词的语法都能用正规文法 (3型文法)描述 正规文法回顾 文法的任一产生式α→β的形式都为
单词符号的种类
(3) 常数 常数的类型一般有整型、实型、布 尔型、字符型等。
(4) 运算符 如 +,-,*,/等,对具体语言个 数是确定的。 (5) 界符 如 , ;()等,对具体语言个数是 确定的。
单词符号的表示形式
词法分析器所输出的单词符号常常表示成如下的 二元式:<单词种别,单词符号的属性值> 单词种别:由语法分析阶段使用的抽象符号。如: 用整数编码。 最简单的编码方案为一类一码,种别编码可设为: 1,2,3,4,5。 另一种编码方案(如本教材中): 标识符:列为一种,用一个整数编码表示; 常数:按类型分种编码; 关键字、运算符、界符:采用一字一种编码。

编译原理第三章(4-2)

编译原理第三章(4-2)
北京交通大学 于双元 15
无符号数一般形式: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、设有如下状态转换图,试给出对应的正则文法 (左线性和右线性)。

编译原理

编译原理
S中有些p与a对应,有些不对应。
13
3.9直接从正则式到DFA

构造算法
实例 例3.37
得到的DFA状态比通过NFA得到的DFA状态少!
14
3.10 DFA最简化(3.9.6-3.9.7)

DFA最简化原理
最简DFA唯一性:每一个正则式可以由一个状态数最少
的DFA识别,且这个DFA唯一。 可行性:DFA存在不可区别状态,可以合并。 化简条件:确保DFA是全函数
8
3.9直接从正则式到DFA

构造原理
转换表:聚焦重要状态之间的转移 开始状态:可能出现在给定正则表达式描述的语言中任
何一个串第一个符号位置的所有重要状态。 接受状态:和结尾#相关的位置
9
3.9直接从正则式到DFA

构造算法
定义四个函数:nullable、firstpos、lastpos、
C b a B a b
开始
A
a
b
a
D
19
例 题 1

叙述下面的正则式描述的语言,并画出接受该语言 的最简DFA的状态转换图 (1|01)* 0*
描述的语言:所有不含子串001的0和1的串
1 0
1
.
start 1 刚读过的不是0 0 2 连续读过一个0 0 3 连续读过 不少于两个0
20
例 题 2
编译原理
第三章 词法分析
1
计算机科学与技术学院
3.8词法分析器生成工具的设计

词法分析器模型 图3.49
词法分析器工作方式
DFA模拟器 图3.27
NFA模拟器 图3.27
DFA转换表
NFA转换表

编译原理-第3章 词法分析--习题答案

编译原理-第3章 词法分析--习题答案

第3章词法分析习题答案1.判断下面的陈述是否正确。

(1)有穷自动机接受的语言是正规语言。

(√)(2)若r1和r2是Σ上的正规式,则r1|r2也是Σ上的正规式。

(√)(3)设M是一个NFA,并且L(M)={x,y,z},则M的状态数至少为4个。

(× )(4)设Σ={a,b},则Σ上所有以b为首的符号串构成的正规集的正规式为b*(a|b)*。

(× )(5)对任何一个NFA M,都存在一个DFA M',使得L(M')=L(M)。

(√)(6)对一个右线性文法G,必存在一个左线性文法G',使得L(G)=L(G'),反之亦然。

(√) (7)一个DFA,可以通过多条路识别一个符号串。

(× )(8)一个NFA,可以通过多条路识别一个符号串。

(√)(9)如果一个有穷自动机可以接受空符号串,则它的状态图一定含有 边。

(× )(10)DFA具有翻译单词的能力。

(× )2.指与出正规式匹配的串.(1)(ab|b)*c 与后面的那些串匹配?ababbc abab c babc aaabc(2)ab*c*(a|b)c 与后面的那些串匹配? acac acbbc abbcac abc acc(3)(a|b)a*(ba)* 与后面的那些串匹配? ba bba aa baa ababa答案(1) ababbc c babc(2) acac abbcac abc(3) ba bba aa baa ababa3. 为下边所描述的串写正规式,字母表是{0, 1}.(1)以01 结尾的所有串(2)只包含一个0的所有串(3) 包含偶数个1但不含0的所有串(4)包含偶数个1且含任意数目0的所有串(5)包含01子串的所有串(6)不包含01子串的所有串答案注意 正规式不唯一(1)(0|1)*01(2)1*01*(3)(11)*(4)(0*10*10*)*(5)(0|1)*01(0|1)*(6)1*0*4.请描述下面正规式定义的串. 字母表{x, y}.(1) x(x|y)*x(2)x*(yx)*x*(3) (x|y)*(xx|yy) (x|y)*答案(1)必须以 x 开头和x结尾的串(2)每个 y 至少有一个 x 跟在后边的串 (3)所有含两个相继的x或两个相继的y的串5.处于/* 和 */之间的串构成注解,注解中间没有*/。

编译原理第三章-Read

编译原理第三章-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章词法分析

编译原理第二版第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*上的正规集

编译原理chapter3 词法分析

编译原理chapter3 词法分析
IF q IN F THEN return (”yes") ELSE return (”no");
18
3.2.2 手工构造识Байду номын сангаас单词的DFA m
根椐DFA识别单词的定义,在研究给定程 序语言单词结构的基础上,能直接构造出识 别它的DFA m。例如:对于Pascal,
标识符:字母开始的字母数字串。 整数:非空数字串。 无符号实数(用表示数字): (a) dd.d dE(+- ) dd
3.1.3 词法分析程序作为一个独立子程序 (1)语法分析程序的子程序; (2)组织成一遍扫描。
3
While i<>j do if i>j then i:=i-j else j:=j-
I
词法分析器
‘while’,‘i’,‘<>’,‘j’, ‘do’,
‘if’,‘i’,‘>’,‘j’,‘then’,
读头
11
2. 状态集:它记忆已读入w子串的状态,m 是奇偶校验器,它应该记住,初始序列是奇 数个1还是偶数个1。因此,m有even和odd两 个状态. 3 .even为开始状态。
4 . 转换函数,(qold , ,a)=qnew
m有: (even ,,0)=even (even ,1)=odd
(odd ,0)=odd (odd ,1)=even
5
词法分析器的输出:
(词类编码,单词自身的属性值)
词类编码提供给语法分析程序使用;单词自 身的属性值提供给语义分析程序使用。具体 的分类设计以方便语法分析程序使用为原则。 关键字可分成一类,也可以一个关键字分成 一类。常数可统归一类,也可按类型(整型、 实型、布尔型等),每个类型的常数划分成 一类。单词自身的属性值提供的内容,是由 词法分析和语义分析的任务划分决定的。

编译原理课件chap03(陈火旺)

编译原理课件chap03(陈火旺)

第三章 词法分析
3。2。2 单词符号的识别:超前搜索 词法分析器的结构图如图3。1所示。
源程序串
预处理 子程序
输入缓冲区
列表
扫描缓冲区 扫描器
单词符号
图3。1词法分析器
第三章 词法分析
当词法分析器调用预处理子程序处理 出一串输入字符串放进扫描缓冲区之后, 分析器就从此缓冲区中逐一识别单词符 号。当缓冲区里的字符串被处理完之后, 它又调用预处理程序装入新串。 下面我们来介绍单词符号识别的一 个简单方法-----超前搜索
第三章 词法分析
关键字的识别 像FORTRAN这样的语言,关键字不加保 护(只要不引起矛盾,用户可以用它们作为普 通标识符),关键字和用户自定义的标识符或 标号之间没有特殊的界符作间隔。这使得关键 字的识别甚为麻烦。请看下面例子: 1 DO99K=1,10 2 IF(5.EQ.M)I=10 3 DO99K=1.10 4 IF(5)=55 这四个语句都是正确的FORTRAN语句。 语句1和2分别是DO和IF语句,它们都是以某 基本字开头的。语句3和4是赋值语句,它们都 是以用户自定义的标识符开头的。
第三章
词法分析
编译程序首先是在单词级别上来分析和翻译 源程序的。词法分析的任务是:从左至右逐个字 符地对源程序进行扫描,产生一个个单词符号, 把作为字符串的源程序改造成为单词符号串的中 间程序。因此,词法分析是编译的基础。执行词 法分析的程序称为词法分析器。 •3。1 对词法分析器的要求
3.1.1 词法分析器功能和输出形式 输入源程序,输出单词符号。 程序语言的单词符号一般分为五种:关键字, 标识符,常数,运算符,界符
第三章 词法分析
对于2和4来说,必须超前扫描到与IF后的 左括号相对应的那个右括号之后的第一个字符 为止。若此字符是字母,则得逻辑IF。若此字 符为数字,则得算术IF。否则,应认为是用户 自定义标识符IF. 标识符的识别、常数的识别及算符和界符的 识别相类似可以参考课本P40,P41这里就不再 多述。 3。2。3 状态转换图 使用状态转换图是设计词法分析器的一种好 途径。转换图是一张有限方向图。在转换图中, 结点代表状态,用园圈表示。状态之间用箭弧 连结。箭弧上的标记(字符)代表在射出结点 (即箭弧始结点)状态下可能出现的输入字符 或字符类。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.关键字(保留字或基本字):
关键字一般是语言系统本身定义的, 通常是由字母 组成的字符串。
2.标识符:用来表示各种名字 如, 变量名, 数组名, 结构名, 函数名, 文件名等。
7
3.2.1 单词与属性字
3.常数:256,3 .14,true, ′abc′ 4.运算符:如,+、-、*、/ 等等 5.分界符:如逗号, 分号, 括号, 单双引号等
第三章 词法分析
第三章 词法分析
主要章节
3.1 词法分析与词法分析程序 3.2 词法分析程序的设计与实现 3.3 词法分析程序的自动生成
3.1 词法分析程序的功能
词法分析的功能 词法分析的功能
从左至右逐个字符地对源程序进行扫描,产生一个 个单词符号,再转换成词标流的过程
源程序
词法分析器
单词序列
3
4
3.2
词法分析器的设计与实现
3.2.1 单词与属性字 1. 单词 单词是语言中具有独立意义的最小语法单位。
要素
独立的意义 最小的语法单位
例 …A*B…,单词是“A”、“*”和“B”。 …int int1…,单词是“int”和“int1”。 …A++*B…,单词是“A”、“++”、“*”和“B”。
8
3.2.1 单词与属性字
注意: 注意:
(1) 同一个字符开头+后续字符->跨多个单词类;
(2) 非单词成分和预处理成分;
•Hale Waihona Puke :源程序注释;/* …….*/预处理指令:
•# define… # include…
9
3.2.1 单词与属性字
2. 属性字 对所识别的单词的数据结构表示。
L1= ( T,C) 属性字
预处理程序(作用) 预处理程序(作用)
(1) 减少内存空间占用; (2) 减轻扫描器实质性处理的负担;
预处理程序主要任务: 预处理程序主要任务:
(1) 滤掉源程序中的非单词成分(如无用空格;换行 符等); •滤掉注释; •宏替换; (2) 实际的预处理工作 •文件包含的嵌入; •条件编译的嵌入;
17
一类一种:关键字、标识符、常数、运算符、界符 一字一种:关键字、运算符、分界符各一码
11
例题(一类一种) 例题(一类一种)
int x=10,
单词类别 1 2 4 3 5 2 5
y;
单词属性值 int 指向x的符号表入口指针 = 10 , 指向y的符号表入口指针 ;
注:通常将标识符的属性放在符号表中,因此常把指向 存放标识符有关信息的符号表入口的指针作为标识符的 12 属性值
例题(一字一种) 例题(一字一种)
′while ′, ′ i ′, ′<> ′, ′j ′, ′ do ′, ′if ′, ′i ′, ′> ′, ′j ′ , ′then ′, 'i ', ':= ′ , 'i', '-' , 'j ' , 'else', 'j ' , ':= ', 'j ', '- ', ' i ' 源程序经词法分析器的输出 〈while,—— 〉 〈id,指向i的符号表入口的指针〉 〈relational-op , < >〉 〈id,指向j的符号表入口的指针〉 〈do,—— 〉 〈if,——〉 〈id,指向i的符号表入口的指针〉 ………… 〈id,指向j的符号表入口的指针〉
设计工具 ——FA
作为扫描器的状态转换图的构造: step1 : 对语言的各类单词分别构造状态图; step2: 将各类状态图合并 合并,构成一个能识别该语言 合并 所有单词的状态图。
(1) 将各类单词的状态图的初态合并为一个惟一初态; (2) 调整冲突编号。
18
例3.2 设某语言由标识符和无符号正整数两类单 词构成,标识符和无符号正整数的词法规则:
1
other
*
2
其中: other表示非D 字符
20
step2: 将各类状态图合并 合并,构成一个能识别 合并 该语言所有单词的状态图。
L
1
step2
D
2
L| D | _
other
3
*
其中: other表示非L| D | _字符
0
D
4 1
other
5 2
* 其中:
other表示非D 字符
词法分析方法: 直接分析法
13
3.2.2
源程序的输入与预处理
1.输入缓冲区 .
成对且对半互补的输入缓冲区模式。即将一个缓冲区分为两 个半区, 每个半区长度为n(n一般为磁盘块或簇长的整倍数), 其 结构如图所示。
n: 取2的整次幂; 每个半区的末尾设置标志“ eof ”表示读入该半区的源程序的结束; B:单词w开始指针; F:扫描w的指针; 14
L→ a | b | … | z | A | B | … | Z D→0|1|…|9 <标识符> → L(L|D|_)* <无符号正整数> → DD*
19
step1 : 对语言的各类单词分别构造状态图;
L
1
step1
D
2
L| D | _
other
3
*
其中: other表示非L| D | _字符
0
D
状态转换图的实现
int state = 0; enum lettet ('a'..'z'); enum number ('0'..'9'); char char1; while(1) { char1 = nextchar( ); switch(state) { case 0: switch (char1) { case 'a'…'z‘ : state = 1; break; '0'…'9‘ : state = 3; break; case case '=' : state = 5; break; case '*' : state = 6; break; case '+' : state = 7; break; case '{ ' : state = 11; break; case '} ' : state = 12; break; default : state =13; } break;
Token
Code
刻画单词类别(单词性质) 刻画单词类别(单词性质)
如:标识符;运算符;… 标识符;运算符;
单词的内码值(可空) 单词的内码值(可空)
10
说明
单词类别通常用整数编码 单词类别提供给语法分析程序使用 单词符号属性信息记录单词符号的特征或特性 单词的属性值提供给语义分析程序使用
编码形式:
31
状态转换图的实现
case 1: { while (char1 == letter||number) char1 = nextchar(); state = 2; } break; case 2: { untread();return (02,value) or return(01,value);} break; /* 函数untread()功能是回退一个已读进的字符; 属性01表示关键字;属性02表示标识符 */ case 3: {while (char1 == number) char1 = nextchar(); state = 4;} break; case 4: {untread(); return (03 ,value);}break; /* 属性03表示无符号整常数 */ case 5: return (04, );break; /* 属性04表示 “=”*/ case 6: return (05, );break; /* 属性05表示 “*” */
21
例:设C语言子集由下列单词符号构成,以正 规式的形式表示:
关键字:int, if, for 标识符: 字母(字母|数字)* 无符号整常数: 数字(数字)* 运算符或分界符: =, *,+,++,+=,{,}
22
23
24
25
语言词法规则 状态转换图 (FA) 可行的扫描器 数据中心法 程序中心法 存储和激活问题
5
复习
流行语言词法规则的表示: 流行语言词法规则的表示:
BNF或EBNF; 3型文法; 正规式

<关键字> -> int | float | for | #include | char | … <标识符> -><字母>{<字母>|<数字>} V = <字母>(<字母>|<数字>)*
6
3.2.1 单词与属性字
两半区互补功能算法: 两半区互补功能算法:
if ( F= 前“ eof ”) { 重新分配、装入后半区;F++ }; else if ( F= 后“ eof ”) {重新分配、装入前半区;F=1}; else F++;
15
2.两个缓冲区的输入模式
控制线 数据线 X : 固定长度的存储空间 ;
16
33
一 .自动生成思想
一个词法分析程序产生器它接收用正规式表示的定义 在某语言字母表Σ上的单词, 然后从此正规式出发
(1) 构造能识别正规式描述的单词集(正规集)的非确定有限自 动机NFA M’, 此步构造算法定义为X。 (2) 用子集法(子集法实现算法命名为Y)将M’确定化,得到与其 等价的DFA M; (3) 用划分算法(命名为Z) 对M 化简, 得到DFA M"。则这个 DFA M"即是理论上的扫描器。
相关文档
最新文档