编译原理实践--PL0的词法分析程序构造.ppt

编译原理实践--PL0的词法分析程序构造.ppt

ID:52183342

大小:1.53 MB

页数:49页

时间:2020-04-02

编译原理实践--PL0的词法分析程序构造.ppt_第1页
编译原理实践--PL0的词法分析程序构造.ppt_第2页
编译原理实践--PL0的词法分析程序构造.ppt_第3页
编译原理实践--PL0的词法分析程序构造.ppt_第4页
编译原理实践--PL0的词法分析程序构造.ppt_第5页
资源描述:

《编译原理实践--PL0的词法分析程序构造.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库

1、编译原理实践--PL/0的词法分析程序构造词法分析方法的构造方法分类词法分析程序的任务词法分析程序的设计1.词法分析程序的构造方法分类讲述正规式(正则表达式)和有穷自动机理论,目的是为了介绍词法分析程序自动构造工具Lex的原理。词法分析程序不是通过编程,而是执行Lex产生采用“Loop-and-Swtich”(循环和分支)方法本课程采用第二种方法,Lex方法将在后续时间补充介绍2.词法分析程序的任务词法分析程序的任务:对源程序进行扫描,提供一个个符号给语法分析程序。简称为扫描器(scanner)或

2、扫描程序词法分析程序实现的2种方案:1.先单独工作一遍,把字符流源程序先变为符号序列,输出到一个中间文件上,然后将这个文件作为语法分析程序的输入继续第二遍的编译过程字符串源程序词法分析符号串源程序2.有些编译程序将词法分析和语法分析安排在同一遍中,此时词法分析作为语法分析程序的一个子程序。每当语法分析需要一个新的符号时,就调用词法分析子程序,词法分析子程序从字符串源程序中识别出一个具有独立意义的单词,将其符号返给语法分析。这种方法避免了中间文件,省去了送取符号工作,有利于提高编译程序的效率。书中采

3、用这种方案。字符串源程序词法分析器语法分析器取符号送符号程序getsym本课程采用第2种方案,程序名getsym,预先审视源程序下一个符号,并将读入的符号放在变量sym中,语法分析的判断分析将以这个读入的符号为基础具体任务:跳过空格字符识别像begin、end、if、while等这样的保留字识别非保留字,作为标识符处理识别数字识别专用符号组合,如:=、<=、>=识别特殊的单个字符,如+、-、/、*跳过注释行(书中例子程序没有体现)辅助过程getchgetsym需要一个辅助过程getch,每被调用一

4、次就读入下一个字符除此之外的任务:识别行结束标志,作为空格符处理拷贝原文输出在输出文件每行开始添加坐标(书中例子程序没有体现)3.词法分析程序的设计每调用一次getsym,首先用循环结构在源程序上向前读入一个非空格字符,然后对此字符进行分析,转相应部分处理getsym大致可以分为三个部分处理保留字和标识符处理常数处理组合字符和单个字符getsym的SI-NS框图1)getch的SI-NS图过程getch的功能:getch被getsym每调用一次,就在inf输入文件上向前读取一个字符给ch变量(程序

5、P84)getch相关变量说明inf:text(*inf文本文件用于指向输入的源程序文件*)ch:char(*最近一次从文件中读出的字符*)cc:integer(*行缓冲区指针,初始为0*)ll:integer(*行缓冲区长度,初始为0*)line:array[1..81]ofchar(*行缓冲区*)proceduregetch;beginifcc=llthenbeginifeof(inf)thenbeginwrite('programincomplete');haltend;ll:=0;cc:=

6、0;whilenoteoln(inf)dobeginll:=ll+1;read(inf,ch);write(ch);line[ll]:=chend;writeln;ll:=ll+1;readln(inf);line[ll]:=''end;cc:=cc+1;ch:=line[cc]end2)处理保留字和标识符在词法分析程序getsym中,当读入的字符为a-z的字母时候,就进入处理保留字和标识符的程序部分(程序P84)相关类型说明:symbol=(nul,ident,number,plus,minus

7、,times,slash,…)alfa=packedarray[1..al]ofchar(*alfa类型用于标识符*)相关常量说明:al=10(*标识符最长长度*)norw=11(*保留字个数*)word:array[1..norw]ofalfaword[1]~word[11](*保留字表,长度为10的保留字,多余用空格填充,以便词法分析时用二分法查找保留字*)wsym:array[1..norw]ofsymbolwsym[1]~wsym[11](*在上面的保留字表中找到保留字后可以在本表中相应位

8、置找到保留字类型*)ssym:array[char]ofsymbolssym[‘+’]~ssym[‘;’](*符号表,把可能出现的符号赋予上相应的类型,其余符号为nul*)相关变量说明sym:symbol(*词法分析器输出结果之用*)id:alfa(*词法分析器输出结果之用*)num:integer(*词法分析器输出结果之用*)i,j,k:integer(*局部变量*)a:alfa(*词法分析器中用于临时存放正在分析的词*)kk:integer(*引入此变量为了性能,初始为10*)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。