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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

张瑞编译原理实验报告Word下载.docx

1、是指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护儿使用的一组软件,简称SDE。它有软件工具和环境继承机制构成,前者用以支持软件开发的相关过程、活动和人物,后者为工具集成和软件的开发、维护及管理提供统一的支持。1.支持开发完备模型 2.灵活控制二、基本理论阐述、当前理论或实践应用现状编译原理理论和实践并重,叙述严谨、简明,富有启发性,且内容深入浅出,便于自学。编译原理不仅可以作为高等院校相关专业的教材,也可以作为计算机专业人员的参考用书。编译器的构造工具是根据用户输入的语言的文法,编译器的构造工具可以生成程序来处理以用户输入的文法书写的文本。随着计算机应用范围的扩大,

2、在软件自动生成,文档处理,特定专业的语言等领域,编译器的构造工具这一技术显得越来越重要.在分析语法成分时比较方便直观,更便于操作。运行程序的同时不断修正改进程序,直至的到最优源程序。3、小型编译器系统架构它是一个编译器的架构.通俗的来说,它实现了一个库,在这个库上,可以很容易的实现不同的编译相关的程序,当然,编译器自然是其中最重要的一个. 当然其他像编译时间的代码分析也是很容易实现的。构造识别符号串的自动机、词法分析程序的构造、语法分析程序的构造、中间语言的生成程序、编译程序的代码生成。四、小型编译器主要功能模块与实现(1)功能介绍 1.词法分析功能:对代码进行分词操作,分出以下5类单词: 关

3、键字、标识符、常量、运算符、分隔符。 2.算术表达式、关系表达式和逻辑表达式的分析与化简:提取代码中的所有算术表达式,可用LL(1)分析或算符优先分析算术表达式。关系表达式和逻辑表达式也可用算术表达式的程序进行分析。分析成功后进行化简操作,方便语法分析程序分析。 3.LL(1)语法分析:自己写的简单C语言的方法,支持赋值语句、判断语句、循环语句,用自顶向下的分析方法,对化简之后的单词流进行分析。 4.四元式生成与后缀式。对词法分析分词后的单词流生成中间代码。其中算术表达式先生成后缀式。然后再根据后缀式的结果生成四元式。对多条逻辑表达式采用先计算再跳转的操作。对if语句判断跳转,if中的表达式支

4、持多条逻辑表达式,但不支持嵌套。while和if相同。 5.汇编语言生成:根据四元式生成汇编语言。(2)相关理论1.词法分析(英语:lexicalanalysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器,也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。2.

5、LL(1)文法:对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的产生式A|满足下列条件:(1)如果、均不能推导出,则FIRST()FIRST()=。(2)和至多有一个能推导出。(3)如果*,则FOLLOW(A) 将满足上述条件的文法称为LL(1)文法。第一个L代表从左向右扫描输入符号串,第二个L代表产生最左推导,1代表在分析过程中执行每一步推导都要向前查看一个输入符号当前正在处理的输入符号。LL(1)文法既不是二义性的,也不含左递归,对LL(1)文法的所有句子均可进行确定的自顶向下语法分析。并不是所有的语言都可以用LL(1)文法来描述,而且不存在判定某种语言

6、是否是LL(1)文法的算法。也就是说,确定的自顶向下分析只能实现一部分上下文无关语言的分析,这就是LL(1)文法所产生的语言。另外,在上述LL(1)文法的条件中,要求:FIRST(1),FIRST(2),FIRST(n)中至多有一个成立。3.语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语法分析程序可以用YACC等工具自动生成。4.后缀式:即逆波兰式。逆波兰式是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方

7、法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。对于表达式x:=(a+b)*(c+d),其后缀式为xab+cd+*:=。原表达式:a*(b*(c+de)-f)#*#为表达式结束符号*后缀式:abcde+*f-*#5.四元式:四元式是一种更接近目标代码的中间代码形式。由于这种形式的中间代码便于优化处理,因此,在目前许多编译程序中得到了广泛的应用。四元式实际上是一种“三地址语句”的等价表示。它的一般形式为:(op,arg1,arg2,result)其中,op为一个二元

8、(也可是一元或零元)运算符;arg1,arg2分别为它的两个运算(或操作)对象,它们可以是变量、常数或系统定义的临时变量名;运算的结果将放入result中。四元式还可写为类似于PASCAL语言赋值语句的形式:result=arg1oparg2每个四元式只能有一个运算符,所以,一个复杂的表达式须由多个四元式构成的序列来表示。例如,表达式A+B*C可写为序列T1=B*C,T2=A+T1其中,T1,T2是编译系统所产生的临时变量名。当op为一元、零元运算符(如无条件转移)时,arg2甚至arg1应缺省,即result=oparg1或;对应的一般形式为:(op,arg1,arg2,result).(3

9、)算法描述 1.词法分析器1. Design the regular grammar.2. Design the regular expression.3. Construct the DFA.4. Write the program.数据结构typedef struct int type; char tokensize;symbol;Char*keywordskeywordsnum = auto,breakcasecharconstcontinuedefaultdo, doubleelseenumexternfloatforgotoifintlongregisterreturnshortsi

10、gnedsizeofstaticstructswitchtypedef, printfunionunsignedvoidvolatilewhilemainincludeusingnamespacestdboolcincoutiostreamendl;char *operatorsoperatorsnum = +-*+-%char *jiefujiefunum = ;.()|char *luojiluojinum = =!&|char *teshuteshunum = #$char *zhushizhushinum = char *str8 = 关键字操作符界符逻辑运算符特殊符注释符常量标识符*

11、通过读文件的形式一个字符一个字符读入进行分析*下面是词法分析的主要函数void lex(char *filename) int error = 0; int flag = 0; char ch; fp.open(filename); int linenum = 1; int i,j; i = 0; int x = 0; ch = fp.get(); while(!fp.eof() if(ch = | ch = t x = 0; ch = fp.get(); else if(ch = n linenum+; else if(isalpha(ch) = 1) tablei.tokenx = ch; if(isalpha(ch) = 0 & isdigit(ch) = 0 & ch != _ tablei.token+x = 0 i+; flag = 0; x = 0; else if(isdigit(ch) = 1 | isalpha(ch) = 1 | ch = x+; else if(isdigit(ch) = 1) if(isdigit(ch) = 1) else if(ch = . & flag = 0) tablei.token+x = ch; flag = 1; ch = fp.get();

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

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