资源描述:
《第4章 词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第4章 词法分析本章介绍编译第一个阶段词法分析的设计原理和设计方法,要求明确此阶段的任务。理解通常的单词分类和构词规则。会使用单词的描述和识别机制。要求掌握正规文法、状态图、DFA、NFA、正规式和正规集的基本概念和它们之间的关系。教学目标4.1词法分析程序词法分析(lexicalanalysis)词法分析时间逐个读入源程序字符,并按照构词规则分割成一系列单词,再转换成词标流的过程。单词是语言中具有独立意义的最小单位,包括保留字、标识符、常量、运算符和界符等。词标是单词才机内码表示,其格式有实现系统规定。例如:PL/0语言的单
2、词,用户写的:ifa=2..机内表示为:ifsymidenteqlnumber…。词法分析是翻译的第一阶段,是语法分析的必要准备。词法分析程序也称为扫描程序或扫描器(scanner)。词法分析是编译过程中的一个阶段,可以在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。实现方案:基本上有两种1.词法分析单独作为一遍2.词法分析程序作为单独的子程序S.P.(字符串)词法分析S.P.(符号串)语法分析第一遍第二遍单词串优点:结构清晰、各遍功能单一缺点:效率低S.P.(
3、字符串)词法分析程序语法分析程序取单词单词词法分析工作从语法分析工作独立出来的原因:(P51)简化设计改进编译效率增加编译系统的可移植性(1)分析和识别单词及属性,包括识别语言的关键字、标识符、常数、运算符等;(2)跳过各种分隔符,如空格,回车,制表符等;(3)删除注释;(4)进行词法检查,报告所发现的错误;(5)建立符号表。词法分析的任务单词类别及其输出形式单词可作各种分类,典型地分为5类:①保留字AND,BEGIN,FOR,TYPE,VAR等②标识符用户定义的常量、类型、变量、过程名③常量 12,1997,4.14,‘A
4、’,等④运算符 +,-,*,/,>,<>,!=,#等⑤界限符 ; , ( ) 等词法分析程序所输出的单词符号常常采用以下二元式表示:(单词种别,单词自身的值)。单词的种别是语法分析需要的信息,而单词自身的值则是编译其它阶段需要的信息。比如在PASCAL的语句consti=25,yes=1;中的单词25和1的种别都是常数,常数的值25和1对于代码生成来说,是必不可少的。有时,对某些单词来说,不仅仅需要它的值,还需要其它一些信息以便编译的进行。比如,对于标识符来说,还需要记载它的类别、层次还有其它属性,如果这些属性统统收集在符号表
5、中,那么可以将单词的二元式表示设计成如下形式(标识符,指向该标识符所在符号表中位置的指针)如上述语句中的单词i和yes的表示为:(标识符,指向i的表项的指针)(标识符,指向yes的表项的指针)词法分析程序的输出形式-----二元式单词类别单词的属性值单词类别可以用整数编码表示:一类一种或一字一种单词类别关键字标识符常数运算符分界符编码12345单词类别单词的属性值1int2指向x的符号表入口指针4=3105,2指向y的符号表入口指针4=3205,2指向sum的符号表入口指针5;intx=10,y=20,sum;词法分析的结果
6、程序段ifi=5thenx∶=y;在经词法分析器扫描后输出的单词符号和它们的表示如下: -保留字if(3,'if') -标识符i(1,指向i的符号表入口) -等号=(4,'=') -常数5(2,'5') -保留字then(3,'then') -标识符x(1,指向x的符号表入口) -赋值号∶=(4,'∶=') -标识符y(1,指向y的符号表入口) -分号;(5,';')词法分析在实际操作中:对于每种语言,保留字、运算符和界限符是固定的,可以“一字一类”或“一符一类”,预先造好标准单词表。单词内部编码单词内部编码
7、……………………IF3+24THEN4-25ELSE5*26……………………FOR19>34……………………例如:常数虽然也是固定的,但个数太多,而每个程序只用很少一部分,不宜预先造表。编译只对源程序中出现的各类常量造表,如整数表、实数表、字符串表等。例如,整数表IntTab存放源程序中的整常数,扫描器拼出整数时,查IntTab表,若无此数,则填入表中;若已有此数,则不在填入,用其在表中的地址idp作为联系机内码和自身值的桥梁。标识符的意义是由用户定义的,与常量类似,编译器也构造一个标识符表IdTab。每识别出一个标识符,则查
8、IdTab表,若无则填入,已有则不填,用其在表中的地址idp作为联系机内码和自身值的桥梁。PL/0词法分析的设计与实现:PL/0编译程序的词法分析PL/0的词法分析程序GETSYM(P19图2.5)是一个独立的过程,其功能是为语法分析提供单词用的,是语法分析的基础,它把输入的