欢迎来到天天文库
浏览记录
ID:46526018
大小:756.00 KB
页数:60页
时间:2019-11-24
《ppt编译原理3章31》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第三章词法分析3.1词法分析器的设计词法分析的主要工作:从源程序的第一个字符开始,从左到右扫描源程序,一次读一个字符,根据词法规则将有关字符组合成单词,并识别各类单词,当确定单词类别后,将单词输出。在词法分析过程中还要完成其它任务,如:过滤掉源程序中的注释和空白;记录读入字符的行号,以便发现错误后能报告出错位置;进行预编译工作(对宏进行展开等工作);符号表操作。错误处理等。词法分析与语法分析的接口方式:(1)词法分析作为一遍:将词法分析器的输出结果放入一个中间文件上(外存)或直接存放在内存中,后面的
2、语法分析程序将它作为输入进行语法分析,这样通过一遍加工就可以将以字符串形式的源程序加工成单词串形式的源程序。LexicalanalyzerCharacterstreamTokenstreamErrormessages(2)词法分析与语法分析安排在同一遍中:将词法分析编成一个子程序,该子程序由语法分析程序调用。当语法分析程序需要一个新单词时,调用该程序,每调用一次,则从源程序中读出一个单词,这样避免了中间文件的生成,可以提高编译效率。CharacterstreamLexicalanalyzersynt
3、axanalyzerAbstractSyntax源程序的输入:(1)一次性输入:当内存较大时,把源程序一次性输入到内存的用户数据区,每个字符占一个字节,词法分析程序从数据区中依次读入字符。………数据区词法分析(2)分批次输入:当内存不够大时,在内存开辟一个适当大小的输入缓冲区,输入时,把源程序分批输入到输入缓冲区,词法分析程序从缓冲区中读取字符,当缓冲区的字符全部读完以后,再从外存上读入下一批,直到全部源程序字符读完为止。………缓冲区词法分析(3)超前搜索:词法分析程序在组合单词的时候,为了进一步判
4、明情况和确定下一步要做什么以及为了处理上的方便等,常采取向前假读字符的办法(超前搜索),即先向前读取字符和判别字符是什么,不马上处理,当情况判明后,再回来处理已读过的字符。例如:有源程序,programexample(input,output);在判别保留字program过程中,当读到字符m时,虽然前面字符为program,还要看是否结束,即后面字符是什么(字母、数字还是空格),所以不能马上处理(断定是保留字),而需要再向前假读一个字符,确定后再回来处理。在判别标识符example过程中,当读
5、到字符e时,虽然前面字符为example,为了判别下一个字符是否是该标识符的一部分,也要判别下一个字符是否为字母或数字,所以不能马上处理,需要再向前假读一个字符。Ex:p40有时,为了判别读进字符所组成的单词的类别,需向前假读若干字符!(4)输入缓冲区的处理:显然,无论缓冲区设定为多大,都不能保证单词不会被它的边界打断,若有单词TEST123,可能在缓冲区中成为:………………………….TES在这种情况下,即使通过假读读到缓冲区的最后一个字符,但仍不能找到该单词的右边界,这时,若从外存上再读
6、一部分源程序进入缓冲区,则会将没有处理过的字符(TES)冲掉。为此,我们可将缓冲区分成相等的两个区域:真读指针假读指针两个半区互补使用两个指针协同工作单词长度有无限制?单词的输出:(1)单词的种类:保留字(关键字):如,programbeginendvarconstfor……标识符:如,程序名、变量名、常量名、类型名、过程名等常数:如,125、0.745、15.2E+5算符:如,+、–、*、/、等界符:如,分号、逗号等(2)词法分析器的输出形式:为了便于编译程序进一步加工,单词的输出形式一般采用二元
7、式:单词类别单词值用整数编码表示,如何分类以处理方便为原则,如:标识符归为一类;常数按类型分类;保留字一字一类,或将全体定位一类;界符可单独作为一类,或一符一类。采用什么样的输出形式也是取决于后续处理的方便,如:标识符用字符串编码或对应地址;常数用其自身值的二进制形式;保留字(分界符)若将全体定位一类则需输出其值,可用内部整数编码或串编码表示。例如:程序段ifi=5thenx:=y;在经过词法分析器扫描后,输出的单词可表示如下:保留字if(3,‘if’)标识符i(1,指向i的符号表入口)等号=(4
8、,‘=’)常数5(2,‘5’的二进制表示)保留字then(3,‘then’)标识符x(1,指向x的符号表入口)赋值号:=(4,‘:=’)标识符y(1,指向y的符号表入口)分号;(5,‘;’)其中,类别码:“1”表示标识符;“2”表示常数;“3”表示保留字;“4”表示算符;“5”表示界符。词法分析的分离:实际上,词法也是语法的一部分,词法描述完全可以归并到语法描述中去,只不过词法规则更简单些。进一步说,在编译程序中可以将词法分析包含在语法分析之中,那么为什么
此文档下载收益归作者所有