编译原理第三章词法分析.ppt
《编译原理第三章词法分析.ppt》由会员分享,可在线阅读,更多相关《编译原理第三章词法分析.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 词法分析词法分析 (Lexical Analysis)Lexical:of or relating to words or the vocabulary of a language as distinguished from its grammar and construction 词法分析在编译程序中的逻辑位置词法分析在编译程序中的逻辑位置表表 处处 理理 错错 误误 处处 理理 目目标标代代码码生生成成中中间间代代码码优优化化中中间间代代码码生生成成语语义义分分析析语语法法分分析析词词词词法法法法分分分分析析析析目目标标程程序序源源程程序序主要内容:主要内容:l词法分析程序的
2、功能词法分析程序的功能;l单词分类及内部表示单词分类及内部表示;l词法分析程序的设计与实现步骤。词法分析程序的设计与实现步骤。3.1 3.1 词法分析介绍词法分析介绍例例 某程序片段如下:某程序片段如下:VAR sum,first,count:real;BEGIN sum:=first+count*10 END.VARsum,first,count:real;BEGINsum:=first+count*10END.l源程序源程序一般表现为字符序列的形式一般表现为字符序列的形式;例例 某程序片段如下:某程序片段如下:VAR sum,first,count:real;BEGIN sum:=firs
3、t+count*10 END.:=first+count;sum,count:realVARsum,first.*10ENDBEGINl期望的源程序表示形式期望的源程序表示形式:=:END3.1.1 3.1.1 词法分析程序的功能词法分析程序的功能l单词单词是字符的序列是字符的序列,是指语言中那些具有独立是指语言中那些具有独立含义的最小语义单位。含义的最小语义单位。l单词不是程序设计语言中的语法概念,是编单词不是程序设计语言中的语法概念,是编译程序中引进的一个概念。译程序中引进的一个概念。l编译程序的翻译工作编译程序的翻译工作 为提高效率,编译为提高效率,编译应该应该在单词一级上进行在单词一级
4、上进行;l词法分析的主要任务词法分析的主要任务:词法分析是编译的第一词法分析是编译的第一阶段,它的的主要任务是按语言的词法规则,从阶段,它的的主要任务是按语言的词法规则,从左至右逐个字符地对原程序进行扫描,从源程序左至右逐个字符地对原程序进行扫描,从源程序中识别出每个单词,并把每个单词转换成它们的中识别出每个单词,并把每个单词转换成它们的内部表示,即所谓的内部表示,即所谓的TOKENTOKEN,同时进行词法检查。,同时进行词法检查。l词法分析程序:词法分析程序:执行词法分析的程序称为词法执行词法分析的程序称为词法分析程序分析程序,有时也称为词法分析器有时也称为词法分析器(Lexical Ana
5、lyzer)或者扫描器或者扫描器(Scanner)(Scanner)。3.1.2 词法分析程序的接口词法分析程序的接口 l词法分析程序与语法分析程序的接口有两种形式词法分析程序与语法分析程序的接口有两种形式:1.1.词法分析程序作为编译器的独立一遍词法分析程序作为编译器的独立一遍 遍(遍(PassPass):所谓):所谓“遍遍”就是对源程序或源程序就是对源程序或源程序的中间表示形式从头到尾扫描一次,并作加工处的中间表示形式从头到尾扫描一次,并作加工处理,生成新的中间结果或目标程序。理,生成新的中间结果或目标程序。词法分析程序作为独立的一遍:读入源程序字符词法分析程序作为独立的一遍:读入源程序字
6、符序列,识别出每一个单词并将其转换成相应的内序列,识别出每一个单词并将其转换成相应的内部表示,形成一个部表示,形成一个TOKENTOKEN序列,这个序列,这个TOKENTOKEN序列将序列将作为语法分析程序的输入;作为语法分析程序的输入;2.2.词法分析程序作为语法分析程序的一个子程序词法分析程序作为语法分析程序的一个子程序 语法分析程序每调用一次词法分析程序语法分析程序每调用一次词法分析程序,词词法分析程序就从源程序的字符序列中拼出一个法分析程序就从源程序的字符序列中拼出一个单词,并将其单词,并将其TOKENTOKEN值返回给语法分析程序。值返回给语法分析程序。这种方式的好处是,它不需要存储
7、源程序这种方式的好处是,它不需要存储源程序的内部表示。的内部表示。词法分析器的接口词法分析器的接口CharList 独独 立立词法分析器词法分析器语法分析语法分析TokenList 附附 属属词法分析器词法分析器语法分析语法分析callTokenCharList 3.2 3.2 词法分析程序的设计词法分析程序的设计3.2.1 单词分类单词分类一般常用程序设计语言的单词可以分为以下几类:一般常用程序设计语言的单词可以分为以下几类:l保留字:保留字:保留字一般是由语言系统自身定义的保留字一般是由语言系统自身定义的,通常是由字母组成的字符串。如通常是由字母组成的字符串。如C C语言中的语言中的int
8、,if,for,doint,if,for,do等等。这些字在语言中具有等等。这些字在语言中具有固定的意义,是编译程序识别各类语法成分的固定的意义,是编译程序识别各类语法成分的依据。依据。l标识符:标识符:用来标识程序中各个对象的名称。它用来标识程序中各个对象的名称。它们由用户定义,用来表示变量名、常量名、数们由用户定义,用来表示变量名、常量名、数组名和函数名等。组名和函数名等。l常量:常量:主要包括整数常数、实数常数、字符常量、主要包括整数常数、实数常数、字符常量、字符串常量等。字符串常量等。l特殊符号特殊符号:包括运算符和界限符。包括运算符和界限符。运算符表示程序中算术运算、逻辑运算、运算符
9、表示程序中算术运算、逻辑运算、字符运算、赋值运算的确定的字符或字符串。字符运算、赋值运算的确定的字符或字符串。如各类语言通用的如各类语言通用的+、-、*、/、=、=等。等。界限符在语言中是作为语法上的分界符号使用的。界限符在语言中是作为语法上的分界符号使用的。如逗号、分号、单引号等。如逗号、分号、单引号等。3.2.1 单词分类(续)单词分类(续)3.2.2 3.2.2 单词的内部表示单词的内部表示lTOKEN结构图结构图 l单词的内部表示单词的内部表示TOKEN的结构一般由两部分组成:的结构一般由两部分组成:单词类别和语义信息。单词类别和语义信息。l单词类别,又称词法信息,用来区分单词的不同单
10、词类别,又称词法信息,用来区分单词的不同种类,通常可以用整数编码来表示。种类,通常可以用整数编码来表示。l单词的语义信息,应该是唯一确定其本身内容的单词的语义信息,应该是唯一确定其本身内容的编码。编码。词法信息词法信息语义信息语义信息一、标识符和常量的一、标识符和常量的TOKENTOKEN结构结构 l给出标识符和常量类别编码给出标识符和常量类别编码;l给出标识符和常量的给出标识符和常量的语义信息。语义信息。关于语义信息可以有两种处理方法:关于语义信息可以有两种处理方法:一种是在其一种是在其TOKENTOKEN的语义信息部分直接存储这些值;的语义信息部分直接存储这些值;另外一种是设置标识符表和常
11、量表来存储其值,这时另外一种是设置标识符表和常量表来存储其值,这时TOKENTOKEN的的语义信息部分就是一个指向相应表项的一个指针。语义信息部分就是一个指向相应表项的一个指针。第一种方法处理起来比较简单,但是第一种方法处理起来比较简单,但是TOKENTOKEN的空间大小不好确的空间大小不好确定,可能造成空间浪费。因此,我们采取第二种策略。定,可能造成空间浪费。因此,我们采取第二种策略。标识符种类编码标识符种类编码语义信息语义信息常量种类编码常量种类编码语义信息语义信息二、保留字、界限符和运算符的处理二、保留字、界限符和运算符的处理l可以有两种处理方法:可以有两种处理方法:一种是保留字、界限符
12、和运算符分别算作一类,除了要给出一种是保留字、界限符和运算符分别算作一类,除了要给出其类别外,还需在其其类别外,还需在其TOKENTOKEN的语义信息部分直接存储这些值的的语义信息部分直接存储这些值的串或整数编码;如:串或整数编码;如:另外一种是保留字、界限符和运算符采用一符一类的方法,另外一种是保留字、界限符和运算符采用一符一类的方法,不输出单词的值(其不输出单词的值(其TOKENTOKEN的语义信息部分为空),只输出其的语义信息部分为空),只输出其类别码即可。如:类别码即可。如:保留字种类编码保留字种类编码if+的的 编码编码单词名称 类别编码(词法信息)类别编码的助记符标识符 1$id无
13、符号整数2$int,30$comma;31$semi:=32$assi+33$plus.34$stop:35$colon*36$multn37$returnvar15$varreal20$realbegin23$beginend24$end单词名称 类别编码(词法信息)类别编码的助记符标识符 1$id无符号整数2$int,30$comma;31$semi:=32$assi+33$plus.34$stop:35$colon*36$multn37$returnvar15$varreal20$realbegin23$beginend24$end例例1 某程序片段如下:某程序片段如下:VAR sum,
14、first,count:real;BEGIN sum:=first+count*10 END.不设置标识符表和常量表,词法分不设置标识符表和常量表,词法分析程序扫描该程序段的字符序析程序扫描该程序段的字符序列,生成下列列,生成下列TOKEN序列:序列:1.(15,)2.(1,sum)3.(30,)4.(1,first)5.(30,)6.(1,count)7.(35,)8.(20,)9.(31,)10.(37,)11.(23,)12.(37,)13.(1,sum)14.(32,)15.(1,first)16.(33,)17.(1,count)18.(36,)19.(2,10 )20.(37,)2
15、1.(24,)22.(34,)单词名称 类别编码(词法信息)类别编码的助记符标识符 1$id无符号整数2$int,30$comma;31$semi:=32$assi+33$plus.34$stop;35$colon*36$multn37$returnvar15$varreal20$realbegin23$beginend24$end例例1 某程序片段如下:某程序片段如下:VAR sum,first,count:real;BEGIN sum:=first+count*10 END.不设置标识符表和常量表,词法分不设置标识符表和常量表,词法分析程序扫描该程序段的字符序析程序扫描该程序段的字符序列,
16、生成下列列,生成下列TOKEN序列:序列:1.($var,)2.($id,sum)3.($comma,)4.($id,first)5.($comma,)6.($id,count)7.($colon,)8.($real,)9.($semi,)10.($return,)11.($begin,)12.($return,)13.($id,sum)14.($assi,)15.($id,first)16.($plus,)17.($id,count)18.($mult,)19.($int,10 )20.($return,)21.($end,)22.($stop,)u设置标识符表和常量表设置标识符表和常量表,
17、词法分析程序扫描该程序段的字符序词法分析程序扫描该程序段的字符序列,生成下列列,生成下列TOKEN序列:序列:1.($var,)3.($comma,)5.($comma,)7.($colon,)8.($real,)9.($semi,)10.($return,)11.($begin,)12.($return,)13.($id,p1)14.($assi,)15.($id,p2)16.($plus,)17.($id,p3)18.($mult,)20.($return,)21.($end,)22.($stop,)p2p1p3p4标识符表标识符表常量表常量表例例1 某程序片段如下:某程序片段如下:VAR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 第三 词法 分析
限制150内