第三章 有限自动机与词法分析器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10/42
九、词法分析的结束 以文件的结束符Eof作为词法分析的
结束符。
11/42
§3.2 正则表达式
一、基本概念 1.符号/字母 例:a,b,c,+,-
2.字母表:符号的有限集合(非空,有穷) 例:{a,b,c,+,-}
3.符号串:字母表中符号的有穷序列
例:a, aa, abc, cabb…… ε /λ 空串
7.符号串集的方幂
A0={λ }
A1={A} , A2=AA,AK=AA…A(k个)
8.符号串集的正闭包
A+=A1∪A2∪A3∪……
9.符号串集的星闭包 若A={λ ,……},则A+=A*
A*= A0∪A1∪……
13/42
二、正则表达式
R∑—字母表∑上正则表达式的集合 L(R∑) —R∑所表示的语言,即符号串的集合 (1) 是 正则表达式,即R 。其中L()={ }。 (2) 是 正则表达式,即 R 。其中L()={ }。 (3) c 是 正则表达式,即c R 。其中L(c)={ c }。 设A和B是 正则表达式,即A R,B R ,则有
3.Micro语言单词内部表示的类型说明 Token.Lex(Token.LH) Token.Sem(Token.RH)
三、保留字 如何识别保留字?——保留字表
5/42
四、空格符、制表符和换行符 标志位 StringFlag(true/false)
五、括号类配对预检
例:()(), (()), (()()), {()} (())), )()(, { ( } )
REi
16/42
例3.2.3.1
[1] 数字集D = { 0,1, ......, 9 } 和字母集L = ( A | ...... | Z )可表示为:
D→ 0|1| ......| 9
L → A | B | ..... | Z
[2] 整常数的集合IntC可表示为:
IntC → D+ 或
4.符号串长度:符号串中符号的个数
例:|abca|=4 |ε |=0
5.符号串连接:αβ
例: =aa和=bb,则有=aabb
1ห้องสมุดไป่ตู้/42
空串是恒等元素 λ S=Sλ =S
6.符号串集乘积:AB={αβ|α ∈A, β ∈B }
例:A={a,bc},B={+-,d}, AB={a+-,bc+-,ad,bcd} ф A=Aф =A {λ }A=A{λ }=A
RealC = D+.D+ 。 约定:优先级 ⑴ * ⑵ . ⑶ |
例:(a)|((b)*(c)) a|b*c
例:∑={a,b}
a|ba|b {a,ba,b}
⑴ a|b {a,b}
aa|ab|ba|bb
⑵ (a|b)(a|b) { aa,ab,ba,bb}
⑶ a* { λ ,a,aa,……}
⑷ (a|b)* 或(a*b*)* 由a和b构成的所有符号串
第三章 有限自动机与词法分析器
教学目的:介绍正则表达式、有限自动 机及词法分析器的构造。
教学重点:正则表达式与NFA、DFA 之间的相互转换。
教学难点: 词法分析器的实现 。
1/42
第三章 有限自动机与词法分析器
3.1 词法分析 3.2 正则表达式 3.3 有限自动机 3.4 词法分析器的构造
9/42
词法错误校正可能产生语法错误,例如, “beg#in”将被校正为“beg in”,它很可能产 生语法错误,这是不可避免的。因此在发现词 法错误时,返回一个特殊的带警告的TOKEN。 被警告TOKEN的语义值是一个字符串,它是 重新开始扫描时被删除的部分。语法分析器遇 到被警告的TOKEN,意味着警告下一TOKEN 是不可靠的,需要错误校正。
( A ) R,L( (A) )= L(A) A | B R,L( A | B )= L(A)L(B) A B R,L( A B )= L(A ) L(B) A* R,L( A*)= L(A)*
14/42
例3.2.2.1 假设有D = { 0,1, ......, 9 },则 实常数 的集合RealC可用 正则表达式定义为如下:
(1)计数器方法 (2)栈方法 六、向前看多个字符的处理
1.例:Pascal语言中10..100 标识符“maint” ,符号“<=”
6/42
2.词法分析器的倒退工作——valid前缀
Buffered Token 1 12 12. 12.3 12.3e 12.3e+
Token Flag Integer Constant Integer Constant Invalid Real Constant Invalid Invalid
例:Pascal中 12.3e+q
7/42
七、字符串空间 对于字符串常量,如何节省空间和提高字符
串的访问速度? 用字符数组(字符串空间)存储字符串。 index(下标),length(长度)
index
length
ma r t ma s k w o r d
mart: 1 4 mask: 5 4 word: 9 4
15/42
(5) a(a|b)*
Σ上所有以a为首的符号串
(6) a|a*b
表示a或零个或多个a后随一个b的所有符 号串
如果两个正则表达式r和s表示同样的语言, 则r和s等价,写作r=s。
例:(a|b)=(b|a)
A*=(A| λ )*
A+=AA*| A*A
A*=A+| λ
二、正则定义:Ei =REi 表示成 Ei
8/42
单层字符串空间
八、词法错误校正 1.词法错误:语言所不允许的错误符号。 2.词法错误校正——当发现一个词法错误 时,采取一定的补救措施使词法分析过程继 续进行下去,并且尽可能使得源程序中的单 词在补救后仍成为同样的单词。 (1)删除已被读过的字符,并重新开始 扫描未被读过的字符。
(2)删除已被读过的第一个字符,并重 新开始扫描它的后继部分的字符。
2/42
§3.1 词法分析
一、词法分析器的功能
3/42
二、单词的内部表示
1.单词的分类:标识符、整常数、实常数
保留字、符号词、控制词 2.单词的内部表示(Token)
(词法信息,语义信息)或(词法信息)
例:x1,z12
$id
$id x1 $id z12
$id
标识符名表
…x 1…z 1 2…
4/42
九、词法分析的结束 以文件的结束符Eof作为词法分析的
结束符。
11/42
§3.2 正则表达式
一、基本概念 1.符号/字母 例:a,b,c,+,-
2.字母表:符号的有限集合(非空,有穷) 例:{a,b,c,+,-}
3.符号串:字母表中符号的有穷序列
例:a, aa, abc, cabb…… ε /λ 空串
7.符号串集的方幂
A0={λ }
A1={A} , A2=AA,AK=AA…A(k个)
8.符号串集的正闭包
A+=A1∪A2∪A3∪……
9.符号串集的星闭包 若A={λ ,……},则A+=A*
A*= A0∪A1∪……
13/42
二、正则表达式
R∑—字母表∑上正则表达式的集合 L(R∑) —R∑所表示的语言,即符号串的集合 (1) 是 正则表达式,即R 。其中L()={ }。 (2) 是 正则表达式,即 R 。其中L()={ }。 (3) c 是 正则表达式,即c R 。其中L(c)={ c }。 设A和B是 正则表达式,即A R,B R ,则有
3.Micro语言单词内部表示的类型说明 Token.Lex(Token.LH) Token.Sem(Token.RH)
三、保留字 如何识别保留字?——保留字表
5/42
四、空格符、制表符和换行符 标志位 StringFlag(true/false)
五、括号类配对预检
例:()(), (()), (()()), {()} (())), )()(, { ( } )
REi
16/42
例3.2.3.1
[1] 数字集D = { 0,1, ......, 9 } 和字母集L = ( A | ...... | Z )可表示为:
D→ 0|1| ......| 9
L → A | B | ..... | Z
[2] 整常数的集合IntC可表示为:
IntC → D+ 或
4.符号串长度:符号串中符号的个数
例:|abca|=4 |ε |=0
5.符号串连接:αβ
例: =aa和=bb,则有=aabb
1ห้องสมุดไป่ตู้/42
空串是恒等元素 λ S=Sλ =S
6.符号串集乘积:AB={αβ|α ∈A, β ∈B }
例:A={a,bc},B={+-,d}, AB={a+-,bc+-,ad,bcd} ф A=Aф =A {λ }A=A{λ }=A
RealC = D+.D+ 。 约定:优先级 ⑴ * ⑵ . ⑶ |
例:(a)|((b)*(c)) a|b*c
例:∑={a,b}
a|ba|b {a,ba,b}
⑴ a|b {a,b}
aa|ab|ba|bb
⑵ (a|b)(a|b) { aa,ab,ba,bb}
⑶ a* { λ ,a,aa,……}
⑷ (a|b)* 或(a*b*)* 由a和b构成的所有符号串
第三章 有限自动机与词法分析器
教学目的:介绍正则表达式、有限自动 机及词法分析器的构造。
教学重点:正则表达式与NFA、DFA 之间的相互转换。
教学难点: 词法分析器的实现 。
1/42
第三章 有限自动机与词法分析器
3.1 词法分析 3.2 正则表达式 3.3 有限自动机 3.4 词法分析器的构造
9/42
词法错误校正可能产生语法错误,例如, “beg#in”将被校正为“beg in”,它很可能产 生语法错误,这是不可避免的。因此在发现词 法错误时,返回一个特殊的带警告的TOKEN。 被警告TOKEN的语义值是一个字符串,它是 重新开始扫描时被删除的部分。语法分析器遇 到被警告的TOKEN,意味着警告下一TOKEN 是不可靠的,需要错误校正。
( A ) R,L( (A) )= L(A) A | B R,L( A | B )= L(A)L(B) A B R,L( A B )= L(A ) L(B) A* R,L( A*)= L(A)*
14/42
例3.2.2.1 假设有D = { 0,1, ......, 9 },则 实常数 的集合RealC可用 正则表达式定义为如下:
(1)计数器方法 (2)栈方法 六、向前看多个字符的处理
1.例:Pascal语言中10..100 标识符“maint” ,符号“<=”
6/42
2.词法分析器的倒退工作——valid前缀
Buffered Token 1 12 12. 12.3 12.3e 12.3e+
Token Flag Integer Constant Integer Constant Invalid Real Constant Invalid Invalid
例:Pascal中 12.3e+q
7/42
七、字符串空间 对于字符串常量,如何节省空间和提高字符
串的访问速度? 用字符数组(字符串空间)存储字符串。 index(下标),length(长度)
index
length
ma r t ma s k w o r d
mart: 1 4 mask: 5 4 word: 9 4
15/42
(5) a(a|b)*
Σ上所有以a为首的符号串
(6) a|a*b
表示a或零个或多个a后随一个b的所有符 号串
如果两个正则表达式r和s表示同样的语言, 则r和s等价,写作r=s。
例:(a|b)=(b|a)
A*=(A| λ )*
A+=AA*| A*A
A*=A+| λ
二、正则定义:Ei =REi 表示成 Ei
8/42
单层字符串空间
八、词法错误校正 1.词法错误:语言所不允许的错误符号。 2.词法错误校正——当发现一个词法错误 时,采取一定的补救措施使词法分析过程继 续进行下去,并且尽可能使得源程序中的单 词在补救后仍成为同样的单词。 (1)删除已被读过的字符,并重新开始 扫描未被读过的字符。
(2)删除已被读过的第一个字符,并重 新开始扫描它的后继部分的字符。
2/42
§3.1 词法分析
一、词法分析器的功能
3/42
二、单词的内部表示
1.单词的分类:标识符、整常数、实常数
保留字、符号词、控制词 2.单词的内部表示(Token)
(词法信息,语义信息)或(词法信息)
例:x1,z12
$id
$id x1 $id z12
$id
标识符名表
…x 1…z 1 2…
4/42