编译技术验指导书.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译技术验指导书

编译技术实验指导书 计算机科学与工程学院 前言 《编译技术》是计算机科学与技术、软件工程等专业的一门理论性较强的专业课,旨在培养大学生的计算机专业素质和基本编译程序设计的能力。通过实验教学,使学生加深对所学知识的理解,掌握编译程序构造原理和实现技术。它的目的和任务是:让学生掌握编译程序的基本让学生了解将高级程序设计语言源程序翻译成计算机能处理的目标代码语言的整个过程,培养学生的能力。 1、遵守实验室的规章制度,爱护教学设备。 2、学生必须按时上机下机。 3、禁止做与实验无关的内容,禁止利用实验学时玩计算机游戏; 4、每次实验前学生应做好预习,实验后按时提交实验报告。 实验报告的要求: 1、明确实验的目的及要求; 2、记录下相应编译阶段的程序设计的思想、程序代码及运行的结果; 3、说明实验中出现的问题和解决过程; 4、写出实验的体会和实验过程中没解决的问题。 由于编者水平有限,书中难免有错,敬请大家批评指正。                    辽宁科技大学计算机学院科学系 2011年2月 目 录 实验一 词法分析器的手工构造… ……………………………….… ….……. ....3 实验二 词法分析器的自动生成… …………………………………. … ……… .10 实验三 递归下降语法分析程序设计………………………………. ………… 18 实验四 LL(1)语法分析程序设计………………………………. ……. .……… 22 实验五 LR语法分析器程序设计 …………………… ….……….. … ……..27 实验六 说明语句的语法制导翻译..…………………………….……. …… .….32 实验七 中间代码生成程序设计.……………………………….……. … …..….35 实验八 微小编译器的设计 ………………………………… .…. …… ………37 实验一 词法分析器的手工构造 实验类型:验证性 实验要求:必修 一、实验目的: 通过本次实验,使学生掌握词法分析的构造原理及实现技术,会编写简单程序设计语言的词法分析器。 二、实验要求: 1、通过词法分析基本原理和基本技术基本原理和基本技术 2、从文件读入源程序,经预处理后进行词法分析,输出为单词串,即由(词法信息,语义信息)所组成的二元组序列;有一定检查词法错误的能力。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 3、上机时间:2学时。 三、实验原理 1、? 词法分析器的功能是输入源程序,输出单词的Token序列。词法分析器的单词符号可表示成的二元式(单词种别码,单词符号的属性值)。本实验中,基本字、符号词采用一词一类的方式,标识符、常数采用的是一类一个类码的方式。 2、? BNF表示 标识符- 字母字母数字串 字母数字串- 字母字母数字串|数字字母数字串|下划线字母数字串|ε 无符号整数- 数字数字串 数字串- 数字数字串 |ε 运算符- + | * | ++ | = 界符- , | ;| ( | ) | # 3、状态转换图 识别标识符的状态转换图 识别实常数和整常数的状态转换图 四、实验内容 请参照给定的C词法分析程序的样例,编写下列给定的源程序的VC++词法分析程序,屏幕显示结果。 begin integer r ; r = r +10 ; end 五、词法分析器的手工构造样例程序 #include iostream.h #include fstream.h #include string.h #include stdlib.h #include conio.h const short WORDLEN=20; struct code_val{ char code; char val[WORDLEN]; }; //预处理函数原型 void pro_process(char *); //扫描函数原型 code_val scanner(char *); //拼接函数原型 void concat(char [],char); //查保留字表函数 char reserve(char []); //主函数 void main() { char buf[4048]={\0};//扫描缓冲区 //预处理 pro_process(buf); //显示buf coutbufendl; //单词识别 ofstream coutf(Lex_r.txt,ios::out); code_val t;//临时变量 do{ t=scanner(buf);//调用一次扫描器获得一个单词二元式 coutt.code\tt.valendl;

文档评论(0)

1444168621 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档