第三章词法分析
词法分析及词法分析程序
– 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)).
(3)若当前状态已无后继状态,并且此前经历过终态, 则执行曾经历的最近的终态所对应的语义动作;
(4)若当前状态已无后继状态,并且此前没有经历过终 态,则表明输入字符串有词法错误,报错,并略过余 下的部分词文,从状态0开始继续下一单词的识别。
状态矩阵是稀疏的,应该采用紧凑的数据结构
41
识别无符号数的语义操作
if(Stat=TransMat[CurStat][CurChar]!=NULL) { /*能进行状态转换*/
CurStat=Stat; advance( ); if( CurStat 是终态){
FlagOfFS=HasSeen; /*标记经历过的终态*/ 记下输入串中当前位置及该状态相关联的动作; }/*end if CurStat 是终态*/ }
若Bij为“出错”,则说明输入符号串有误,拒绝接受.扫描
器将调用出错处理程序进行处理
38
程序3-2 状态矩阵驱动程序
第三章 词法分析和有穷自动机
3.3 单词的两种定义方式
描述机制
• 正规文法(右线性文法和左线性文法) 机器易于识别 • 正规式 简洁清晰
• 例 描述标识符的正规文法 左线性文法 <标识符> → l|<标识符>l|<标识符>d 右线性文法 <标识符> → l|l<字母数字> <字母数字> → l|d|l<字母数字>|d<字母数字> 描述标识符的正规式: l(l|d)*
例 3.6 设有正规文法G[Z]: Z→ U0|V1 U→ Z1|1 V → Z0|0 求该文法对应的正规式。 解得 G[Z]所生成语言的正规式是: (10|01)(10|01)*
2 正规式转换到正规文法
Σ 上的正规式r转换到正规文法G=(VN,VT,P,S) (1)令VT= Σ
(2)S→r (3)A→ab,可化为A→ aB,B →b (4)A→a*b,可化为A→ aA|b 不断应用(3),(4),直到每个产生式右部都只含有一个终结 符或 ε 为止。
例 NFA M=({S,P,F},{0,1}, f ,{S,P},{F}) 其中 f 为: f (S,0)={P} f (S,1)={S,F} f (P,1)={F} f (F,1)={P} f (F,0)={P}
1 1
0
F
1
{S,F} 1 {F} {P}
第三章词法分析
第三章 词法分析
常常把词法分析程序作为独立的一遍或作 为被语法分析程序所调用的子程序。
1、作为独立的一遍:
语法分析前进行词法分析,把单词符号 串形成中间文件存贮。
2019/10/14
中南大学软件学院 陈志刚
6
3.1 词法分析概述
第三章 词法分析
三、词法分析程序的安排
二、词法分析程序的功能
词法分析程序主要执行以下功能: 读入源程序字符串,识别开具有独立含义的最 小语法单位——单词(符号); 把单词变换成长度统一的且为定长的属性字;
其他功能: 滤掉空格,跳过注释、换行符 某些预加工处理
2019/10/14
中南大学软件学院 陈志刚
5
3.1 词法分析概述
2019/10/14
中南大学软件学院 陈志刚
27
六、转换系统
第三章 词法分析
定义:转换系统是具有下列三个特征的状态转换 图,即 1) 开始状态S和终止状态Z 唯一; 2) 无弧进入S,也无弧自Z射出;
3)可能存在标记为空串(ε)的弧。
转换系统与状态转换图的区别: ε弧
ε S1
Z1 ε
S
A
Z
步骤2存在的两种可能:可能找不到一条弧的标记与 当前字符相同;总能找到一个弧,其标记与当前字 符相同。
2019/10/14
编译原理词法分析
编译原理
正规式的等价
❖ 若两个正规式e1和e2所表示的正规集相同,则说e1和 e2等价,写作e1=e2。
❖ 设r,s,t为正规式,正规式服从的代数规律有:
编译原理 在 入 准初带备整•••始的读输读有个时开入始入头穷模,始,状带:控型读位状态:可制由头置态存以器如状的所三处,处放在:果态符识部于表于输输控读正号别分输示初入入制头好组组符带状移是成成号上态动终的:向发到结字后生最状能移变后态被头每有动化一,该转向读穷个则有移后入控符输限到移一 制号入自下动个器后带动一一符控面上机个个号制,状位,状态置读态,
❖ 设计和实现词法分析程序 首先需要描述和刻画程序设计语言中的原子单 位——单词,其次需要识别单词和执行某些相关 的动作。 描述程序设计语言的词法的机制是正规表达式, 识别机制是有穷自动机。
编译原理
词法分析程序
所处的位置:
源程序
词法分析程序
Token 语法分析程序
❖ 功能:
逐个读入源程序字符并按照构词规则切分成一系列单词
为L(e1)和L(e2),那么,(e1), e1 e2, e1•e2, e1也都是正规 式,它们所表示的正规集分别为L(e1), L(e1)L(e2), L(e1)L(e2)和(L(e1))。 4、仅由有限次使用上述三步骤而定义的表达式才是上的正 规式,仅由这些正规式所表示的集合才是上的正规集。 ——或;•——连接;——闭包 规定优先顺序为“”、“• ”、“” , 左结合
ch3 词法分析
15
由正规文法构造状态图
1.对于右线性文法,状态图的构造步骤如下:
步骤1:增加节点Z为终态(假定文法的字母表中 不包括符号Z); 步骤2:将每一个非终结符号设置为一个对应的状 态; 步骤3:对于形如A→a的每一个规则,引一条从状 态A到Z的弧,弧上标记为a;而对于形如A→aB的 每个规则,引一条从状态A到B的弧,标记为a(其 中B∈VN ,a∈VT )。
22
空白 0 字母
字母或数字
非字母与数字
1 数字 非数字 2
*
数字 3
4
*
=
5
+
6 非* 7 * *
*
8
,
9 10
(
11
) 其它
来自百度文库
12
23
13
几点重要限制——不必使用超前搜索
所有基本字都是保留字;用户不能用它们作自己 的标识符 基本字作为特殊的标识符来处理;不用特殊的状 态图来识别,只要查保留字表。
28
6)IsLetter和 IsDisgital 布尔函数,判断ch中字符是 否为字母和数字 7)Reserve 整型函数,对于 strToken 中的字符串查 找保留字表,若它是保留字则给出它的编码,否 则回送0 8)Retract 子程序,把搜索指针回调一个字符位置 9)InsertId 整型函数,将strToken中的标识符插入符 号表,返回符号表指针 10)InsertConst 整型函数过程,将strToken中的常数 插入常数表,返回常数表指针。
my第03章-词法分析
第三章 词法分析
例题:求证b(ab) *=(ba)*b
证明: ∵L(b(ab) *) ={b,bab,babab,…} ,L(((ba) *b)={b,bab,babab,…} 又∵正规集的前n项相同 ∴可知它们的正规集是相同的 故:正规式b(ab) *=(ba) *b
第三章 词法分析
分析器对扫描缓冲区进行扫描时一般 使用两个指示器,一个指向当前正在识 别单词的开始位置。(指向新单词的首 字符),另一个用于向前搜索以寻找单 词的终点。 不论扫描缓冲区设得多大都不能保证 单词符号不会被缓冲区的边界所打断。 因此,扫描缓冲区最好使用如下一分为 二的区域:
第三章 词法分析
第三章 词法分析
第三章
词法分析
编译程序首先是在单词级别上来分析和翻译 源程序的。词法分析的任务是:从左至右逐个字 符地对源程序进行扫描,产生一个个单词符号, 把作为字符串的源程序改造成为单词符号串的中 间程序。因此,词法分析是编译的基础。执行词 法分析的程序称为词法分析器。 3.1 对词法分析器的要求
图3.2状态转换图
第三章 词法分析
一个状态转换图可用于识别一定的字符串。例如,识 别标识符的转换图如图3.2(b)所示。其中0为初态,2为终 态。这个转换图识别标识符的过程是:从初态0开始,若在 状态0下输入字符是字母,则读进它,并转入状态1。在状态 1之下,若输入字符为字母或数字,则读进它,并重新进入 状态1。一直重复这个过程直到发现输入字符不再是字母或 数字时(这个字符已经被读进)就近入状态2。状态2是终态, 它意味着到此已经识别出一个标识符。终态上打个*号,表 示多读进了一个不属于标识符部分的字符,应把它退还给输 入串,如果在状态0时输入字符不为“字母”,则意味着这 个转换图不工作。
第3章 词法分析(3)
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页
3.5 正规文法与有穷自动机的等价性
1. NFA正规文法 A t B
(1)NFA的字母表为文法的终结符号集; (2)NFA的状态集为文法的非终结符号集; (3)NFA的初态对应于文法的开始符号;
(4)NFA的转换函数f(A,t)=B,写成一个产生式A→tB;
(5)对NFA的终态Z,增加一个产生式Z→。
C
b
3.5 正规文法与有穷自动机的等价性
课堂练习 a A B b b D b
给出如图NFA等价的正规文法G a
C a E a F b
G=({A,B,C,D,E,F},{a,b},P,A) P:A→aA, A→bA, A→B, B→aC, B→bD, C→aE, D→bE, E→F, F→aF, F→bF, F→ε
第三章 词法分析精选版演示课件.ppt
gjgj
15
正则表达式的例子
• Σ={a,b} • L(a|b) = {a,b} • L((a|b)(a|b)) = {aa,ab,ba,bb} • L(a*) = {ε,a,aa,aaa,aaaa,……} • L((a|b)*) = {ε,a,b,aa,ab,ba,bb, aaa,aab,……} • L(a|a*b) = {a,b,ab,aab,aaab,…}
gjgj
11
串和语言(3)
• 串的运算
– 连接(concatenation):x和y的连接时把y附加到x 的后面形成的串,记作xy。
• x=dog,y=house,xy=doghouse
– 指数运算(幂运算):s0=ε,s1=s,si=si-1s;
• x=dog,x0=ε,x1=dog,x3=dogdogdog
• 字母表上的串(string)是该字母表中符号的 有穷序列。
– 串s的长度,即|s|,是指s中符号出现的次数; – 空串:长度为0的串,ε
• 语言(language)是某个给定字母表上的串的 可数集合。
gjgj
10
串和语言(2)
• 和串有关的术语(bannana)
– 前缀:从串的尾部删除0个或多个符号后得到的串。 (ban、banana、 ε)
词法分析
15
s的真前缀(真后 缀、真子串) s的子序列
《编译原理》
编译原理——第三章
语言是给定字母表上的任意一个字符串的集合, 这个定义是广义的,像“空集”和仅包含空符号串 的集合{}这样的抽象语言也符合此定义。 如果x和y是符号串,那么x和y的连接(记做xy) 是把y连接到x的后面形成的新符号串。对于连接运 算而言,空符号串是一个单元位,也就是说,s = s = s。 如果把两个符号串的连接看成是这两个串的 “乘积”,可以定义符号串的“指数”如下:定义 s0为,对于i>0,si为si-1s,因为s就是s本身,所 以s1=s,s2=ss,依此类推。
14
《编译原理》
编译原理——第三章
术语 s的前缀 s的后缀
定义 去掉串s尾部的0个或多个符号后得到的字符串。 例如,ban是banana的前缀 去掉s头部的0个或多个符号后得到的字符串。例 如,nana是banana的后缀
s的子字符串
去掉s的一个前缀和一个后缀的字符串。例如, nan是banana的一个子串。s的每个前缀和后缀 都是s的一个子串,但子串并不是总是s的前缀或 后缀。对于每个字符串s,s和是s的前缀、后缀 和子串
编译原理作业集-第三章-修订版
编译原理作业集-第三章-修订版
第三章词法分析
本章要点
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}
ch3 词法分析
21
例子:状态转换图的实现
构造一个识别某种简单语言所有单词符号的转换图,下表列 出了这个语言的所有单词符号。
单词符号 DIM IF DO STOP END 标识符 常数(数) = + _ * ** , ( ) 种别编码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 助忆符 $DIM $IF $DO $STOP $END $ID $INT $ASSIGN $PLUS $MINUS $STAR $POWER $COMMA $LPAR $RPAR 内码值 内部字符串 标准二进制形式 -
正规文法又成为右线性文法。 左线性文法:产生式为 A→Ba或 A→a
15
由正规文法构造状态图
1.对于右线性文法,状态图的构造步骤如下:
步骤1:增加节点Z为终态(假定文法的字母表中 不包括符号Z); 步骤2:将每一个非终结符号设置为一个对应的状 态; 步骤3:对于形如A→a的每一个规则,引一条从状 态A到Z的弧,弧上标记为a;而对于形如A→aB的 每个规则,引一条从状态A到B的弧,标记为a(其 中B∈VN ,a∈VT )。
j
k
i
数字 /
l
GetChar( ); if (IsLetter( )) {…状态j的对应程 序段…;} else if (IsDigit( )) {…状态k的 对应程序段…;} else if (ch=„/‟) {…状态l的对应程 序段…;} else {…错误处理…;}
编译原理-第三章词法分析-3.4词法单元的识别
编译原理-第三章词法分析-3.4词法单元的识别词法单元的识别
词法单元的识别
⼀、状态转换图
定义
状态转换图描绘词法分析器被语法分析器调⽤时,词法分析器为返回下⼀个记号所做的动作
表⽰
圆圈:表⽰状态,开始状态由⼀条没有出发节点、标号为“开始”的边指明
双层圆圈:表⽰接受状态,表⽰已识别⼀个记号;若返回,则返回⼀个词法单元和其相关属性
有向边:表⽰从⼀个状态到另⼀状态
每条边的标号包含⼀个或多个符号,若离开状态s的某边上标号为other,则它表⽰离开s的其他边所指⽰的字符以外的任意字符*:表⽰输⼊指针必须回退的转态
⽰例
1.关系符转换图
2.标识符和保留字的转换图
3.空⽩符的状态转换图
4.⽆符号数的状态转换图
⼆、基于状态转换图的词法分析器的体系结构
上述实例的合并转换图
参考——慕课-苏州⼤学
第三章 词法分析
武汉理工大学计算机科学系陈天煌 武汉理工大学计算机科学系陈天煌
设U,V,W为正规式,正规式服从的代数规律有: 1. UV=VU “或”服从交换律
武汉理工大学计算机科学系陈天煌 武汉理工大学计算机科学系陈天煌
正规式 正规式也称正则表达式。 正规表达式(regular expression)是说明单词的 模式(pattern)的一种重要的表示法(记号),是定义 正规集的数学工具。我们用以描述单词符号。下面 是正规式和它所表示的正规集的递归定义。
武汉理工大学计算机科学系陈天煌 武汉理工大学计算机科学系陈天煌
图3.2(c)识别整数的转换图
图3.2(d)识别FORTRAN实型常数的转换图
武汉理工大学计算机科学系陈天煌 武汉理工大学计算机科学系陈天煌
§3.2 正规表达式与正规集(正规语言)
程序设计语言中的单词是基本语法 成分。单词符号的语法可以用有效的工 具加以描述,并且基于这类描述工具, 实现词法分析程序的自动构造。 正规表达式是典型的词法规则描述 工具。
结论:程序设计语言的单词都能用正规式来定义。
武汉理工大学计算机科学系陈天煌 武汉理工大学计算机科学系陈天煌
正规式的等价性
• 若两个正规式e1和e2所表示的正规集相同, 则说e1和e2等价,写作e1=e2。
例如: e1= (ab), e2 = ba, e1= e2
第三章词法分析
• 两种自动机都识别正则语言,即对于每个可以用 正则表达式描述的语言,就可以用某个NFA或者 DFA来识别;反之亦然
不确定的有穷自动机
• NFA的定义
– 一个有穷的状态集合S – 一个输入符号集合Σ(input alphabet) – 转换函数(transition function)对于每个状态和 Σ U{ε}中的符号,给出相应的后继状态集合 – S中的某个状态s0被指定为开始状态/初始状态 (有些定义中可以有多个开始状态) – S的一个子集被指定为接受状态
正则集合、等价
• 如果L(r)=L(s),正则表达式r和s等价。
正则定义(1)
• 为了书写方便,可以给正则表达式命名,且可 以通过名字使用正则表达式 • 正则定义是如下形式的定义序列 d1 r1 d2 r2 …… dnrn • 其中:
– di不在Σ中,且各不相同 – 每个ri是字母表Σ U {d1,d2,…,di-1}上的正则表达式。 这保证了不会出现递归定义。
• 声明部分包含:
– 明示常量:表示常数的标识符 – 正则定义
• 转换规则
– 模式 {动作}
• 模式是正则表达式 • 动作表示识别到相应模式时采取 的处理方式。
声明部分 %% 转换规则 %% 辅助函数 Lex程序的形式
• 辅助函数
– 各个动作中使用的函数
词法分析器的工作方式
第三章 词法分析(1)
字符串表示 的源程序
词法分析程序
符号串表示 的源程序
22
第三章 词 法 分 析
§3.1
引言
一、词法分析基本思想 二、词法分析任务
1. 识别单词 2. 消除无用字符 3. 变成内部编码 4. 建立各种表格 分配存贮单元(静态变量) 5. 分配存贮单元(静态变量) 6. 进行词法检查
三、词法分析方式
1. 直接分析方法 2. 状态矩阵法
20
第三章 词 法 分 析
§3.1
引言
一、词法分析基本思想 二、词法分析任务
1. 识别单词 2. 消除无用字符 3. 变成内部编码 4. 建立各种表格 分配存贮单元(静态变量) 5. 分配存贮单元(静态变量) 6. 进行词法检查
三、词法分析方式
1. 将词法分析和语法分析程序分开 2. 将词法分析程序编写成一个独立子程序
四、词法分析方法
1. 直接分析方法 2. 状态矩阵法
16
§3.1 引 言
二、词法分析任务
5. 分配存贮单元(静态变量) 分配存贮单元(静态变量)
对简单变量、常量及数组进行静态存贮分配 对简单变量、 静态存贮分配:在编译时就可以决定应分配内存的大小。 • 静态存贮分配:在编译时就可以决定应分配内存的大小。 • 动态存贮分配:到运行时才进行的存贮分配。 动态存贮分配:到运行时才进行的存贮分配。 变界数组、动态变量。 如:变界数组、动态变量。 静态存贮分配可以在词法分析阶段进行, 静态存贮分配可以在词法分析阶段进行,也可以在语法分析 阶段进行,随具体编译系统而定。 阶段进行,随具体编译系统而定。
编译原理课件chap03(陈火旺)
分析器对扫描缓冲区进行扫描时一般 使用两个指示器,一个指向当前正在识 别单词的开始位置。(指向新单词的首 字符),另一个用于向前搜索以寻找单 词的终点。 不论扫描缓冲区设得多大都不能保证 单词符号不会被缓冲区的边界所打断。 因此,扫描缓冲区最好使用如下一分为 二的区域:
第三章 词法分析
第三章 词法分析
3。2。4状态转换图的实现 转换图容易用程序实现。最简单的办 法是让每个状态结点对应一小段程序。 在编制程序的过程中课本引进了一组 全局变量和过程。将它们作为实现转换 图的基本成分。希望同学能记住它们。
第三章 词法分析
3.3 正规表达式与有限自动机 为了更好地使用状态转换图构造词法 分析器,为了讨论词法分析器的自动生 成,还需要将转换图的概念形式化。为 此我们引入:正规式,正规集,自动机 等概念。 3.3.1 正规式与正规集
对于字母表Σ,我们感兴趣的是它的 一些特殊的字集,即所谓正规集。我们使用 正规式这个概念来表示正规集。
第三章 词法分析
下面是正规式和正规集的定义: (1)ε和都是 Σ上的正规式,他们所表示的正规集分 别为{ε} 和; (2)任何a Σ, a是Σ上的一个正规式,它所表示的正 规集为{a}; (3)假定U和V都是Σ上的正规式,他们所表示的正规 集分别记为L(U)和L(V),并且,(U|V), (UV)和(U)*也都 是正规式,它们所表示的正规集分别为L(U)L(V), L(U)L(V)(连接积)和(L(U))*(闭包) 仅由有限次使用上述三步骤而得到的表达式才是Σ上 的正规式。仅由这些正规式所表示的字集才是Σ上的正 规集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 . 2 词法分析器的手工构造: 用DFA 能识别
3 . 3词法分析程序自动构造工具LEX简介
第三章词法分析
3
L i n e = 8 0 ; 输入
字母
字字母母
0
1
2
数
字
数字
3数 4
字
=
5
输出
id(25) , ‘Line’ =( 36), num(27), ‘80’ ;(45),
;
第三章 词法分析
第三章词法分析
编译器的各个阶段:
编译器是分
符
阶段执行的。 号
管
每个阶段将
理
源程序从一
表
种表示转换
成另一种表
示
编译的各
个阶段
源程序
词法分析器
语法分析器
错 误
处
语义分析器
理
器
中间代码生成器
代码优化器
代码生成器
第三章词法分析
2
3. 1 词法分析程序的设计:
词法分析器的功能,输出,把它组 织成单独程序
E
12e-4
d
d
-
d
0d 1.
2
d3
E
4
+
5
d
6
7
d
1000
3.1Байду номын сангаас15
第三章词法分析
0.1e+1
4
20
二、 编写词法分析程序
根据画出的状态转换图(识别单词的)构 造词法分析程序,每个状态对应一段程序, 完成到达此状态的工作;词法分析程序的控 制程序模拟状态转换图的状态转换。
在识别标识符的过程中,要拼写出来,并和 保留字区别开来;识别出的标识符要填入符 号表中
无符号实数(用d表示数字):
(a) dd.d dE(+- ) dd 0.1e+14
(b)ddE(+- ) dd
12e-4
(c) dd.d d
3.141592
(d) dd…dd
1000
第三章词法分析
18
标识符:字母开始的字母数字串。
例:C语言的标识符
a
a,d
I
B
TT
其它
-
第三章词法分析
19
例:C语言实常数的文法描述
8
表3.1 单词词类编码
第三章词法分析
9
对于关键字、界符、运算符来说,它们 的词类编码就可以表示其完整的信息, 故对于这类单词,其单词自身的属性值 通常为空
而对于标识符,词类编码所反映的信息 不够充分,标识符的具体特性还要通过 单词自身的属性进行互相区分。标识符 的单词自身的属性常用其在符号表中的 入口指针来表示
扫描器主控
else RDLINE;
until CH=EOF;
把符号表,字符串表做成文件;
close源文件,TOKEN文件;
call OUTPUTR;
第三章词法分析
22
单词分类模块(SORT)输入:
CH内含单词首符;
procedure SORT(CH);
{ case CH of ‘字母’:
第三章词法分析
10
对于常数, 其单词自身的属性常用其在 常数表中的入口指针来表示
第三章词法分析
11
以a 语= 句b 子+ ac=*b+d c*d 为例,假设按表 3.1为单词编码,词法分析后的结果为:
Token字
符号表
<25,
>
<36, -------- >
a 25 B 25
<25,
>
C 25
<32, -------- >
第三章词法分析
7
词法分析器的输出:
(词类编码,单词自身的属性值)
词类编码原则: 界符和运算符: 一字一码。
关键字可分成一类,也可以一个关键字分 成一类。 一字一码。
常数可统归一类,也可按类型(整型、实 型、布尔型等),每个类型的常数划分成 一类。 一类型一码。
所有的标识符分为一类。 一类一码。
第三章词法分析
为了构造词法分析器,要研究构词法, 每种词类的结构模式以及识别它的数 学模型——有穷自动机。它的模拟程 序可以作为词法分析器的控制程序。
32 1确定的有限自动机(DFA) 32 2构造识别单词的DFA 32 3 编写词法分析程序
第三章词法分析
16
分析程序的设计框图
SCANNER
OUTPUT
有穷控制器
单词的词类和属性 6 (词类符号,
第三章词法分析
单词的属性) 4
3.1 词法分析程序的设计
一、词法分析程序的功能
源程序 词法分析器 单词序列
二、 扫描器的任务
1、组织源程序的输入
2、转换成机内表示形式
3、删除注释行、空格及无用符号
4、查填符号表
5、检查词法错误
第三章词法分析
5
if i>j then i:=0 else j:=1
D 25
<25,
>
<31, -------- >
<25,
>
第三章词法分析
12
四、 词法分析的设计形式
(1)设计成一个独立程序,完成词 法分析的任务,结果以文件的形式组织, 做为语法分析的输入
源程序
词法 分析
第三章词法分析
符号表 TOKEN字 错误信息
13
(2)作为语法分析和语义分析的子程序
错误的诊查处理
if <12 ,
>
I
<25 , 符号表入口 >
> <39 ,
>
J
<25 ,符号表入口 >
Then <20 ,
>
词I 法=
<25 ,符号表入口 >
<36 ,
>
分0
<26 ,常数表入口 >
析 else <8 ,
>
j <25 ,符号表入口 >
= <36 ,
>
1
<26 ,常数表入口 >
第三章词法分析
6
三、词类和属性 程序语言单词的分类: 1.关键字(保留字或基本字):begin,end 2.标识符:用来表示各种名字 3.字面常数:256,3 .14,true,‘abc’ 4. 运算符:如,+、-、*、/ 等等 5.分界符:如逗号,分号,冒号等
语法分析
源 程 序
词法 分析
语义分析和 中间代码生成
中 间 代 码
符号表管理
第三章词法分析
14
五、词法分析程序的设计框图
SCANNER
OUTPUT
sort
字母 数字 / 界符
’
RECOGID RECOGDIG HANDLCOM RECOGDEC RECOGSTR
LOOKUP
第三章词法分析
15
32 词法分析器的手工构造
sort
字母 数字 / 界符
’
RECOGID RECOGDIG HANDLCOM RECOGDEC RECOGSTR
LOOKUP
第三章词法分析
17
一、 手工构造识别单词的DFA m
根椐DFA识别单词的定义,在研究给定程 序语言单词结构的基础上,能直接构造出识 别它的DFA m。例如:对于C语言
整数:非空数字串。
在识别常数的过程中,要把它转换成机器表
示以作为属性值,记录到常数表中。
第三章词法分析
21
program SCANNER;
Begin initiate符号表,字符串表,行,列计数器;
Open 源文件,TOKEN文件,打印机文件;
Repeat FIRSTCH(CH);
模块0:
if CH!=EOL then call SORT(CH)