最新Pascal语言编译器的设计与实现..doc
《最新Pascal语言编译器的设计与实现..doc》由会员分享,可在线阅读,更多相关《最新Pascal语言编译器的设计与实现..doc(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datePascal语言编译器的设计与实现.Pascal语言编译器的设计与实现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
3、 sharp10#define S11#define L12#define tempsy 15#define EA18 /E and#define 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 ident 56#define intconst 57函数说明 1
4、读取函数 readline( )、readchar ( )词法分析包含从源文件读取字符的操作,但频繁的读文件操作会影响程序执行效率,故实际上是从源程序文件” PAS.dat ”中读取一行到输入缓冲区,而词法分析过程中每次读取一个字符时则是通过执行 readchar ( )从输入缓冲区获得的;若缓冲区已被读空,则再执行readline( )从 PAS.dat 中读取下一行至输入缓冲区。2 扫描函数 scan( ) 扫描函数 scan( )的功能是滤除多余空格并对主要单词进行分析处理,将分析得到的二元式存入二元式结果缓冲区。3 变量处理 find( )变量处理中首先把以字母开头的字母数字串存到 s
5、pelling 数组中,然后进行识别。识别过程是先让它与保留关键字表中的所有关键字进行匹配,若获得成功则说明它为保留关键字,即将其内码值写入二元式结果缓冲区;否则说明其为变量,这时让它与变量名表中的变量进行匹配( 变量匹配函数 find( ) ),如果成功,则说明该变量已存在并在二元式结果缓冲区中标记为此变量( 值填为该变量在变量名表中的位置),否则将该变量登记到变量名表中,再将这个新变量存入二元式缓存数组中。4 数字识别 number( ) 数字识别将识别出的数字填入二元式结果缓存数组。5 显示函数 显示函数的功能在屏幕上输出词法分析的结果( 即二元式序列程序),同时给出二元式个数及源程序行
6、数统计。二语法分析器设计 语法分析器的核心是三张 SLR 分析表以及针对这三张 SLR 分析表进行语义加工的语义动作。编译程序中语法分析处理及四元式生成部分主要是以二元式作为输入,并通过 SLR 分析表对语法分析处理过程进行控制,使四元式翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。在处理 if 和 while 语句时,需要进行真值或假值的拉链和返填工作,以便转移目标的正确填入。1. 控制语句的 SLR 分析表1 设计过程如下: 将扩展文法G0) S S1)S if e then S else S2)S while e do S3)S begin L end4)S a5)L S6)L
7、 S;L用_CLOSURE方法构造LR(0)项目规范簇为:I0: S SS if e then S else SS while e do S S begin L endS a ;I1: S SI2: S ife then S else SI3: S while e do SI4: S beginL end L S L S;L S if e then S else SS while e do S S begin L endS a I5: S a I6: S if ethen S else S I7: S while edo S I8: S begin Lend I9: L SL S;L I10:
8、 S if e then S else SS if e then S else S S while e do SS begin L end I11: S while e do SS if e then S else SS while e do SS begin L endS aI12: S begin L end I13: L S; L L SL S;LS if e then S else SS while e do SS begin L endS a I14: S if e then Selse S I15: S while e do S I16: L S;LI17: S if e then
9、 Selse SS if e then S else SS while e do SS begin L endS aI18: S if e then S else S构造文法G中非终结符的FOLLOW集如下:FOLLOW(L) = end FOLLOW(S) = else , ; ,end,# 在()项目规范簇中,只有9有“移进归约”冲突,L SL SL因为FOLLOW(L) FIRST(L) = 所以可以用方法解决以上冲突,最后我们得到的分析表如下:ACTIONGOTO Ifthenelsewhilebegindoenda;e#SL0S2S3S4S511ACC2S63S74S2S3S4S59
10、85R4R3R4R46S107S118S129R5S1310S2S3S4S51411S2S3S4S51512R3R3R3R313S2S3S4S591614S1715R2R2R2R216R617S2S3S4S51818R1R1R1R1static intaction1913=/*0*/2,-1,-1,3,4,-1,-1,5,-1,-1,10,1,-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
11、,-1,-1,/*4*/2,-1,-1,3,4,-1,-1,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,-
12、1,-1,14,-1,/*11*/2,-1,-1,3,4,-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,-
13、1,-1,5,-1,-1,-1,18,-1,/*18*/-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1;其中,前 9 列为 action 值,后 2 列为 goto 值;016 表示 17 个移进状态( 即 Si);-1表示出错;ACC 表示分析成功;而 100106 对应归约产生式:2. 算术表达式的 LR 分析表 2 设计如下:0) S E1) E E+E2) E E*E3) E (E)4) E i (过程略)ACTIONGOTOI+-*/()#E0S3S211S4S11S5S10ACC2S3S263R4R4R4R4R4R44S3S275S3S286S
14、4S11S5S10S97R1R1S5S10R1R18R2R2R2R2R2R29R3R3R3R3R3R310S3S21211S3S21312R6R6R6R6R6R613R5R5S5S10R5R5static 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*/3,-1,-1,-1,-1,2,-1,
15、-1,8,/*6*/-1,4,11,5,10,-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*/105,105,105,5,10,105,105,105,-1;3.布尔表达式的
16、 SLR 分析表3 设计如下:(过程略)1) S B2) B i3) B i rop i4) B ( B )5) B NOT B6) A B AND7) B AB8) O B OR9) B OBACTIONGOTOiRop()NOTANDOR#BAO0S1S4S513781S2R1R1R1R12S33R2R2R2R24S1S4S511785S1S4S56786R4S9S10R47S1S4S514788S1S4S515789R5R5R510R7R7R711S12S9S1012R3R3R3R313S9S10ACC14R6S9S10R615R8S9S10R8static int action2161
17、1=/*0*/1,-1,4,-1,5,-1,-1,-1,13,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,-
18、1,4,-1,5,-1,-1,-1,15,7,8,/*9*/105,-1,105,-1,105,-1,-1,105,-1,-1,-1,/*10*/107,-1,107,-1,107,-1,-1,107,-1,-1,-1,/*11*/-1,-1,-1,12,-1,9,10,-1,-1,-1,-1,/*12*/-1,103,-1,103,-1,103,103,103,-1,-1,-1,/*13*/-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1,/*14*/-1,-1,-1,106,-1,9,10,106,-1,-1,-1,/*15*/-1,-1,-1,108,-1,9,10,10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Pascal 语言 编译器 设计 实现
限制150内