编译原理实用教程 第3章 词法分析

合集下载

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

编译原理与实现03第3章 词法分析

利用状态图识别句子的方法是一种自底向上的分析方法。开始时,处于开 始状态,此时句柄是随后扫描的字符,即输入串的的第一个符号,所要归 约的符号就是从开始状态经过标记有句柄符号的弧到达的下一个状态的名 字。以后每一步(除第一步外)的句柄是当前状态的名字和随后扫描的字 符,而句柄所要归约的符号就是下一个状态的名字。
3.3.2 状态图的用法
例3.2,对句子0110进行的分析。 解:根据上面介绍的状态图使用方法,我们在图3.5(a)列出分析的每一步。 由于这些规则很简单,所以分析也非常简单。首先,在开始状态S下扫描的第 一个符号是0,转到状态V,表示0是句柄,归约到V。接下来,在状态V扫描1, 转到状态Z,此时句柄为V1,归约成Z。再往下扫描1,由状态Z转到状态U,表 示句柄为Z1归约为U。最后,扫描0,转到状态Z,此时句柄为U0,归约为Z, 从而形成图3.5(b)所示的语法树。 步骤 1 2 状态 S V 扫描的字符 0 1 余留部分 110 10
3.3.2 状态图的用法
状态图画好后,就可以利用状态图来分析和识别字符串,其方法如下: 1.首先设置初始状态S为当前状态。从输入串的最左字符开始重复步骤2,直 到到达输入串的右端为止。 2.扫描输入串的下一个字符,在当前状态所射出的弧中,找出标记有该字符 的弧,并沿此弧前进,过渡到下一个状态。如果找不到标记有该字符的弧, 则说明输入串不是合法的句子,分析过程失败结束;如果我们扫描输入串 的最后一个字符,并从当前状态出发沿着标记有该字符的弧到达终结状态, 则表示输入串是该文法的合法句子,识别过程成功结束;如果扫描输入串 的最后一个符号后到达的状态不是状态图的终结状态,则表示输入串不是 该文法的合法句子,识别过程失败结束。
3.3 正则文法及状态图
程序设计语言的单词符号可用3型文法来描述,3型文法也称为正 则文法。对于正则文法所描述的语言可以用一种有穷自动机来识 别。我们的目的是实现词法分析程序,所以为了简化问题,我们 直接介绍这种自动机的非形式表示,即状态图。

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

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

编译原理课件-词法分析

编译原理课件-词法分析

號等記號的文法
—— 正規文法
語法:借助於記號來描述語言的結構的文法
—— 上下文無關文法
21/76
二、記號的文法
識別字 常數
–整數 –無符號數
運算符 分界符 關鍵字
22/76
Wensheng Li BUPT @ 2008
識別字
識別字定義為“由字母打頭的、由字母或數字組成
的符號串”
正規運算式?
描述識別字集合的正規運算式:
9/76
Wensheng Li BUPT @ 2008
3.2 詞法分析程式的輸入與輸出
一、詞法分析程序的實現方法 二、設置緩衝區的必要性 三、配對緩衝區 四、詞法分析程序的輸出
10/76
Wensheng Li BUPT @ 2008
一、詞法分析程式的實現方法
利用詞法分析程序自動生成器
–從基於正規運算式的規範說明自動生成詞法分析程序。 –生成器提供用於根源程式字元流讀入和緩沖的若干副程
記號的屬性
詞法分析程式在識別出一個記號後,要把與之有關 的資訊作為它的屬性保留下來。 記號影響語法分析的決策,屬性影響記號的翻譯。 在詞法分析階段,對記號只能確定一種屬性
–識別字:單詞在符號表中入口的指針 –常數:它所表示的值 –關鍵字:(一符一種、或一類一種) –運算符:(一符一種、或一類一種) –分界符:(一符一種、或一類一種)
4/76
Wensheng Li BUPT @ 2008
3.1 詞法分析程式與語法分析程式的關係
詞法分析程式與語法分析程式之間的三種關係
–詞法分析程式作為獨立的一遍 –詞法分析程序作為語法分析程序的副程式 –詞法分析程序與語法分析程序作為協同程式
分離詞法分析程序的好處

第3章 词法分析 (编译原理 陈火旺)

第3章 词法分析 (编译原理 陈火旺)

