资源描述:
《《编译原理》第三章词法分析.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第三章词法分析第三章词法分析主要章节3.1词法分析与词法分析程序3.2词法分析程序的设计与实现3.3词法分析程序的自动生成3.1词法分析程序的功能词法分析的功能从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,再转换成词标流的过程3词法分析器源程序单词序列4while(i>=j)if(i>j)i=i-j;elsej=j-iwhile,(,i,>=,j,),if,(,i,>,j,),'i','=,'i','-','j',;,'else','j','=',
2、'j','-','i‘,;词法分析器3.1词法分析程序的功能3.2词法分析器的设计与实现3.2.1单词与属性字1.单词单词是语言中具有独立意义的最小语法单位。要素独立的意义最小的语法单位5例…A*B…,单词是“A”、“*”和“B”。…intint1…,单词是“int”和“int1”。…A++*B…,单词是“A”、“++”、“*”和“B”。复习流行语言词法规则的表示:BNF或EBNF;3型文法;正规式例<关键字>->int
3、float
4、for
5、#include
6、char
7、…<标识符>-><字母>{<字母>
8、<
9、数字>}V=<字母>(<字母>
10、<数字>)*61.关键字(保留字或基本字):关键字一般是语言系统本身定义的,通常是由字母组成的字符串。72.标识符:用来表示各种名字如,变量名,数组名,结构名,函数名,文件名等。3.2.1单词与属性字3.常数:256,3.14,true,abc4.运算符:如,+、-、*、/等等5.分界符:如逗号,分号,括号,单双引号等83.2.1单词与属性字3.2.1单词与属性字注意:(1)同一个字符开头+后续字符->跨多个单词类;9(2)非单词成分和预处理成分;例:源程序注释;/*…….*
11、/预处理指令:#define…#include…3.2.1单词与属性字2.属性字对所识别的单词的数据结构表示。L1=(T,C)属性字10刻画单词类别(单词性质)如:标识符;运算符;…单词的内码值(可空)TokenCode说明11单词类别通常用整数编码单词类别提供给语法分析程序使用单词符号属性信息记录单词符号的特征或特性单词的属性值提供给语义分析程序使用编码形式:一类一种:关键字、标识符、常数、运算符、界符一字一种:关键字、运算符、分界符各一码例题(一类一种)intx=10,y;12单词类别单词属性值1int2指
12、向x的符号表入口指针4=3105,2指向y的符号表入口指针5;注:通常将标识符的属性放在符号表中,因此常把指向存放标识符有关信息的符号表入口的指针作为标识符的属性值13源程序经词法分析器的输出〈while,——〉〈id,指向i的符号表入口的指针〉〈relational-op,<>〉〈id,指向j的符号表入口的指针〉〈do,——〉〈if,——〉〈id,指向i的符号表入口的指针〉〈id,指向j的符号表入口的指针〉while,i,<>,j,do,if,i,>,j,then
13、,'i',':=,'i','-','j','else','j',':=','j','-','i'例题(一字一种)3.2.2源程序的输入与预处理1.输入缓冲区成对且对半互补的输入缓冲区模式。即将一个缓冲区分为两个半区,每个半区长度为n(n一般为磁盘块或簇长的整倍数),其结构如图所示。14n:取2的整次幂;每个半区的末尾设置标志“eof”表示读入该半区的源程序的结束;B:单词w开始指针;F:扫描w的指针;两半区互补功能算法:if(F=前“eof”){重新分配、装入后半区;F++};elseif(F=后“eof”
14、){重新分配、装入前半区;F=1};elseF++;152.两个缓冲区的输入模式控制线数据线X:固定长度的存储空间;16预处理程序(作用)(1)减少内存空间占用;(2)减轻扫描器实质性处理的负担;预处理程序主要任务:(1)滤掉源程序中的非单词成分(如无用空格;换行符等);(2)实际的预处理工作17滤掉注释;宏替换;文件包含的嵌入;条件编译的嵌入;设计工具——FA作为扫描器的状态转换图的构造:step1:对语言的各类单词分别构造状态图;step2:将各类状态图合并,构成一个能识别该语言所有单词的状态图。18(1)
15、将各类单词的状态图的初态合并为一个惟一初态;(2)调整冲突编号。例3.2设某语言由标识符和无符号正整数两类单词构成,标识符和无符号正整数的词法规则:L→a
16、b
17、…
18、z
19、A
20、B
21、…
22、ZD→0
23、1
24、…
25、9<标识符>→L(L
26、D
27、_)*<无符号正整数>→DD*19step1:对语言的各类单词分别构造状态图;202LL
28、D
29、_13other1DD02other其中:other表示非L
30、D
31、_字