Pascal语言编译器的方案设计书与实现 .docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Pascal语言编译器的方案设计书与实现 .docx》由会员分享,可在线阅读,更多相关《Pascal语言编译器的方案设计书与实现 .docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精品名师归纳总结封面可编辑资料 - - - 欢迎下载精品名师归纳总结作者: PanHongliang仅供个人学习Pascal 语言编译器的设计与实现我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分:(1) 词法分析部分可编辑资料 - - - 欢迎下载精品名师归纳总结(2) 语法分析处理及四元式生成部分(3) 输出显示部分一词法分析器设计由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽视了单词输入错误的检查,而将编译程序的重点放在中间代
2、码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式:单词种别,单词自身的值 #defineACC-2#define sy_if0#define sy_then1#define sy_else2#define sy_while3#define sy_begin4#define sy_do5#define sy_end6#define a7#define semicolon8#define e9#define sharp10#define S11#define L12#define tempsy15#define EA18 /E and#define
3、EO19 /E or#define plus34#define subtract35#define times36#define divide37#define becomes38#define op_and39#define op_or40#define op_not41#define rop42#define lparent48#define rparent49#define ident56#define intconst57函数说明1. 读取函数 readline 、readchar 词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件 ”PA
4、S.dat ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时就是通过执行 readchar 从输入缓冲区获得的。如缓冲区已被读空,就再执行 readline 从 PAS.dat 中读取下一行至输入缓冲区。2. 扫描函数 scan 可编辑资料 - - - 欢迎下载精品名师归纳总结扫描函数scan 的功能是滤除余外空格并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。3. 变量处理 find ( )变量处理中第一把以字母开头的字母数字串存到spelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的全部关键字进行匹配,如获得胜利就说明它为保留关键字,即将其
5、内码值写入二元式结果缓冲区。否就说明其为变量,这时让它与变量名表中的变量进行匹配( 变量匹配函数 find ( ) ),假如胜利,就说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置), 否就将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。4. 数字识别 number 数字识别将识别出的数字填入二元式结果缓存数组。5. 显示函数显示函数的功能在屏幕上输出词法分析的结果(即二元式序列程序),同时给出二元式个数及源程序行数统计。二语法分析器设计语法分析器的核心是三张SLR 分析表以及针对这三张SLR 分析表进行语义加工的语义动作。编译程序中语法分析处
6、理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过程进行掌握,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理if 和 while 语句时,需要进行真值或假值的拉链和返填工作,以便转移目标的正确填入。1. 掌握语句 的 SLR 分析表 1 设计过程如下: 将扩展文法 G0) S S1) Sif e then S else S 2) Swhile e do S 3) Sbegin L end 4) Sa5) LS6) LS。L用 _CLOSURE 方法构造 LR0 工程规范簇为:I0: S SS if e then S else SSwhile
7、edoS S begin L endS a 。I1 : S SI2 : Sif e then S else S I3 : Swhile e do SI4 : Sbegin L end L SL S。LS if e then S else SSwhileedoS可编辑资料 - - - 欢迎下载精品名师归纳总结S begin L end S aI5 : SaI6 : Sif e then S else S I7 : Swhile e do SI8 : Sbegin L end I9 : LSLS。 LI10: Sif e then S else SS if e then S else S S wh
8、ile e do SS begin L end I11: Swhile e do SS if e then S else S S while e do SS begin L end S aI 12: Sbegin L end I13: LS。 LL SL S。 LS if e then S else S S while e do SS begin L end S aI14: Sif e then S else S I15: Swhile e do S I16: LS。LI17: Sif e then S else SS if e then S else S S while e do SS be
9、gin L end S aI18: Sif e then S else S构造文法 G中非终结符的 FOLLOW 集如下:FOLLOWL = end FOLLOWS = else ,。 ,end,#在()工程规范簇中,只有 9 有“移进归约”冲突,LSL S L由于 FOLLOWL FIRSTL= 所以可以用方法解决以上冲突,最终我们得到IfS2thenelsewhileS3beginS4ACTIONdoGOTOendaS5。e#S1L01ACC的分析表如下:可编辑资料 - - - 欢迎下载精品名师归纳总结2S63S74S2S3S4S5985R4R3R4R46S107S118S129R5S13
10、10S2S3S4S51411S2S3S4S51512R3R3R3R313S2S3S4S591614S1715R2R2R2R216R617S2S3S4S51818R1R1R1R1static int/*0*/*1*/action1913=2,-1,-1,3,4,-1,-1,5,-1,-1,10,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,ACC,-1,-1,/*2*/-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,/*3*/-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1,/*4*/2,-1,-1,3,4,-1,-1
11、,5,-1,-1,-1,9,8,/*5*/-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1,/*6*/-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*7*/-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1,/*8*/-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,/*9*/-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1,/*10*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1,/*11*/2,-1,-1,3,4,
12、-1,-1,5,-1,-1,-1,15,-1,/*12*/-1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1,/*13*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16,/*14*/-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*15*/-1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1,/*16*/-1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1,/*17*/2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1,/*18*/-
13、1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1。其中,前9 列为 action 值,后 2 列为 goto 值。 016 表示17 个移进状态( 即 Si)。 -1 表示出错。2. 算术表达式ACC 表示分析胜利。而100 106 对应归约产生式: 的 LR 分析表 2 设计如下:0SE1EE+E2EE*E3EE4Ei(过程略)ACTIONGOTOI+-*/#E0S3S21可编辑资料 - - - 欢迎下载精品名师归纳总结1S4S11S5S10ACC2S3S263R4R4R4R4R4R44S3S275S3S286S4S11S5S10S97R1R1S5S10R1
14、R18R2R2R2R2R2R29R3R3R3R3R3R310S3S21211S3S21312R6R6R6R6R6R613R5R5S5S10R5R5static int action1149=/*0*/3,-1,-1,-1,-1,2,-1,-1,1,/*1*/-1,4,11,5,10,-1,-1,ACC,-1,/*2*/3,-1,-1,-1,-1,2,-1,-1,6,/*3*/104,104,104,104,104,104,104,104,-1,/*4*/3,-1,-1,-1,-1,2,-1,-1,7,/*5*/*6*/3,-1,-1,-1,-1,2,-1,-1,8,-1,4,11,5,10,-
15、1,9,-1,-1,/*7*/101,101,101,5,10,101,101,101,-1,/*8*/102,102,102,102,102,102,102,102,-1,/*9*/103,103,103,103,103,103,103,103,-1,/*10*/3,-1,-1,-1,-1,2,-1,-1,12,/*11*/3,-1,-1,-1,-1,2,-1,-1,13,/*12*/106,106,106,106,106,106,106,106,-1,/*13*/3.布尔表达式的105,105,105,5,10,105,105,105,-1。SLR 分析表 3 设计如下:(过程略)1SB2
16、Bi3Bi rop i4B B 5BNOT B6AB AND7BAB8OB OR9BOBACTIONGOTOiRopNOTANDOR#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S51578可编辑资料 - - - 欢迎下载精品名师归纳总结9R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int action21611=/*0*/1,-1,4,-1,5,-1,-1,-1,13,
17、7,8,/*1*/-1,2,-1,101,-1,101,101,101,-1,-1,-1,/*2*/3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,/*3*/-1,-1,-1,102,-1,102,102,102,-1,-1,-1,/*4*/1,-1,4,-1,5,-1,-1,-1,11,7,8,/*5*/1,-1,4,-1,5,-1,-1,-1,6,7,8,/*6*/-1,-1,-1,104,-1,9,10,104,-1,-1,-1,/*7*/1,-1,4,-1,5,-1,-1,-1,14,7,8,/*8*/1,-1,4,-1,5,-1,-1,-1,15,7,8,/*9*/1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Pascal语言编译器的方案设计书与实现 Pascal 语言 编译器 方案设计 实现
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内