标识符的符号表入口地址作为其单词符号的属性值,常
每个基本字占一个单词种别,单词符号的属性值缺省。
对于界符,运算符通常一个符号一个种别,单词符号的
属性值缺省
例: 参见P42.表3.1 单词符号及种别编码
10
3.1.3 词法分析器作为独立子程序

词法分析可采用如下两种处理结构:
把词法分析程序作为主程序。将词法分析作为
19
3.2.1 正规文法、正规式与正规集

正规集:由正规文法产生的语言所构成的集合。
注:正规集是集合,可有穷也可无穷。 可通过正规式来形式化表示。

对于一个正规文法的语言提炼出一个简洁的公式,用这个
式子来对它进行形式化的表示,这个式子叫正规式。

正规式:也称正则表达式,是说明单词的模式的一种重要的 表示法(记号);是定义正规集的数学工具;用来描述单词 符号。
在设计一个编译程序时,通常是把对源程序的结构分析分为词 法分析和语法分析两个相对独立的阶段来完成。
第一,描述单词的结构比描述源程序的其它语法结构要简单

得多,仅使用3型文法也就基本够用了。
第二,由于把词法分析和语法分析分开,可使编译程序各部

分的功能更为单一,整个编译程序的结构也更加清晰,从而 有利于编译程序的编写和调整。 上述词法分析和语法分析两个阶段的划分,仅仅是对整个编译 程序的逻辑功能而言,而不一定指的是编译程序的执行流程。
25
例3.2 判断下述正规式之间是否等价: (1)b(ab)*与(ba)*b (2)(ab)*与a*b* 解: (1) b(ab)*对应的正规集是b后面出现任意多个ab对
L(b(ab)*)={b,bab,babab, ……}

编译原理 第三章 词法分析

编译原理 第三章 词法分析
5、界符:如逗号、分号、括号、/*,*/ 等。它是确定的。
单词符号的表示形式:词法分析器所输出的单词符号常常表示成
二元式(单词种别,单词自身的值)。 单词种别可以用以下形式表示: 1、一类单词统一用一个整数值代表其属性。例如:1代表关键字, 2代表标识符等。 2、每一个单词一个类别。例如:1代表BEGIN,2代表END等。 单词自身的值可以表示成:常量的二进制表示;常量、变量等在符号表 种的地址码,等等。
例3-3:简单的状态转换图示例:
1
X
2
初态
终态
Y
(a)转换图示例 数字
3
从0状态到1状态 可能出现字母
字母或数字 字母 其他
0
1
2
*
0
数字
1
其他
2 *
(b)识别标识符的转换图
(c)识别整数的转换图
例3-4:识别FORTRAN实型常数的转换图:
例如下列实型常数可 以被以下转换图识别: 1.23E+4
•scanner当作一遍。 •把scanner当作子程序。
scanner
源程序
scanner作为一遍
设计前提:
输入
列表 把scanner作为一个独立的子程序; 输入缓冲区 预处理 • 词法分析器的任务为输出单词符号。 子程序

扫描缓冲区
预 处 理 部 分
•必要性:编辑性字符如空白符、回车符等,除了出现在文字和 扫描器 常数中以外,在别处出现都没有意义。 扫 单词符号 描 •功 能: 剔除无用字符。 器 语法分析器 •实 现: 预处理子程序。 图2.1 词法分析器
例3-2 :下述C++代码段:while ( i >= j ) i - -; 经词法分析器处理以后,它将被转换为如下的单词符号串

第3章 编译原理课件—词法分析

第3章 编译原理课件—词法分析

个个单词符号。把作为字符的源程序改造为 单词符号串组成的中间程序,执行词法分析 任务的程序称为词法分析器或称扫描器。
2015/12/6
4
3.1 词法分析概述
二、词法分析程序的功能

词法分析程序主要执行以下功能:
读入源程序字符串,识别开具有独立含义的最

小语法单位——单词(符号); 把单词变换成长度统一的且为定长的属性字; 其他功能: 滤掉空格,跳过注释、换行符 某些预加工处理
27
2015/12/6
六、转换系统

定义:转换系统是具有下列三个特征的状态转换 图,即 1) 开始状态S和终止状态Z 唯一; 2) 无弧进入S,也无弧自Z射出;
3)可能存在标记为空串(ε)的弧。

