词法分析器功能

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

➢词法记号及属性
➢词法记号的描述与识别➢有限自动机
➢DFA构建
➢DFA化简
➢词法模式的识别过程➢子集构造法
词法分析器语法分析器
语义分析器
源程序
中间代码生成器代码优化器代码生成器出错管理器
符号表管理器
源代码
词法分析器
记号(token)流
词法分析器
语法分析器符号表
记号
取下一个记号
源程序本章内容➢词法分析器:把构成源程序的字符流翻译成记号流,还完成和用户接口的一些任务。

➢介绍正规式、状态转换图和有限自动机概念。

➢Lex 与词法分析器的自动生成。

词法记号
词法模式
词法单元
词法记号的属性词法错误
➢看一个中文的句子
你们是优秀的大工学子
代词动词形容词名词(短语)
通过分词操作,把句子以单词或者词组为单位进行划分,得到一个句型。

L1:x =
ID COLON ID ASSGN
y2+12;ID PLUS INT SEMI-COL 编译的词法分析做的工作类似于分词,
把原始的字符串流形式的程序文本转换为词法记号流的形式。

例子中哪些是词法单元?➢词法单元
又称单词,是编程语言中合法的字符串
➢词法记号
满足某种规则的词法单元,采用同一种记法。

➢满足一个给定规则的词法单元,被记为一个词法记号。

模式
词法单元词法记号
➢C语言的标识符
?
➢x2, 12, _12, _abc
哪些是合法的C标识符?
C语言标识符的规则(模式):
首字符必须是_或者字母,由_、字母或数字组成的字符串
词法记号词法单元例举模式的非形式描述STRUCT struct struct FOR for for RELOP <,<=,=,ID
sum,_12,_x NUM 3.1,10,2.8e12LITERAL “seg.error”
➢常见记号及模式的例子:简单的一对一模式相对复杂一点的模式引号“和”之间的任意字符串,但引号本身除外_或字母开头的由_、字母和数字组成的串<或<=或=或…任何数值常数
词法记号词法单元例举模式的非形式描述relation < , < = , = , …< 或<= 或= 或…id
sum, count, D5 由字母开头的字母数字串名词大连软件大黑山表示名称的词连词和与或和与或….词法记号词法单元例举模式的非形式化描述词法记号词法单元例举模式的非形式描述中国人胡锦涛毛泽东具有中国国籍的人美国人奥巴马克林顿具有美国国籍的人
存在的意义?词法分析器
语法分析器
符号表记号
取下一个记号
源程序
➢如果简单地把词法记号流传给语法分析器,会产生什么后果?
-语义被完全摒弃,只剩下一个语法结构。

翻译官
我是学生Pronoun Verb Noun
说了什么呀????
➢每个词法记号具有一定的含义(属性)
ID COLON ID ASSGN ID PLUS INT SEMI-COL 第一个ID,名称是L1, 表示的是标号(Label)
第二个ID,名称是x, 表示的是一个变量,类型是int
第三个ID,名称是y2, 表示的是一个变量,类型是int
position := initial + rate * 60的记号和属性值:〈id,指向符号表中position条目的指针〉
〈assign_op〉
〈id,指向符号表中initial条目的指针〉
〈add_op〉
〈id,指向符号表中rate条目的指针〉
〈mul_op〉
〈num,整数值60〉
➢词法分析器对源程序采取非常局部的观点,难以发现下面的错误:
fi (a == f (x) ) …
➢例外:如在实数是a.b格式下,可以发现下面的错误
123.
词法错误的处理方法
➢恢复策略
-“紧急方式”
-错误修补尝试
➢删除一个多余的字符
➢插入一个遗漏的字符
➢用一个正确的字符代替一个不正确的字符
➢交换两个相邻的字符
词法分析器记号(token )流
源代码➢词法分析器工作原理:
源程序字符流组合词法单元
词法记号模式非形式化描述形式化描述正规式字母组合串语言
集合集合
字母表名字
词法记号的描述与识别
串和语言
➢词法模式的表示方法,是词法记号描述的核心
➢下面是用于描述词法记号的模式语言。

词法单元记号
模式
集合字母表
长度为
0的空

➢字母表:符号的有限集合,例:∑= {0,1}
➢串:符号的有穷序列,例:0110, ε
➢语言:字母表上的一个串集
{ε,0,00,000,…}, {ε}, ∅
长度的
表示
|a|
字母组合
串语言
集合
➢串的运算
-连接xy sε= εs = s
-积(指数)s0为ε,s i为s i-1s(i>0)
➢语言的运算
-和:L∪M = {s | s∈L 或s ∈M}
-连接:LM = {st| s ∈L 且t ∈M}
-指数:L0是{ε},L i是L i -1L
-闭包:L*= L0 ∪ L1 ∪ L2 ∪…
L*=L0 ∪ L+ -正闭包:L+= L1 ∪ L2 ∪…
➢例2.2(p17)
-L: { A, B, …, Z, a, b, …, z }, D: { 0, 1, …, 9 }
-L∪D, LD, L6, L*, L(L∪D )*, D+
词法分析器记号(token )流
源代码➢词法分析器工作原理:源程序字符流顺序组合词法单元
词法记号模式非形式化描述形式化描述正规式字母组合串语言
集合集合
字母表名字
词法记号的描述与识别
正规式
正规定义
➢正规式:又称正则表达式,
➢Regular Expression ➢正规式:按照一组定义规则,由较简单的正规式构成的,每个正规式r 表示一个语言L(r)。

