ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:382.56KB ,
资源ID:29039025      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29039025.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简单编译器编译原理课设中版.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

简单编译器编译原理课设中版.docx

1、简单编译器编译原理课设中版编译原理课程设计简单编译器学 院(系):电子信息与电气工程学部 学 生 姓 名:李梦珂 学 号:6 班 级:电计1101 同 组 人 :宫丽迪 电计1101 6陈笛 电计1101 6大连理工大学Dalian University of Technology1 词法分析(李梦珂 6 负责) 实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的明白得。 实验要求设计、编制并调试一个词法分析程序,三人一组。待分析的简单的词法(1)关键字: int if then else while do read write所有的关键字都是小写。(2)运算符和界符: := =

2、+ - + - * / = = ; ( ) #(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式概念:ID = letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和换行符组成。空格一样用来分隔ID、SUM、运算符、界符和关键字,词法分析时期通常被忽略。 各类单词符号对应的类别码:表 各类单词符号对应的类别码单词符号种别码 单词符号种别码int1+17If2-18Then3:=19else420while5!=21do623write8=24lettet(letter|digit)*10=25dight dight*11;

3、26=12(27+13)28-1430*15!31/16:32 ,3335 36 词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组(syn,token或sum)组成的序列。其中:syn为单词类别码; token为寄存的单词自身字符串; sum为整型常数。例如:对源程序输入如下: Int x,y; X:=2*y; If(x5) Then x:=2*x+2/3;#后经词法分析输出如下序列:( 35 (int 1)(x 10)(, 33)(y 10) (;26)(x 10) 词法分析程序的算法思想:算法的大体任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其大体思想是依照扫描

4、到单词符号的第一个字符的种类,拼出相应的单词符号。 主程序示用意:主程序示用意如下图。其中初始包括以下两个方面: 关键字表的初值。关键字作为特殊标识符处置,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,那么该单词为关键字,不然为一样标识符。关键字表为一个字符串数组,其描述如下:Char *rwtab6 = “int”, “if”, “then”, “else”,“while”, “do”, “read”,”write”; 图(2)程序中需要用到的要紧变量为syn,token和sum 扫描子程序的算法思想:第一设置3个变量:token用来寄

5、存组成单词符号的字符串;sum用来整型单词;syn用来寄存单词符号的类别码。扫描子程序要紧部份流程如下图。 图 词法分析程序的C语言程序源代码: 结果分析:输入如下: Int x,y; X:=2*y; If(x5) Then x:=2*x+2/3;#后经词法分析输出如下序列:( 35 (int 1)(x 10)(, 33)(y 10) (;26)(x 10) 如下图: 图 总结:词法分析的大体任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其大体思想是依照扫描到单词符号的第一个字符的种类,拼出相应的单词符号。通过本实验的完成,加倍加深了对词法分析原理的明白得。 2 语法分析 实验目的

6、编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。实验要求利用C语言编制递归下降分析程序,并对简单语言进行语法分析。 待分析的简单语言的语法用扩充的BNF表示如下:=;:=;:=:=ID:=:=+ | -:=* | /:=ID | NUM | () 实验算法结构输入单词串,以“#”终止,若是是文法正确的句子,那么输出成功信息,打印“success”,不然输出“error”。例如: 输入 int a,x,b; a:=9; x:=2*3; b:=a+x 输出 success! 语法分析程序的算法思想(1)主程序示用意如下图。 图 语法分析主程序示用意(2)递归下降分

7、析程序示用意如下图。 图 递归下降分析程序示用意(3)语句串分析进程示用意如下图。图2-3 语句串分析示用意(4)statement语句分析程序流程如图、所示。 图 statement语句分析函数示用意 图 expression表达式分析函数示用意图 term分析函数示用意 图 factor分析进程示用意 结果分析:输入 后输出success! 如下图:图输入 后输出 error 如下图:图 总结:通过本次实验,了解了语法分析的运行进程,主程序大致流程为:“置初值”挪用scaner函数读下一个单词符号挪用IrParse终止。递归下降分析的大致流程为:“先判定是不是有声明”不是那么“犯错处置”,

8、假设是那么“挪用scaner函数”挪用语句串分析函数“判定是不是为end”不是那么“犯错处置”,假设是那么挪用scaner函数“判定syn=0&kk=0是不是成立”成立那么说明分析成功打印出来。不成立那么“犯错处置”。3 语义分析程序 实验目的:通过上机实习,加深对语法制导翻译原理的明白得,把握将语法分析所识别的语法成份变换为中间代码的语义翻译方式。 实验要求:采纳递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。 算法思想: 程序结构图(1)主程序示用意如下图。 图 语法分析主程序示用意(2)递归下降分析程序示用意如下图。(3)语句串分析进程示用意如下图。 图递归下

9、降分析程序示用意 图 语句串分析示用意(4)statement语句分析程序流程如图、所示。 图 statement语句分析函数示用意 图 expression表达式分析函数示用意图 term分析函数示用意图2-7 factor分析进程示用意 设置语义进程(1)emit(char *result,char *ag1,char *op,char *ag2)该函数的功能是生成一个三地址语句送到四元式表中。四元式表的结构如下:struct char result8;char ag18;char op8;char ag28;quad20; (2) char *newtemp()该函数回送一个新的临时变量

10、名,临时变量名产生的顺序为T1,T2,char *newtemp(void) char *p; char m8; p=(char *)malloc(8); k+; itoa(k,m,10); strcpy(p+1,m); p0=t; return(p); 函数lrparser 在原先语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中咱们只对表达式、赋值语句进行翻译。 简单赋值语句的翻译文法SID n ifD n p = E x 若ID概念,则emit x (n=x) ;不然错误E x T q + T r x=newtemp ;emit x qr (x=q + r)T x F

11、 q * F r x=newtemp ;emit x qr (x=q * r)F x ID n ifD n p ;x=n F x ( E q ) x=qF x NUM lexval ifD lexval p ; x= lexval ifD进程表示在符号表中查找标识符,假设不存在,那么报告“变量未概念而利用”的错误,假设存在,返回标识符在符号表中的入口地址p。在执行语义规那么,输出四元式时, 参数可用变量名、临时变量名和整常数代替。 newtemp()函数用来产生临时变量, 如产生临时变量t1 : N=N+1; “t”| ITOS(N) ;emit()函数产生四元式代码: 例如用输出函数输出:t

12、1=q+r 例如:翻译x=sum*(b+c); 四元式是: t1=b+c t2=sum*t1 x=t2;在下面的递归下降语法制导翻译程序中,sym和symval 读取词法分析结果中的单词二元式. 如:关于单词二元式 (ID sum), 则ID存入syn中,sum存入scaner中。 结果分析 总结:通过本次实验,了解了语法分析的运行进程,主程序大致流程为:声明-“置初值”挪用scaner函数读下一个单词符号挪用IrParse四元式输出-终止。递归下降分析的大致流程为:“先判定是不是有声明”不是那么“犯错处置”,假设是那么“挪用scaner函数”挪用语句串分析函数“判定是不是为”不是那么“犯错处置”,假设是那么挪用scaner函数“判定syn=0&kk=0是不是成立”成立那么说明分析成功打印出来。不成立那么“犯错处置”。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1