转换系统与状态转换图的区别: ε弧
ε S1 A S2 Z2 ε
28
Z1 ε
S ε
2015/12/6
Z
3.3 正规式与有限自动机
2015/12/6
5
3.1 词法分析概述
三、词法分析程序的安排
常常把词法分析程序作为独立的一遍或作 为被语法分析程序所调用的子程序。 1、作为独立的一遍: 语法分析前进行词法分析,把单词符号 串形成中间文件存贮。

2015/12/6
6
3.1 词法分析概述
三、词法分析程序的安排

2、作为被语法分析器词用的子程序:
2015/12/6 32
正规式与正规集
三、为正则文法构造状态转换图 Nhomakorabea 什么是正则文法?(U::=T 步骤如下:
以S为开始状态作结点;
或U::=WT)
把文法中的每一个非终结符号作为状态结点; 对于形如Q::=T的每个规则,引一条开始状态S

编译原理chapter3 词法分析

编译原理chapter3 词法分析

一 设计一个奇偶校验器
DFA是由集合,序列和函数定义的数学模型, 它对于 上的w,判定是可接受的还是不可 接受的。例如,设计一个DFA m ,奇偶校验 器,首先,w是由0,1组成的字符串,因此, 1. ={0 ,1}且w在一条输入带上。
0 1 0 1 1$
读头
精品文档
11
2. 状态集:它记忆已读入w子串的状态,m是 奇偶校验器,它应该记住,初始序列是奇数 个1还是偶数个1。因此,m有even和odd两个 状态. 3 .even为开始状态。
词法分析器
‘while’,‘i’,‘<>’,‘j’, ‘do’, ‘if’,‘i’,‘>’,‘j’,‘then’, 'i', ':=’ , 'i', ’-’ , 'j', 'else', 'j', ':=', 'j', '-', ‘i'
精品文档
4
词类和属性
computator n. Calcculating machine.
3.1.1 词法分析程序的功能 源程序 单词词序法列分析器
3.1.2 单词的词类和属性 (词类符号,单词的属性值)
3.1.3 词法分析程序作为一个独立子程序 (1)语法分析程序的子程序; (2)组 织成一遍扫描。
精品文档
3
While i<>j do if i>j then i:=i-j else j:=j-I
三 一个DFA有三种表示:
(1)象上面,用转换函数;
精品文档
14
转移矩阵
状态转换图
a
b
0
1
2
a

编译原理之词法分析

编译原理之词法分析

3.1.3 词法记号的属性
属性值用二元组序列表示
position := initial + rate * 60的记号和属性值: id,指向符号表中position条目的指针 assign _ op, id,指向符号表中initial条目的指针 add_op,+ id,指向符号表中rate条目的指针 mul_ op, * num,整数值60
3.3.4 正规定义
• 正规定义的例子
Pascal语言的标识符集合 letter A | B | … | Z | a | b | … | z digit 0 | 1 | … | 9 id letter(letter|digit)*
3.3.4 正规定义
• 正规定义的例子
Pascal无符号数集合,例1946,11.28,63.6E8,1.999E6 digit 0 | 1 | … | 9 digits digit digit* optional_fraction .digits| optional_exponent (E ( + | | ) digits ) | num digits optional_fraction optional_exponent 简化表示 num digit+ (.digit+)? (E(+|)? digit+)?
• 例
L:{ A, B, …, Z, a, b, …, z },D:{ 0, 1, …, 9 } L∪D,LD,L6,L*,L(L∪D )*,D+
3.3 词法记号的描述
例 令L表示集合{ A, B, …, Z, a, b, …, z },令D表 示集合{ 0, 1, …, 9 }。下面是用表运算作用于L 和D所得到的新语言的例子。

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

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

