第3章词法分析与有穷自动机0319 优质课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理
2019年12月7日
教学内容
1 词法分析程序的功能 2 词法分析程序的输出形式 3 程序设计语言单词的定义 4 正规式与有穷自动机 5 正规文法与有穷自动机 6 词法分析程序的编写方法
编译原理
2019年12月7日
3.1 词法分析程序的功能
(1)分析和识别单词及属性, 包括识别语言的关键字、标识符、常数、运算符等;
正规式相等 这两个正规式表示的语言相等
编译原理
2019年12月7日
正规式举例
• 例:设有字母表 ∑={a,b},根据正规式与正规集的定义,有以 下的正规式和正规集
正规式
正规集
a
{a}
a∣b
{a,b}
ab
{ab}
( a∣b)( a∣b)
{aa,ab,ba,bb}
a*
{ε,a,aa,aaa,…,任意个a的串}
编译原理
2019年12月7日
表3.1
int x=10,y=20,sum;词法分析的结果
单词类别 1 2 4 3 5 2 4 3 5 2 5
单词的属性值
int 指向x的符号表入口指针
= 10 , 指向y的符号表入口指针 = 20 , 指向sum的符号表入口指针 ;
编译原理
2019年12月7日
3.3语言单词符号的两种定义方式
编译原理
2019年12月7日
实现方案:基本上有两种
1.词法分析单独作为一遍
S.P.(字符串)
第一遍 词法分析
单词串 S.P.(符号串)
第二遍 语法分析
优点: 结构清晰、各遍功能单一
2.词法分析程序作为单独的子程缺序点:效率低
S.P.(字符串)
词法分 析程序
取单词 单词
语法分 析程序
编译原理
2019年12月7日
标识符: 无符号整数: 单界符: 双界符:
a(a|d) * dd*
+ | * |< |, | ; <=
编译原理
2019年12月7日
示的正规集分别为L(e1)∪L(e2)、 L(e1) • L(e2)和(L(e1))*
4. 任何 上的正规式和正规集均由1、2和3产生。
编译原理
2019年12月7日
正规式中的运算符:
| -----或(选择)
• ----连接
* 或 { } ---重复 () ----括号
运算符的优先级: 先*, 后 • , 最后 | • 在正规式中可以省略.
3.2 词法分析程序的输出形式
单词的种类 (1)关键字:if、for、while (2)标识符: (3) 常数: (4) 运算符:+、-、* (5)分界符:, 、;、(、)
编译原理
2019年12月7日
词法分析程序的输出形式-----二元式
单词类别 单词的属性值
单词类别可以用整数编码表示:一类一种或一字一种
单词类别
关键字 标识符 常数 运算符 分界符
编译原理
编码
1 2 3 4 5
2019年12月7日
• 单词符号属性的值:
单词自身符号的机内编码。 关键字、运算符、界符:只输出其种别码即可。 标识符:自身字符串的值,长度受限制。 常数:本身的值。字符型输出字符串本身,数值型,输出其自 身的二进制。 • 对于标识符和常数,若要建符号表,则输出其在符号表的入口地 址。
【例】设Σ={a,b,c},则aa*bb*cc*是Σ上的一个正规式,
它所表示的正规集 L={abc,aabc,abbc,abcc,aaabc,...}={ambncl∣m,n,l≥1}
编译原理
2019年12月7日
【例】设Σ={a,b}
正规式 ba* a(a|b)* (a|b)*abb (a|b)*(aa|bb) (a|b)* (aa|ab|ba|bb) * (a|b)(a|b)(a|b) *
(2)跳过各种分隔符,如空格,回车,制表符等; (3)删除注释; (4)进行词法检查,报告所发现的错误; (5)建立符号表。
编译原理
2019年12月7日
main( )/*ADD*/ {int x=10,y=20,sum; sum=x+y; }
词法分析
main、(、)、{、int、x、 =、10、,、y、=、20、,、 sum、;、sum、=、x、+、 y、;、}
(a∣b)*
{ε,a,b,aa,ab,ba,bb,…所有a,b组成的串}
(a︱b) *(aa︱bb) (a︱b) * ∑*上所有含两个连续的a 或两 个连续的b组成的串
编译原理
2019年12月7日
【例】Σ={d,·,e,+,-} 则Σ上的正规式
d*(·dd*∣ε)(e(+∣- ∣ε)dd*∣ε)表示的是实数。 其中d为0~9中的数字。比如:2,12.59,3.6e2和 471.88e-1等等都是该正规集所表示集合中的元素。
第3章 词法分析
教学目标
1. 本章介绍编译第一个阶段词法分析的设计原理和 设计方法,要求明确此阶段的任务。
2. 理解通常的单词分类和构词规则。 3. 会使用单词的描述和识别机制。 4. 要求掌握正规文法、状态图、DFA、NFA、正规式
和正规集的基本概念和它们之间的关系。 5. 掌握词法分析程序的手工实现方法。
正规集 所有以b为首后跟任意多个a的符号串 所有以a为首的符号串 所有以abb为尾的a,b符号串 所有含有两个连续的a或两个连续的b的符号串 空串和任何长度为偶数的符号串 任何长度大于等于2的符号串
编译原理
2019年12月7日
【例】使用正规式来表示程序设计语言中的相应单词符号。
<标识符>→字母 | <标识符>字母 | <标识符>数字) <无符号整数>→数字 | <无符号整数>数字 <单界符>→+ | * |< |, | ; <双界符>→<=
• 文法定义:
标识符的定义:标识符是以字母开头的、字母数字的组合.
I → aB|a
右线性文法
B →aB| dB| a |d
I → a| Ia| Ida(a ∣d)*
编译原理
2019年12月7日
3.5 3.3.1 正规式与正规集
字母表, 定义在 上的正规式和正规集递归定义如下: 1. 和都是 上的正规式, 它们所表示的正规集分别为:{}和; 2. 任何a , a是 上的正规式,它所表示的正规集为:{a}; 3. 假定e1和e2是 上的正规式, 它们所表示的正规集分别记为L(e1) 和L(e2), 那么e1|e2, e1 • e2和e1*也都是 上的正规式, 它们所表