编译原理第3章分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
i结对应的程序段 字母或数字
i 其它 j
l结对应的程序段
GetChar( );
while(IsLetter( )orIsDigit( ))
GetChar( );
…
i结对应的程序段
§3.2 词法分析器的设计
§3.3 正规式与有限自动机
一、预备概念
1. ∑:有穷字母表; 2. 字符(符号):有穷字母表∑中的元素。 3. 字(符号串):由∑中字符构成的有穷序列。 4. ε :空字,不含任何字符的字。 5. ∑*:表示∑上所有字的全体(含ε)。 6. φ:不含任何元素的空集。 7. ∑*的子集A和B的(连接)积定义为:
逐个字 符判断
常量规则
逐个字 符判断
§3.2 词法分析器的设计
五、利用状态转换图设计词法分析器
1、思路:词法规则→构造状态转换图→实现状态转换图 (程序段) →词法分析器
2、状态转换图的构造(有限有向图)
①结点:表示状态;
②一个初态,至少一个终态;
③弧:连接状态,表示转换方向;
④弧标记:表示在射出结点状态下出现的字符(集);
AB={αβ|α∈A & β∈B} 8. A自身的n次(连接)记为:An =AA … A 。 9. A的闭包A*定义为:A* =A0∪A1∪A2∪… 。
(A0={ε}) 10. A的正则闭包A+定义为:A+ =AA* .
§3.3 正规式与有限自动机
二、正规式与正规集
1、含义:正规式为正规集的符号表示并反映正规集中元素 的构成,正规集是为特定用途对Σ的子集加以严格规定;
③ 预处理的输出:预处理过的输入串被送入扫 描器指定的扫描缓冲区。
§3.2 词法分析器的设计
二、词法分析器的结构
预处理 子程序
源自文库输入
输入 缓冲区
列表
扫描缓冲区
扫描器 单词符号
§3.2 词法分析器的设计
三、直观的单词符号识别方法 1、单词易分辨 ①相邻单词以空格分隔开:直接按规则识 别,即先后查关键字表、界符表、算符 表或逐个字符判断 ②相邻单词的字符集不相交:同上。如 xyz+123-abc[2]
3、正规式中运算符:* 、·、|
§3.3 正规式与有限自动机
4、例:Σ= {a, b}
正规式
正规集
ε
{ε}
φ
φ
b
{b}
a*
{ε , a , aa , aaa , aaaa , …}
ba*
{b , ba , baa , baaa , baaaa , … }
a(a|b)*
由a打头的a、b构成的任何串
(a|b)*(aa|bb)(a|b)* 包含aa或bb的a、b构成的
4、状态转换图的实现:对每个结点构造一段程序,可得到
词法分析器。(P44的全局变量和函数)
i结对应的程序段
字母 j
GetChar( );
i 数字 k
if(IsLetter( )){…} else if(IsDigit( )){…}
/l
else if(ch=`/`){…} else {…错误处理…;}
二元式,形如(单词种别,单词属性值)
1、单词种别:整数编码,以区别单词符号种类。 种别分类为“一词一种”和“多词一种”。
2、 单词属性值:在多词一种情形下,为最终确 定单词,又给出有关单词符号的属性信息。
3、 约定:关键字、运算符、界符为一词一种, 无属性值; 所有标识符为一种,其每个单词 的属性值表示成存放它的有关信息的符号表 项的指针; 常数按类型分种,每类型一种。
If(5 . EQ.M)GoTo 10 If(5 )=55
超前搜索终点
for ( i = 1 ; i <= 10 ; i++ ) s += i ;
查表 关键字表
运算符表
分界符表
if …
++ …
while … 查表 * … 查表
,… ;…
break …
/…
(…
……
……
……
,_ 识别出
出错 标识符规则
2、正规式与正规集的定义(递规定义): ① ε和φ是Σ上正规式,对应正规集分别为{ε}和φ。 ② 任何a∈Σ,a是Σ上正规式,所表示的正规集为{a}。 ③ 若A和B都是Σ上正规式,所表示的正规集分别记为 L(A)和L(B),则(A|B)、(AB)和(A)*也是正规式,所 表示的正规集分别为:L(A)∪L(B)、L(A)L(B) 和 (L(A))*。 ④ 仅由有限次使用以上三步定义的表达式是Σ上正规式, 仅由这些正规式表示的字集是Σ上的正规集。
例: while (i>=j) i--; 识别为 符号表
while ,_ 种别
name
…
( ,_
id ,pi
pi
…
…
>= ,_ id ,pj
i
…
) ,_
pj
…
…
id ,pi -- ,_
属性值
j
…
,_
…
…
五、词法分析器的工作:通常设计成独立子程序,当语法分析器 需要一个单词符号时,就调用这个子程序。每次调用,词 法分析器从输入串中识别一单词符号交给语法分析器。
§3.1 对于词法分析器的要求
§3.2 词法分析器的设计
一、输入与预处理
1、输入:源程序文本输入至输入缓冲区。 2、预处理:对输入串简单整理,以方便随后的识
别工作。
① 预处理内容:剔除注释(解)和编辑字符; 区分标号区、连接续行、给定句末符;连接 空白符;
② 预处理的实现:构造一个预处理子程序,每 当扫描器调用,就处理出一串确定长度的输 入符。
第三章 词法分析
词法分析器的设计、超前搜索方法、 正规式、自动机
§3.1 对于词法分析器的要求
一、词法分析器:执行词法分析任务的程序模块,也称 扫描器。
二、功能:输入并扫描源程序,识别出单词并输出单词 序列。
三、单词符号的类别:关键字、标识符、常数、运算符、 界符;
§3.1 对于词法分析器的要求
四、输出形式:
3、作用:形式化的表示字符串的组成及其识别。
例(状态转换图):
字母或数字
数字
0 字母
1
其它
* 2
0 数字
1
其它
* 2
标识符
整数
§3.2 词法分析器的设计
E或D
数字
数字
数字
0 数字 1
.
2
E或D 3 +或- 4 数字 5
其它
* 7
.
数字
6
数字
FORTRAN实数的 状态转换图
其它
§3.2 词法分析器的设计
§3.2 词法分析器的设计
2、超前搜索 基本字、标识符、常量或界符之间无起间隔 作用的界符时,需向前多扫描若干字符,直 至能确定单词词性。
例: DO10I=1,10 与 DO10I=1.10 DO10I=1 , 10 DO10I=1 . 10
If(5.EQ.M)GoTo 10 与 超前搜索终点 If(5)=55