有限自动机模型
Finite Automata (FA):
一个有限自动机的模型如下所示:
... ... head finite control input tape
输入带被分成一个个的小单元来装输入符号, 其右边是无限延伸的。 有限状态控制器由有限个状态组成,并根据读 入字符将当前状态转换成下一个状态
有限自动机与正规式的等价性证明
• 证明一: 对于∑上的NFA M,我们来构造∑上的正规式r, 使得L(r)=L(M)。 首先,我们将状态图的概念拓广,令每条弧可 用正规式作标记。并在M的转换图上加进两个 结点,一个为X,一个为Y。从X用ε弧连接到Y, 从而形成一个新的NFA,记为M’,它只有一个初 态X和一个终态Y。显然L(M)=L(M’)。即,这 两个NFA是等价的。 现在来逐步消去M’中的所有结点,直至只剩下 X和Y为止。
有限自动机接受的语言
The language accepted by FA
一个FA 能够接受的语言定义如下:
• 对于一个 DFA M, 可接受的语言表示为: L(M)={ x | x∈Σ* and f(s0 , x)∈Z} • 对于一个 NFA M, 其接受的语言为: L(M)={x | x∈Σ*and f(s0, x)∩Z≠Φ} • 两个 FA M and M’ 是等价的当且仅当 L(M) = L(M’)
M
M
a
M
假设对于任意 正规式 r1 and r2, 如果 |r1| < k 而 且 |r2| < k, 那么就于一个NFA M1 and M2 对应 于r1 和 r2. 所以对于任意 RE r, |r| = k, 我们有:
• 这个自动机所接受的语言是所有被3整除 以后余数为2的二0, q1, q2, q3}, {0, 1}, f1, q0 {q3} ) . 其中f1如下所示 :

编译原理 词法分析

编译原理 词法分析
U a Q a a,b
S
b
b
V
b
DFA表示成状态转换矩阵(Transition Matrix)
例 DFA M=({S,U,V,Q},{a,b},f,S,{Q}) f(S,a)=U f(V,a)=U f(U,a)=Q
行表示状态,用 f(Q,a)=Q 双箭头“=>”标 明初态;否则第 一行即是初态
f(S,b)=V f(V,b)=Q f(U,b)=V 的右端标以1,
学习目标:

掌握:正规式和正规文法到有穷自动机的转换,NFA 到DFA的转换、DFA的化简

掌握:词法分析器构造原理(实验原理) 理解:正规文法、正规式、DFA的概念、NFA的概念 了解:词法分析程序的自动构造工具
3.1 单词的描述工具
3.2 有穷自动机
3.3 正规式和有穷自动机的等价性
多数程序设计语言单词的语法都能用正规 文法(3型文法)描述 正规文法回顾 文法的任一产生式α →β 的形式都为A→aB或 A→a,其中A,B∈VN ,a∈ VT 正规文法描述的是VT*上的正规集
例如 :
令l表示a∽z中的任一英文字母,d表示0∽9中任 一数字

描述标识符的正规文法
<标识符>→l|l<字母数字> <字母数字>→l|d|l<字母数字>|d<字母数字>
2.
任何a∈∑,a是∑上的正规式,它所表示的正规 集为{a};
3.
正规式与正规集的递归定义 假定e1和e2都是∑上的正规式,他们所表示的正 规集分别为L(e 1)和L(e 2),那么,以下也都是 正规式和他们所表示的正规集;
正规式 (e1 ) 正规集 L(e1) L(e1)∪L(e2) L(e1)L(e2) (L(e1))*

编译原理-第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.处于/* 和 */之间的串构成注解,注解中间没有*/。

《编译原理实践及应用》第3章词法分析

《编译原理实践及应用》第3章词法分析
语法 树


编译 程序 的后 续部 分
3.1 词法分析器的功能
• 功能:
源程序 词法分析程序
Token串
语法分析程序
– 逐个读入源程序字符并按照构词规则切分成一系列单词
• 主要任务:
– 读入源程序,识别出各个单词符号,并输出
• 其他任务:
– 滤掉程序中的无用成分,如空格、注释、换行符 – 调用符号管理程序,对识别出的符号进行管理 – 追踪换行标志,指出源程序出错的行列位置
• 结论:每一种程序设计语言,都有它自己的字符
集V,语言中的每一个单词或者是V上的单个字 符,或者是V上的字符按一定方式组成的字符串。 组成方式就是对字符或字符串进行(连接)―.”、 或“|”(并)、或“*/+”闭包运算。
二、正规式
• 正规式也称为正则表达式,是表示正规集的工具。 • 正规式(regular expression)是说明单词的 pattern的一种重要的表示法,是单词构成规则的 描述工具。
缓冲区 buffer 字符 首字符 分类1.3


字 键


/ ‘
值 常

除号/

运 算 符

常 字

输出 标识符 token串 常数 1.4
查填符 号表2
识别界 符和运 算符1.9
其 它


