- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
张瑞编译原理实验报告.doc
黑龙江大学
“编译原理课程设计”读书报告
学院 软件学院 年级 2012级 专业 软件工程 学号 姓名 张瑞 报告日期 2014年6月28日 成绩
黑龙江大学计算机科学技术学院
黑龙江大学软件学院
概述?
“编译原理”课程是计算机专业中一门重要的专业理论课,是一门理论性和实践性都很强的课程。为配合《编译原理》课程的教学,培养学生的实际工作能力,加深对课堂教学内容的理解,通过设计一个小型编译器,更深刻地领会其基本概念、基本工作原理和实现方法,从而具有初步开发系统软件和应用软件的实际能力,特开设此课程设计。通过设计、编制、调试一个对PL/0语言进行词法、语法及中间代码生成的程序,加深对编译原理的理解。掌握对单词序列的词法检查和分析、掌握计算机语言的语法分析的过程。熟练运用一种分析方法(自上而下或自下而上的方法)分析一个给定的文法以及通过思考以及动手制作分析器的过程来锻炼自己的编程能力和逻辑思维能力体会计算机编译器的奥妙之处。?
一、开发环境简介
Microsoft visual C++ 6.0.
开发环境:是指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护儿使用的一组软件,简称SDE。它有软件工具和环境继承机制构成,前者用以支持软件开发的相关过程、活动和人物,后者为工具集成和软件的开发、维护及管理提供统一的支持。
1.支持开发完备模型 .灵活控制
二、基本理论阐述、当前理论或实践应用现状
《编译原理》理论和实践并重,叙述严谨、简明,富有启发性,且内容深入浅出,便于自学。《编译原理》不仅可以作为高等院校相关专业的教材,也可以作为计算机专业人员的参考用书。
编译器的构造工具是根据用户输入的语言的文法,编译器的构造工具可以生成程序来处理以用户输入的文法书写的文本。随着计算机应用范围的扩大,在软件自动生成,文档处理,特定专业的语言等领域,编译器的构造工具这一技术显得越来越重要.
在分析语法成分时比较方便直观,更便于操作。运行程序的同时不断修正改进程序,直至的到最优源程序。
它是一个编译器的架构.通俗的来说,它实现了一个库,在这个库上,可以很容易的实现不同的编译相关的程序,当然,编译器自然是其中最重要的一个. 当然其他像编译时间的代码分析也是很容易实现的。构造识别符号串的自动机、词法分析程序的构造、语法分析程序的构造、中间语言的生成程序、编译程序的代码生成program.
数据结构
typedef struct
{
int type;
char token[size];
}symbol;
Char*keywords[keywordsnum] = {auto,break,case,char,const,continue,default,do,
double,else,enum,extern,float,for,goto,if,int,long,register,return,
short,signed,sizeof,static,struct,switch,typedef, printf,union,unsigned,
void,volatile,while,main,include,using,namespace,std,bool,cin,cout,iostream,endl};
char *operators[operatorsnum] = {+,-,*,/,++,--,%};
char *jiefu[jiefunum] = {,,;,.,(,),{,},[,],|};
char *luoji[luojinum] = {,,=,=,=,==,!=,,||,!};
char *teshu[teshunum] = {@,#,$,,^,~,,};
char *zhushi[zhushinum] = {//,/*,*/};
char *str[8] = {关键字,操作符,界符,逻辑运算符,特殊符,注释符,常量,标识符};
*通过读文件的形式一个字符一个字符读入进行分析
*下面是词法分析的主要函数
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();
}
els
文档评论(0)