第78章编译概述语法分析.ppt
《第78章编译概述语法分析.ppt》由会员分享,可在线阅读,更多相关《第78章编译概述语法分析.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第78章编译概述语法分析现在学习的是第1页,共64页二.编译执行和解释执行1.编译执行 源程序 目标程序 计算结果 汇编语言程序 目标程序 2.解释执行:一边翻译一边解释执行编译编译运行汇编程序初始数据现在学习的是第2页,共64页三.编译程序的组成1.词法分析、语法分析、语义分析、优化、目标代码生成、符号表管理、出错处理。2.相互关系如下图:现在学习的是第3页,共64页源程序字符串词法分析器语法分析器语义分析、中间代码生成器代码优化器目标代码生成器单词流语法单位中间代码序列中间代码序列目标程序符 号 表 管 理 程 序出 错 处 理 程 序编译程序的结构编译程序的结构现在学习的是第4页,共64
2、页1.1.词法分析词法分析词法分析词法分析:1)输入字符串,根据词法规则识别出单词符号。2)二元式结果(单词类别、单词属性)3)记号(Token):基本字、标识符、常数、运算符、界符4)词法出错处理现在学习的是第5页,共64页2.语法分析语法分析语法分析语法分析:根据语法规则,将单词符号构成各类语法单位,并进行语法检查。例:语法单位中有表达式、短语、句子、程序等等。现在学习的是第6页,共64页3.语义分析与代码生成语义分析与代码生成:1)根据语义规则,进行初步实质性翻译。2)中间代码(对应抽象机)现在学习的是第7页,共64页4.优化优化:对中间代码进行等价变换,以使代码更有效。时间与空间5.目
3、标代码生成目标代码生成:生成机器语言程序或汇编语言程序。现在学习的是第8页,共64页6.符号表管理符号表管理符号表管理符号表管理:完成符号表的建立,查找,更新。7.出错处理出错处理出错处理出错处理报告错误性质和出错的地点限制错误的影响到尽可能小的范围,便于其它部分继续编译。现在学习的是第9页,共64页一一 对词法分析器的要求对词法分析器的要求1.词法分析器的功能和输出形式词法分析器的功能和输出形式功功能能:输输入入源源程程序序,输输出出单单词词符符号号。单单词词符符号号是一个程序语言的基本语法符号。是一个程序语言的基本语法符号。第8章 词法分析现在学习的是第10页,共64页程序语言的单词符号一
4、般可分为下列五种:程序语言的单词符号一般可分为下列五种:关关键键字字:具具有有固固定定意意义义的的标标识识符符,称称为为保保留留字字或或基基本本字字。如如begin,end,if ,通通常常不不用用作一般标识符。作一般标识符。标标识识符符:表表示示各各种种名名字字,如如变变量量名名、数数组组名名、过程名过程名现在学习的是第11页,共64页 常数:常数:其类型一般有整型、实型、布尔、文字等。如其类型一般有整型、实型、布尔、文字等。如100、3.14159、TRUE、sample 运运算算符符:分分为为算算术术运运算算符符(如如:、*、/等等),逻逻辑辑运运算算符符(如如:not、and、or),
5、关关系系运运算算符符(如如:、=、=j)i;可转换为如下序列:可转换为如下序列:=,现在学习的是第17页,共64页词法分析程序的实现方式词法分析程序的实现方式完全独立方式完全独立方式:词法分析程序作为:词法分析程序作为单独一趟单独一趟来实现。来实现。词法分析程序读入整个源程序,它的输出作为语法词法分析程序读入整个源程序,它的输出作为语法分析程序的输入。分析程序的输入。相对独立方式相对独立方式:把词法分析程序作为语法分析程:把词法分析程序作为语法分析程序的一个独立序的一个独立子程序子程序。语法分析程序需要新符号时调。语法分析程序需要新符号时调用这个子程序。用这个子程序。2.词法分析器作为一个独立
6、子程序词法分析器作为一个独立子程序现在学习的是第18页,共64页完全独立方式完全独立方式采用词法分析工作完全独立的原因:采用词法分析工作完全独立的原因:简化设计,降低语法分析的复杂性简化设计,降低语法分析的复杂性提高编译效率提高编译效率增加编译系统的可移植性增加编译系统的可移植性 源程序词法分析程序语法分析程序属性字序列属性字序列.现在学习的是第19页,共64页相对独立方式相对独立方式当采用递归下降分析等技术实现一趟编译程序时常采当采用递归下降分析等技术实现一趟编译程序时常采用这种方式。用这种方式。词法分词法分析器析器语法分语法分析器析器符号表符号表源程序源程序单词符号单词符号取下一单词取下一
7、单词.现在学习的是第20页,共64页1.单词符号的识别:超前搜索单词符号的识别:超前搜索1 基本字识别:例如:1 DO99K=1,10 DO 99 K=1,10 2 IF(5.EQ.M)GOTO55 IF(5.EQ.M)GOTO 553 DO99K=1.104 IF(5)=55需要超前搜索才能确定哪些是基本字词法分析程序在读取单词时,为了判断是否已读入整词法分析程序在读取单词时,为了判断是否已读入整个单词的全部字符,常采取向前多读取字符并通过读个单词的全部字符,常采取向前多读取字符并通过读取的字符来判别,即所谓取的字符来判别,即所谓超前搜索技术超前搜索技术。二、二、词法分析器的设计词法分析器的
8、设计现在学习的是第21页,共64页 标识符标识符字字母母开开头头的的“字字母母/数数字字”串串。由由于于后后跟跟算算符符或或界界符符,所所以以容易识别。容易识别。常数常数如如FORTRAN的的5.E08与与5.EQ.M也必须超前搜索。也必须超前搜索。算符和界符算符和界符多多字字符符复复合合而而成成的的算算符符与与界界符符(如如:=,*,.EQ.,+,-,=等等)拼拼合合成成一一个个单单词词符符号号。是是不不可可分分的的整整体体,同同样样需要需要超前搜索。超前搜索。现在学习的是第22页,共64页2.状态转换图状态转换图设计词法分析器的一个好工具设计词法分析器的一个好工具状态转换图是一张有限方向图
9、。213XY结点代表状态,用圆圈表示结点代表状态,用圆圈表示。状态之间用箭弧连结,箭弧上的状态之间用箭弧连结,箭弧上的标记标记(字符字符)代表射出结状态下可代表射出结状态下可能出现的输入字符或字符类。能出现的输入字符或字符类。一张转换图只包含有限个状态,其中一张转换图只包含有限个状态,其中有一个为初态,至少要有一个终态。有一个为初态,至少要有一个终态。现在学习的是第23页,共64页状态转换图可用于识别状态转换图可用于识别/接受一定的字符串:接受一定的字符串:210字母字母或数字其它*(a)标识符的识别标识符的识别210数字 数字其它*(b)整数的识别整数的识别1072345数字数字数字.E或D
10、+或-数字数字其它*6.数字E或D数字其它(c)Fortran实常实常数的识别数的识别现在学习的是第24页,共64页几点重要限制几点重要限制不必使用超前搜索不必使用超前搜索所所有有基基本本字字都都是是保保留留字字;用用户户不不能能用用它它们们作作自自己的标识符己的标识符基基本本字字作作为为特特殊殊的的标标识识符符来来处处理理;不不用用特特殊殊的的状态图来识别,只要查保留字表。状态图来识别,只要查保留字表。如如果果基基本本字字、标标识识符符和和常常数数(或或标标号号)之之间间没没有有确确定定的的运运算算符符或或界界符符作作间间隔隔,则则必必须须使使用用一一个个空白符作间隔。空白符作间隔。DO99
11、K=1,10 要写成要写成 DO 99 K=1,10现在学习的是第25页,共64页123456789101112130空白空白字母字母字母或数字字母或数字非字母与数字非字母与数字数字数字非数字非数字数字数字=+*非非*,()其它其它*现在学习的是第26页,共64页状态转换图的实现状态转换图的实现思想:每个状态结思想:每个状态结点点对应一小段程序。对应一小段程序。做法做法:1)对不含回路的分叉结,可用一个对不含回路的分叉结,可用一个CASE语句或语句或一组一组IF-THEN-ELSE语句实现语句实现GetChar();if(IsLetter()状态状态j的对应程序的对应程序段段;else if(
12、IsDigit()状态状态k的对应的对应程序段程序段;else if(ch=/)状态状态l的对应程的对应程序段序段;else 错误处理错误处理;ijkl字母字母数字数字/现在学习的是第27页,共64页2)对含回路的状态结,可对应一段由对含回路的状态结,可对应一段由WHILE结构和结构和IF语句构成的程序语句构成的程序.i字母或数字字母或数字其它其它jGetChar();while(IsLetter()or IsDigit()GetChar();状态状态j的对应程序段的对应程序段3)终态结点终态结点表示识别出某种单词符号表示识别出某种单词符号,因此,对,因此,对应语句为应语句为 RETURN(C
13、,VAL)其中,其中,C为单词种别,为单词种别,VAL为单词自身值为单词自身值.现在学习的是第28页,共64页全局变量与过程全局变量与过程1)ch 字符变量、存放最新读入的源程序字字符变量、存放最新读入的源程序字符符2)strToken 字符数组,存放构成单词符号字符数组,存放构成单词符号的字符串的字符串3)GetChar 子程序过程,把下一个字符读子程序过程,把下一个字符读入到入到 ch 中中4)GetBC 子程序过程,跳过空白符,直至子程序过程,跳过空白符,直至 ch 中读入一非空白符中读入一非空白符5)Concat 子程序,把子程序,把ch中的字符连接到中的字符连接到 strToken
14、现在学习的是第29页,共64页6)IsLetter和和 IsDisgital 布尔函数,判断布尔函数,判断ch中字符是否为字母中字符是否为字母和数字和数字7)Reserve 整型函数,对于整型函数,对于 strToken 中的中的字符串查找保留字表,字符串查找保留字表,若它是若它是保留字则给保留字则给出它的编码出它的编码,否则回送,否则回送08)Retract 子程序,把搜索指针回调一个字子程序,把搜索指针回调一个字符位置符位置9)InsertId 整型函数,将整型函数,将strToken中的标识中的标识符插入符号表,返回符号表指针符插入符号表,返回符号表指针10)InsertConst 整型
15、函数过程,将整型函数过程,将strToken中的常数插入常数表,返回常数中的常数插入常数表,返回常数表指针。表指针。现在学习的是第30页,共64页int code,value;strToken:=“”;/*置置strToken为空串为空串*/GetChar();GetBC();if(IsLetter()beginwhile(IsLetter()or IsDigit()beginConcat();GetChar();endRetract();code:=Reserve();if(code=0)beginvalue:=InsertId(strToken);return($ID,value);end
16、elsereturn(code,-);end现在学习的是第31页,共64页else if(IsDigit()beginwhile(IsDigit()beginConcat();GetChar();endRetract();value:=InsertConst(strToken);retrnr($INT,value);endelse if(ch=)return($ASSIGN,-);else if(ch=+)return($PLUS,-);现在学习的是第32页,共64页else if(ch=*)beginGetChar();if(ch=*)return($POWER,-);Retract();r
17、eturn($STAR,-);endelse if(ch=;)return($SEMICOLON,-);else if(ch=()return($LPAR,-);else if(ch=)return($RPAR,-);else ProcError();/*错误处理错误处理*/现在学习的是第33页,共64页非法字符不合规则的常数标识符前缀为保留字3.词法错误检查词法错误检查现在学习的是第34页,共64页35编编译译过过程程中中编编译译程程序序需需要要不不断断汇汇集集和和反反复复查查证证出出现现在在源源程程序序中中各各种种名名字字的的属属性性和和特特征征等等有有关关信信息息。这这些些信信息息通通常
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 78 编译 概述 语法分析
限制150内