其 它 界
符 和 运 算 符
token文件
符号表
初始化 打开源文件 Y 符号表和token 表写入文件 write_sym() write_token()
词法错误类型
–非法字符 –单词拼写错误 –难以发现下面的错误 fi (a = x ) … – 在实数是a.b格式下,可以发现下面的错误 123.

编译原理第3章. 词法分析

编译原理第3章. 词法分析
2010-12-23
扫描缓冲区的设计: 扫描缓冲区的设计: 两个指针:起点指针,搜索指针 两个指针:起点指针 搜索指针 两个半区: 两个半区:左右半区互补使用


起点指针 搜索指针
7
二.单词符号的识别以及超前搜索
词法分析程序在识别单词时,对有些单词需 要向源程序中多看若干个字符才能被识别,称为 超前搜索。
2010-12-23 3
单词种别码
保留字: ①一字一种:1-begin 2-end 3-if 4-then 保留字: ②全体为一种:0 或者 k 标识符: 标识符: 全体为一种 常数: 常数: ①数据类型:整型、实型、字符型、布尔型 ②全体为一种 运算符: 运算符: ①一符一种 ②全体为一种 界符: ①一符一种 界符: ②全体为一种 返回
6
§3.2 词法分析程序的设计 一.输入、预处理
源程序 输入缓冲区 预处理 子程序 扫描缓冲区
词法分析的预处理程序: 词法分析的预处理程序:从源 程序中处理出一串确定长度的 输入字符, 输入字符,并将其装进词法分 析程序的扫描缓冲区。 析程序的扫描缓冲区。 处理: 处理: 删除注解、空格、回车符、 ①删除注解、空格、回车符、 换行符之类非必要信息。 换行符之类非必要信息。 ②把标识符登录入符号表以及 某些预加工处理等。 某些预加工处理等。
2010-12-23 8
三.状态转换图
状态转换图: 状态转换图: 是由一组矢线连接的有限个结点所组 成的有向图。其作用是识别相应的字符串。 例如: 标识符: I→ l | I l | I d 初态
l
=>①

l/d
非l 非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*上的正规集

编译原理第三章词法分析

编译原理第三章词法分析
L→ a | b | … | z | A | B | … | Z D → 0 | 1 | … | 9 <标识符> → L(L|D|_)* <无符号正整数> → DD*
z19
step1 : 对语言的各类单词分别构造状态图;
step1
L
1
2
other
*
3 其中: other表示非L| D | _字符
z8
3.2.1 单词与属性字
注意:
(1) 同一个字符开头+后续字符->跨多个单词类;
(2) 非单词成分和预处理成分;
•例:源程序注释;/* …….*/
预处理指令:
•# define… # include…
z9
3.2.1 单词与属性字
2. 属性字 对所识别的单词的数据结构表示。

控制线
数据线
X : 固定长度的存储空间 ; z16
预处理程序(作用)
(1) 减少内存空间占用;
(2) 减轻扫描器实质性处理的负担;
预处理程序主要任务:
(1) 滤掉源程序中的非单词成分(如无用空格;换行
符等);
•滤掉注释;
(2) 实际的预处理工作
•宏替换; •文件包含的嵌入;
L1= ( T,C)
属性字 Token
Code
刻画单词类别(单词性质)
如:标识符;运算符;…
单词的内码值(可空)
z10
说明
单词类别通常用整数编码 单词类别提供给语法分析程序使用 单词符号属性信息记录单词符号的特征或特性 单词的属性值提供给语义分析程序使用
编码形式:
一类一种:关键字、标识符、常数、运算符、界符 一字一种:关键字、运算符、分界符各一码

【编译原理】第三章词法分析

【编译原理】第三章词法分析

【编译原理】第三章词法分析⼀,词法分析器的作⽤词法分析是编译的第⼀阶段。

词法分析器主要任务是读⼊源程序的输⼊字符、将他们组成词素,⽣成并输出⼀个词法单元序列,每个词法单元对应于⼀个词素。

分析部分:词法分析、语法分析(简化编译器设计、提⾼编译器效率、增强编译器可移植性)1)词法单元:词法单元名和可选的属性值组成。

关键字、操作符……2)模式:词法单元词素可能具有的形式,当词法单元是关键字时,模式就是这个关键字的字符序列3)词素:源程序中的⼀个字符序列,它和某个词法单元模式匹配。