➢定义规则说明L(r) 是怎样以各种方式从r 的子正规式所表示的语言组合而成。

➢正规式用来表示简单的语言,叫做正规集。

正规式是用于说明词法单元
如何对应到词法记号的模式。

与非形式化的描述相比,正
规式更具形式化,更加精确。

➢正规式定义的语言备注
ε{ε}
a{a} a ∈∑
(r) | (s) L(r)∪L(s) r 和s是正规式(r)(s) L(r)L(s)r 和s是正规式(r)*(L(r))*r 是正规式(r)L(r) r 是正规式
➢运算符的优先级:
*> 连接运算> |
((a) (b)*)| (c)可以写成ab*| c 定义字母表∑上正规式的规则
➢正规式的例子∑= {a, b}
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) ) )*
句子:01001101000010000010111001
➢对正规式命名,使表示简洁。

-d 1→r 1
-d 2→r 2
-...
-d n →r n ➢各个d i 的名字都不同
➢每个r i 都是∑⋃{d 1,d 2,…,d i -1}上的正规式
保证:每个名字对应的正规式中使用的各种符号已经在前面定义了,从而可以避免递归定义的情况。

➢正规式表示
letter →A | B | … | Z | a | b | … | z
digit →0 | 1 | … | 9
id →letter(letter|digit)*
怎么用语言来描述Pascal的标识符模式?
➢Pascal标识符模式的自然语言描述:
-首字符必须是字母,由字母或数字组成的字符串。

模式的非形式描述
➢首字符必须是_或者字母,由_、字母或数字组成
的字符串。

➢请仿照Pascal标识符的例子,写出C语言的标识符的正规式表示
➢正规定义的例子
-C语言的标识符是字母、数字和下划线组成的串。

letter_→A|B|…|Z|a|b|…|z|_
digit→0|1|…|9
id →letter_(letter_|digit)*
Pascal 无符号数集合,例1946,11.28,63.6E8,1.99E -6 digit →0|1|…|9digits →digit digit *optional_fraction →.digits|εoptional_exponent →(E (+|-|ε)digits )|εnum →digits optional_fraction optional_exponent 简化表示num →digit +(.digit +)?(E(+|-)?digit +)?
简化规则:(1)r +=rr*(2)r?=r| ε(3)[a-z]=a|b|c |…|z
while →while
do →do
relop →< | < = | = | < > | > | > =
id →letter (letter |digit )*
num →digit +(.digit +)?(E (+|-)?digit +)?delim →blank |tab |newline
ws →delim +
前面所提到的词法记号,实际上就是
正规式的
名字!
词法记号的描述与识别
状态转换图
➢词法记号的识别
-等同于对字符串的匹配过程
➢这个匹配过程可以基于状态转换图来完成➢状态转换图==有限状态机
➢简单的正规式d->a
➢正规式d->ab
➢正规式d->a|b 01
a 02a 1
b 0
1
a
b
➢正规式d->a*
➢正规式d->a?
字符a 出现一次或者0次
➢正规式d->a(a|b)*0a
01
a 01a a
b
05
1
6
2
4
8
3
7
return(relop,LE)
return(relop,NE)
return(relop,LT)
return(relop,GE)
return(relop,GT) return(relop,EQ)
开始
<
=
>
=
>
=
*
*
other
other
relop < |< = |= |< > |> |> =
➢关系算符的转换图
➢标识符和关键字的转换图91011开始letter other *letter 或digit
return(install _id ())
id letter (letter | digit )*
1、检查关键字表,如果在表中发现该词法单元则返回相应的记号并退出,否则转向2
2、该词法单元是标识符,在符号表中查找,若找到该词法单元则返回该条目的指针并退出,否则执行3
3、在符号表中建立一个新的条目,把该词法单元填入,并返回此新条目的指针
➢无符号数的转换图开始1912131415161718digit digit digit digit digit
digit other
.E +/-digit
other other return(install _num ())
*
num →digit + (.digit +)? (E (+ | -)? digit +)?
2122开始delim other *
delim
20空白的转换图
delim →blank | tab | newline
ws →delim +
正规式计算机实现
状态转换图

有限自动机
不确定有限自动机确定有限自动机
等价
练习题:要求使用伪代码给出算法
编写一个程序,用于统计文件中单词的总数,不同单词的数目。

(假设输入文件中只包含字母和空格)
如: I love Dalian and I love DLUT Word number :7Distinct word number :5
2021/7/10叙述正规式描述的语言(2.3题)
每周3交作业
有限自动机定义DFA
NFA
DFA与NFA的区别状态转移表
➢识别器:是一个程序,取串x作为输入,当x是语言的句子时,它回答“是”,否则回答“不是”。

➢状态转换图(有限自动机)→识别器
➢确定/不确定有限自动机——时空权衡问题-确定有限自动机:快,空间大
➢确定的有限自动机(简称DFA)
➢数学形式定义
-DFA是这样一个数学模型,包括-状态集合S
-输入字母表∑
-转换函数move: S ⨯∑→S -唯一的初态s∈S
-终态集合F ⊆S 01
a
➢请构造(a|b)*ab 的DFA
-?
这个,基本上很难!
怎么办?
下面,先引入一个新概念…
➢不确定的有限自动机(简称NFA)➢数学形式定义
-NFA
-状态集合S
-输入字母表∑
-转换函数
-唯一的初态s∈S -终态集合F ⊆S 缺点:1、输入字符包
括ε
2、一个状态对于某个字符,可能有多条输
出边
12开始a 0a
b b 34ε
ε
➢例识别aa*|bb*的NFA。

相关文档
最新文档