深切体会到完成这么一个复杂的大的程序,的确不是一.doc

深切体会到完成这么一个复杂的大的程序,的确不是一.doc

ID:55532824

大小:31.00 KB

页数:7页

时间:2020-05-16

深切体会到完成这么一个复杂的大的程序,的确不是一.doc_第1页
深切体会到完成这么一个复杂的大的程序,的确不是一.doc_第2页
深切体会到完成这么一个复杂的大的程序,的确不是一.doc_第3页
深切体会到完成这么一个复杂的大的程序,的确不是一.doc_第4页
深切体会到完成这么一个复杂的大的程序,的确不是一.doc_第5页
资源描述:

《深切体会到完成这么一个复杂的大的程序,的确不是一.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在系统学习了《编译技术原理》实例分析与课程设计这本书之后,深切体会到要完成这么一个复杂的大的程序,的确不是一件容易的事情,最大的感触是该书所描述的PS语言系统开发的那种层层深入的概念,一个阶段紧靠另一个阶段的开发过程。下面从各个阶段特别是词法分析和语法语义分析阶段谈谈我对本书所介绍的PS语言开发过程的一点个人体会和理解。一、词法分析第一阶段是词法分析,由模块PASS1来实现,主要是扫描并识别程序正文的符号和保留字,最终以符号和保留字的名字做为输出值,由于符号是以符号表的形式储存的,故第一阶段的代码输出可以以符号的名字在符号表中的顺序值作为输出,即中

2、间代码的输出。词法分析部分也称扫描器,它的原则是必须超前读入一个字符,这条规则主要是为了区分某些两个字符的符号和单个字符的符号,如〈〉、〈=和〈等;(对于PS语言)符号包括分隔符、专用符号、数和单词,对于分隔符来说,空格符以Nextchar跳过,对于换行符则加多一行,对于注释符则必须调用递归过程Comment来完成,因为注释符后面可能又有注释符;对于数来说,扫描器必须得到数的具体数值,故必须按照数的位数计算其大小并记录起来,同时要防止数值超界;对于单词来说,必须区分它们是保留字还是名字,因此必须对符号表进行查找,找到保留字则输出它的顺序值,否则作为

3、名字并后跟一个名字索引,对于新的名字出现则插入符号表。在PS语言中的符号表采用了一种比较复杂的散列表加单词表加拼写表的方法,以指针的方式可以使编译程序能有效地区分不同长度的名字,名字可以无限长。其查找以散列和线性相结合以达到最价性能。对于我们编写的PL语言词法分析的最后一个工作是测试工作,根据词法分析测试的几个重要规则,构造以下合法符号的测试程序:(1)合法符号的测试$PLprogramtest1:correctsymbols$comment$abcedfghijklmnopqrstuvwxyz$ABCEDFGHIJKLMNOPQRSTUVWXYZ

4、$1234567890}!″#%&'()*+,-.$/:;<=>?@[]_~{}$specialsymbols+-*/<=>:=&

5、~()[],.;[]->$numberals032767$wordssymbolsarraybeginconstdoodendiffiproccallskipintegerbooleanfalsetruereadwrite$namesabcedfghijklmnopqrstuvwxyz0123456789ABCEDFGHIJKLMNOPQRSTUVWXYZ0123456789DNAa12acDnaa12aCa12$

6、endtext二、语法分析和语义分析:该模块是整个编译程序的核心部分,它包括语法分析、作用域分析、类型分析等主要部分,以下按照书本的顺序和自己的体会具体谈谈我的理解:(1)语法分析:该部分由分析器PASS2完成,主要解决判断整个程序在语法结构上的错误,这一阶段的输入为词法分析的输出部分,PASS2的唯一任务是输入符号序列,并且在发现程序错误时输入错误消息,这一部分一共涉及以下几个规则:l规则1:对于每条BNF规则N::=E,分析器定义一个同名过程l规则2:对形如F1,F2,……,Fn的句子序列的识别是按照书写次序每次一个的扫描各个来实现:a(F1F

7、2……Fn)=a(F1);a(F2);……a(Fn);l规则3:当分析器期待一个后跟Stop符符号S时,它就调用过程Expecta(S,Stop)=Expect(S,Stop)l规则4:为了识别由BNF规则N描述的句子,分析器调用相应的过程N,并用句子的Stop符集作为参数:a(N,Stop)=N(Stop)l规则5:分析器使用下述算法识别形式[E]的后面跟一个Stop符的句子a([E]),Stop)=SyntaxCheck(First(E)+Stop)ifSymbolinFirst(E)thena(E,Stop)l规则6:分析器使用下述算法识别形

8、式{E}的后面跟一个Stop符的句子a({E}),Stop)=SyntaxCheck(First(E)+Stop)whileSymbolinFirst(E)doa(E,First(E)+Stop)l规则7:如果形式T1,T2,……,Tn的所有句子都是非空的,下述算法将识别形式T1

9、T2

10、……

11、Tn的后面跟一个Stop符的句子a(T1

12、T2

13、……

14、Tn,Stop)=ifSymbolinFirst(T1)thena(T1,Stop)elseifSymbolinFirst(T2)thena(T2,Stop)……elseifSymbolinFirst(Tn

15、)thena(Tn,Stop)elseSyntaxError(Stop)如果任一Ti句子可能是空的,用SyntaxChec

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

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

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