4)词法错误:识别出某个错误词素,继续判断下⼀个词素⼆,输⼊缓冲1)我们⾄少向前看⼀个字符,才能判断当前词素是否到头。

2)对付⼤型源程序,需要处理⼤量字符。

处理往往需要很多时间,我们采⽤两个交替读⼊的缓冲区。

(详见73)三,词法单元的规约1)我们会不会⽤完缓冲区?通常对于⽐较长的字符串我们采⽤ ”+“的形式链接起来。

2)正则表达式:letter_(letter_ | digit) * 表⽰字母开头 0个或多个字母或数字3)正则表达式例⼦a |b {a, b}(a | b) (a | b ) {aa, ab, ba, bb}aa | ab | ba | bb {aa, ab, ba, bb}a* 由字母a构成的所有串集(a | b)* 由a和b构成的所有串集复杂的例⼦( 00 | 11 | ( (01 | 10) (00 | 11) * (01 | 10) ) ) * 010011010000100000101110013)正则表达式扩展1>⼀个或多个实例⼀元后缀算符“+”的意思是“⼀个或多个实例”,即正规式a+表⽰⼀个或多个a的所有串的集合。

算符+和算符*有同样的优先级和结合性。

代数恒等式 r* = r+ | 和r+ = rr*表达了这两个算符之间的关系。

2>零个或⼀个实例⼀元后缀算符?的意思是“零个或⼀个实例”,r?是r | 的缩写。

《编译原理》教学课件 第3章-词法分析

《编译原理》教学课件 第3章-词法分析
主要内容: • 基本概念 • 正则表达式定义及一些性质 • 正则定义 • 扩充的正则表达式及程序设计语言中
单词的定义 • 正则表达式的局限性。
正则表达式
• 基本概念: • 字母表:非空有限集,,其元素称为符号或字母. • 符号串:符号的有限序列,也称为‘字’。或表示
空串 空串集{}不同于空集 。
• 符号串长度:符号串中字符的个数.|| • 符号串连接:和都是符号串,则为符号串的连接
非确定有限自动机NFA
• 定义1:一个非确定有限自动机(NFA)A是 一个五元组A=(,SS,S0,f,TS).其中
• 是字母表
• SS是状态集
• S0是初始状态集 • f是转换函数,但不要求是单值的

f: SS (∪{}) 2SS
• TS是终止状态集
非确定有限自动机NFA
• 定义2:设A是一个NFA,A= (,SS,S0,f,TS) • 则定义L(A)为从任意初始状态到任意终止状
❖ 空格符和制表符以及换行符的处理 1.无用的空格符和制表符要删掉; 2.字符串内的空格不能删; 3.换行符不能删。用于错误定位
❖ 复合型特殊符,如“:=”的处理 读到“:”时不能判断是否为冒号,必须读下 一字符。
❖ 括号类配对预检
• 括号类: begin …end ,if … then,[ ],{ },( )
描述程序设计语言中的单词字,进一步为词法 分析程序的自动构造寻找特殊的方法和工具。 主要内容: • 确定有限自动机DFA • 确定有限自动机DFA的实现 • 非确定有限自动机NFA • NFA到DFA的转换 • DFA的化简
确定有限自动机DFA
• 确定有限自动机(DFA:Deterministric Finite Automata ) 为一个五元组
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。



源程序
词法分析程序
图3-1词法分析单独作为一遍
单词序列
取符号
源程序
词法分析程序
送符号
语法分析程序
图3-2词法分析作为语法分析子程序
3.1.2单词符号

单词符号是程序设计语言的基本语法单位和最小语义单位。单词符号一 般分为五类。
(1)关键字(又称保留字或基本字)如if,then ,else,while,do, begin和end。 (2)标识符,用于表示变量名、过程名等。 (3)常数,如123,实数型45.67等。 (4)运算符,如+,-,*,/,<,=等。 (5)界限符,如逗号、分号和括号等。 程序设计语言中的关键字、运算符和界限符的数量都是确定的。而常数 和标识符的数量是不确定的。
3.1.1

词法分析
词法分析是编译过程的第一个阶段。这个阶段的任 务是从左到右一个字符一个字符地读入源程序,对 构成源程序的字符流进行扫描和分解,从而识别出 一个一个的单词。编译程序中完成词法分析任务的 程序段,称为词法分析程序。词法分析程序对源程 序进行扫描,从中识别出一个个的单词符号,因此, 词法分析程序又称为词法分析器,又称扫描器。







