版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、编译原理课程设计,词法分析,语法分析,小型编译器,实验报告编译原理语法分析上机实验读书工程报告黑龙江大学“编译原理课程设计”读书报告学院年级专业学号姓名报告日期成绩计算机科学技术学院2013计算机科学与技术0 2015年7月3日s黑龙江大学计算机科学技术学院e1、开发环境简介 0此次编译原理课程设计的编译器的实现是基于vc+6.0编译环境下实现的。0对于vc+6.0,它是microsoft公司推出的开发win32环境程序,面向对象的可视化集成编程系统。它不仅具有程序框架自动生成、 灵活方便的类管理、代码编写和界面设计集成交互操作、可开发 多种程序等优点。回vc+6.0不仅是一个c+编译器,而且
2、是一个基于windows操 作系统的可视化集成开发环境。visual c+6.0明显缩短程式编辑、编译及连结花费的时间,在大型软件计划上尤其显著。0二、基本理论阐述.当前理论什么是编译程序0语言翻译程序把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。刖2 高级语言程序的处理过程0 3编译过程囹 三、小型编译器系统架构(最重要)01) .w法分析: 0词法分析是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行 扫描和分解,从而识别出一个个单词(也称单词符号或符号)。这 里所谓的单词是指逻辑上紧密相连的一组字符,这些
3、字符具有集 体含义。比如标识符是由字母字符开头,后跟字母、数字字符的 字符序列组成的一种单词。保留字(关键字或基本字)是一种单 词,此外还有算符.界符等等。13 2) 语法分析:0语法分析是编译过程的第二过程。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语;如“程序”、“语句”、“表达式”等。一般这种语法短语,也称语法单位,可表示成语 法树。0词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的0任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字串,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有 字母
4、和数字组合在一起而构成单词标识符。但这种线性扫描则不 能用于识别递归定义的语法成分,比如就不能用此办法去匹配表 达式中的括号。囹目前,已存在许多语法分析的方法。但就产生语法树的方向而 言,可大致把他们分为自底向上和自顶向下两大类。03)中间代码生成:忸在进行了上述的语法分析和语义分析阶段的工作之后,有的编 译程序将源程序变成一种内部表示形式,这种内部表示形式叫做 中间语言或中间代码。所谓“中间代码”是一种结构简单.含义 明确的记号系统可以设计为多种多样的形式,重要的设计原则为 两点:一是容易生成;二是容易将它翻译成目标代码。很多编译 程序采用了一种近似“三地址指令,的“四元式”中间代码,这 种
5、四元式的形式为:(运算符,运算对象1,运算对象2,结果);刖4)目标代码生成:s这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令或汇编指令代码。这是编译的最后阶段,它 的工作与硬件系统结构和指令含义有关,这个阶段的工作很复杂, 涉及到硬件系统功能部件的应用、机器指令的选择、各种数据类 型变量的存储空间分配以及寄存器和后援寄存器的调度等。0此外,本程序不涉及语义分析,代码优化等代码优化阶段。0本次课程设计设计出的小型编译器,适用范围比较小,局限性较高,综合度不算强。语言不是很严谨,有待改进。第一部分:语法分析程序;(1) 功能介绍输入ll (1)文法的字符串,ll (1)
6、程序可以分析其匹配过程。输入一个字符串,算符优先程序可以分析其规约移进的过程。0 (2)相关理论忸语法分析对输入串的处理(进栈与出栈,归约和接受)是独立 于语法分析之外单独的一部分,但是其只能分析有限的输入串, 无法完全任意识别。相关理论0将表达式文法的预测分析表用二维数组储存,然后当分析符号 串依次扫描符号串中的字符,进行匹配输出即可。忸(3)程序流程图(3 ll模拟程序实现流程:篇二:编译原理课程设计c词法扫描器及语法分析器实现s编译原理课程设计报告0课题名称:c 词法扫描器及语法分析器实现忸提交文档学生姓名:提交文档学生学号:刖同组成员名单:指导教师姓名:金军0指导教师评阅成绩:指导教师
7、评阅意见: 0提交报告时间:2014年6月xx日录 2 1课程设计目标32分析与设计132程序结构程序代码实现8代构83.2.1globals.h 8322scan.c103.2.3parser.c173.4util.c 293.5test.cpp .3604测试结果370 4.1.给出标准测试程序的词法和语法分析结果:3704.1.1词法分析结果374.1.2 语法分析结果40 42修改代码后的结果:(来自:www.xiel写论文网:编译原理课程设计,词法分析,语法分析,小型编译器验告)4104.2.1修改41s 5. 本课程设计我的独创工作 436总结43 01课程设计目标忸学生在学习编译
8、原理课程过程中,结合各章节的构造编译 程序的基本理论,要求用c或c+语言描述及上机调试,实现一 个c-minus小编译程序(包括词法分析,语法分析等重要子程 序),使学生将理论与实际应用结合起来,受到软件设计等开发过 程的全面训练,从而提高学生软件开发的能力。0要求: 0 (1)设计词法分析器 0设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。功能包括:0 a.具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计0 一个供词法分析调用的预处理子程序;b.能够拼出语言中的个单词;返回(种别码,属性值)。(2)语法分析0要求用学
9、习过的自底向上或自顶向下的分析方法等,实现对表达式、各种说明语句、控制语句进行语法分析。若语法正确,则 用语法制导翻译法进行语义翻译;生成并打印出语法树;若语法 错误,要求指出出错性质和出错位置(行号)。刖2分析与设计0 2.1程序结构囹 本程序采用c+语言以面向对象的思想编写,程序分为两部分: 词法分析(scanner)和语法分析(parser)。0扫描程序执行词法分析,并将字符序列收集到token中,并将每一行的token打印出来。?0实现方法:scanner:手工实现parser:递归下降?囹系统总图:0程序流程:0在程序中,词法分析获取所有token,并将获取的token存储在 sca
10、nner对象的 0 tokenstring中。然后parser类的语法分析程序就根据 tokenstring中的token进行语法 分析,生成语法树,最后打印 语法树。同时,这也是程序的流程。刖?囹扫描器:c惯用的词法01> 语言的关键字:else if int return void while囹2、专用符号:+* /=!= = ;,()/*/3、其他标记是id和num,通过下列正则表达式定义:id = letter letter* num = digit digit* letter = a|.|z|a|.|zdigit = 0|.|9篇三:编译原理课程设计词法分析器和语法分析器编译原
11、理课程设计报告院系专业年级学号姓名2013年12月 8日刖课程设计一:手工设计c语言的词法分析器0 一、设计内容 忸手工设计c语言的词法分析器,结合状态转换图的原理完成对c 语言源程序的基本单词的分析及提取,并设计相应的数据结构保ii存提取出来的单词。以及对c语言中的保留字的处理策略,实现 一个完整的c语言的词法分析器的编写。0二.设计目的忸通过本实验的设计更具体的理解词法分析器的工作机制。同时 更理解c语言的结构体系。从而更深刻的透析编译原理过程。a三、设计平台0(1) intel(r) core(tm) i3-2310m cpu 2.10ghz 2.10ghz0 (2)内存4g0 2软件环
12、境刖(1) window8 professor0 (2) visual c+6.0 开发软件 囹3、开发语言:c语言。0四、需求分析: 0词法分析程序又称词法分析器或词法扫描器。可以单独为一个程序;也可以作为整个编译程序的一个子程序,当需要一个单词 时,就调用此法分析子程序返回一个单词,这里,作为子程序 囹词法分析器的结构: 刖状态转换图的程序实现0为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:0 1) ch存放最新读进的源程序字符囹2) strtoken存放构成单词符号的字符串s 3)buffer字符缓冲区s 4) struct keytype存放保
13、留字的符号和种别五、概要设计保留字表的设计结构:基本功能状态转换:六.详细设计0 1. getchar 读一个字符到ch中0 2. getbc读一个非空白字符到ch中 0 3. concat把char中字符连接到strtoken之后刖4. letter判断char中字符是否为字母 0 5. digit判断ch中字符是否为数字囹6. reserve用strtoken中的字符串查找保留字表,并返回保留字种别码,若返回0零,则非保留字 13 7. retract把char中字符回送到缓冲区 0源程序:is#include stdio.h m #include stdlib.h 刖 #include
14、conio.h 0 #include string.h 忸 #define n 47 0 char ch='0' /保留字个数存放最新读进的源程序 字符0 字符缓冲区char strtoken20=0; /存放构成单词符号的字符串 char buffer257=0;忸 struct keytype 0 char keyname256;囹 int value;0keyn=$id/o/$int/l/auto/2/break3,case/4/charf constp6pcontinuep7hdefault»8bdo,9*double/10/else,ll/e
15、num/12/extern/13/float/14/ for/15/goto/16/if,17/int/18/long/19/register/20/return/21,short/22/signed/23/sizeof/24/static/25/struct,26,switch,27,typedef,28,union,29,unsigned,30, void/31/volatile32/while/33/=/34/+/35/-36/*37/38/%39/l,40/;/41/(/42/)/43/?,44/clear/45/#/46;刖读一个字符到ch中/*保留字结构*/s int i;子过程*
16、/ void getchar()m if(strlen(buffer)o)刖0 else忸囹void getbc() 读一个非空白字符到ch中囹int i;0 while(strlen(buffer)0i=0; ch=bufferi; for(;i256;i+)bufferi=bufferi+l; if(ch!=''&&ch!='n'&&ch!='0&# 39;) break;囹ch二'0'ch=buffero;
17、 for(i=0;i256;i+) bufferi=bufferi+l;0町0 void concat() 把 ch 连接到 strtoken 之后 ?lchartemp2;s temp0=ch;0 templ='0'0 strcat(strtoken,temp);0 0 bool letter() 判断ch是否为字母s if(ch='a'&&ch二'z'| |ch二'a'&&ch='z&
18、amp;#39;)0 else囹0 bool digit()囹 else121 int reserve() 用strtoken中的字符查找保留字表,并返回保留 字种别码,若返回0,则非保留字int i;0for(i=o;in;i+) 囹pll0 void retract() 把ch中的字符回送到缓冲区0 int i;刖 if (ch!二'0')s 0 ch='0'町0 /*词法分析器*/0 keytype returnword()0 strcpy(strtokenao);0 int c;s keytype tempkey;囹 getbc();囹if(ch='a'&&ch='z' | |ch='a' ;&&ch二'
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一年级上册数学导学案-3.1 1~5的认识∣人教新课标
- 二年级上册数学导学案-3.2 儿童乐园 北师大版
- 《看日历》(学案)2023-2024学年数学三年级上册
- 疼痛的分级及治疗
- 检查员检讨书
- 自身免疫脑炎的治疗
- 气压治疗注意事项
- 糖尿病与炎症
- 湖北商贸学院《大学英语视听说4》2022-2023学年第一学期期末试卷
- 湖北商贸学院《成本计算与分析实训》2022-2023学年第一学期期末试卷
- 第一季度护理不良事件分析、讨论记录
- 职业生涯规划大赛公务员
- 《人文地理学》课件
- 《农机事故知识》课件
- 《肌力分级及护理》课件
- 酒店客户服务:如何处理紧急情况和应对危机培训课件
- 老年人冬季预防呼吸道疾病
- 2023银行业经营战略报告-存量时代的用户洞察与增长机会-2023.11
- 推动医生专业素养的继续教育计划培训课件
- 景区马场应急预案
- 健身器材采购项目 投标方案(技术标)
评论
0/150
提交评论