′0′‥′9′: begin
while digit do begin concat;getch; end; retract; return(2,dtb); end;
′+′: return(31, ); ′-′: return (32, ) ′ *′: return (33, ); ′/′: return (34, ); ′=′: return (37, ); ′:= ′: return (51, ); ′; ′: return (54, ); ′(′: return (52, ); ′) ′: return (53, ) ; end of case error;

例3.2 有状态转换图3-4所示,其中,0结点用‘S’标记,表 示初态结点;2结点用‘E’标记,表示终态结点。从初态结 点出发到某一终态结点所经过的路径,称为能为该状态转换 图所接受的符号串。
字母或数字 S 0 字母 其它字符
1
2
E
图3-4扫描缓冲区
字母或数字
S

0
字母
数字
非字母、数字1ຫໍສະໝຸດ 2+3.1.3 一个简单的词法分析程序的设计

1.预处理 词法分析器在识别单词符号之前,需要对输入区的源程序进行预处理。 预处理包括删除无用的空格、跳格、回车和换行等编辑性字符以及注释 部分。每一次对一串定长的输入字符进行预处理,并装进一个指定的缓 冲区。 2.状态转换图


利用状态转换图可以设计词法分析器。状态转换图是一个有向图,仅包 含有限个结点,每个结点表示一个状态,其中有一个初始结点,至少有 一个终态结点,结点间弧的标记是输入字符或字符类。


1.单词类别的表示

单词类别表示单词的种类,它是语法分析所需要的信息。一个语言的单 词符号如何划分种类、分为几种,如何编码都属于技术性的问题,主要 取决于处理上的方便。单词符号有5个类别:关键字、标识符、常数、 运算符和界限符,可以用1、2、3、4、5来表示。也可以用一字符一类 别码的编码形式,如保留字可以采用一字一类别。分界符也可以采用一 字一类别。对于一字一类别的单词,单词的类型就是单词的自身值,词 法分析程序就不必输出其值了。常数的自身值是其自身的二进制。

词法分析器作为编译程序的一部分,它与语法分析程序之间 接口方式有两种。一种方式是词法分析程序独立工作,把字 符流的源程序变为单词序列,输出在一个中间文件上,这个 文件称为语法分析程序的输入而继续编译,如图3-1所示就 是将词法分析单独作为一遍的接口方式。源程序词法分析程 序单词序列图3-1词法分析单独作为一遍 取符号源程序词法分析程序语法分析程序图3-2词法分析作 为语法分析子程序送符号 另一种方法,也是常用的一种方法就是把词法分析程序设计 成一个子程序,每当语法分析程序需要一个单词时,就调用 该程序。词法分析程序每得到一次调用,就从源程序文件中 读入一个字符,直到识别出一个单词为止。这种方法省去了 中间文件。
第三章 词法分析
本章学习目标
词法分析程序的主要任务是对源程序进行扫描,从 中识别出单词。它是编译程序的第一步,也是编译 过程中不可缺少的部分。本章的主要内容是: 正则表达式和有限自动机 文法、正规表达式、正规集及自动机的相互转换 词法分析器的C语言实现 词法分析器的自动生成

3.1词法分析器与单词符号
数字
非数字
3
4
+
E E
+
5
E + E+ E+ E+
+ E

— * — = — (
) ;
6 7
8
9
10
11
E+
= — 非=
+
126 136
E
+ E
/ 其他
146 17 E
*
156
非*
E+ EE +
166
图3-6识别各类单词符号的状态集合






词法分析程序的构造如下: 初始化:arr:=′′;getch;getnbc; case ch of ′a′‥′z′: begin while letter or digit do begin concat; getch end; retract; c:=reserve; if c=0 then return (1,arr) ; else return(c, ); end;
2.单词的自身值

单词自身的值是编译程序中其他阶段所需要的信息。对于单 词符号来说,如果一个种别只含有一个单词符号,那么这个 单词符号,其种别就安全地代表了它的自身值。如果一个种 别含有多个单词符号,那么对于它的每个单词符号,除了给 出种别编码之外,还应该给出单词符号自身的值,以便把同 一种单词区别开来。注意,标识符自身的值就是标识符自身 的字符串。而常数自身的值是常数本身的二进制数值。
相关文档
最新文档