编译程序设计原理课程设计报告.doc
文本预览下载声明
编译程序设计原理课程设计报告
编译程序设计原理课程设计语法分析程序:这是一个语法分析程序,通过对输入到缓冲区的符号进行分析,建立相应的语法树,并输出相应的语法树。要求能检查表达式是否正确,如果正确得出正确结果。使用了编译原理中的词法分析、算符优先分析等。本程序实现语法分析程序的思…
《海燕》课时作业 一、基础知识及运用1.选词填空呻吟 叫喊 号叫 吼叫 呼叫(1)就在这鸟儿勇敢的 叫喊 声里,乌云听出了欢乐。(2)海鸭也在 呻吟 着, -------它们这些海鸭呀,享受不了生活的战斗的欢乐;轰隆隆的雷声就把它们吓坏了。(3)它…
只因偷了价值七元的纱布是否需要解除劳动合同案情:张某系一家纺织厂的职工,在工作中偷盗了价值七元的纱布,后被厂方发现,厂方遂根据本厂的一个内部规定做出和其解除的决定,为此,张某认为自己只是偷了价值七元的纱布,情节轻微,自己已在厂里工作10余年了,此次行…
编译程序设计原理课程设计
语法分析程序:
这是一个语法分析程序,通过对输入到缓冲区的符号进行分析,建立相应的语法树,并输出相应的语法树。
要求能检查表达式是否正确,如果正确得出正确结果。使用了编译原理中的词法分析、算符优先分析等。
本程序实现语法分析程序的思想是先判断文本中的表达式是否符合规则,然后根据运算符的优先级,计算,最终返回计算结果。由于计算表达式是字符串,所以必须对字符串进行分析,每次获取一个字符,根据获取的字符来判断相应的操作。
本程序的界面:
对于表达式计算器程序主要通过如下文法实现:
exp-term+term|term-term
term-factor*factor|factor/factor
num-(exp)|number
概要设计:
/*------------出错代码的宏定义--------------*/
#define INVALID_CHAR_TAIL 0 //表达式后跟有非法字符
#define CHAR_AFTER_RIGHT 1 //右括号后连接非法字符
#define LEFT_AFTER_NUM 2 //数字后非法直接连接左括号 #define INVALID_CHAR_IN 3 //表达式中含有非法字符
#define NO_RIGHT 4 //缺少右括号
#define EMPTY_BRACKET 5 //括号内无表达式
#define UNEXPECTED_END 6 //预期外的算术表达式结束
const string ErrCodeStr[]= //表达式出错信息
static char expr[EXP_LEN]; //算术表达式输入字符缓冲区
static int pos; //字符指示器标志:用来保存正在分析的字符的位置
static jmp_buf errjb; //出错跳转缓冲器
int E_AddSub() //产生式“E - T+E | T-E | T”的函数,用来分析加减算术表达式。 int T_MulDiv() //推导式“T - F*T | F/T | F”的函数,用来分析乘除算术表达式。 int F_Number() //产生式“F - i | (E)”的函数,用来分析数字和括号内的表达式 void Error(int ErrCode) //出错处理函数,输入错误代码,可以指出错误位置,出错信息。 数据测试:
程序功能:
1, 能进行整数的四则运算
2,有容错处理
心得体会:
通过编译程序的课程设计,认识到编译原理的程序设计思想和数据结构的程序设计思想是完全不一样的,通过查资料发现,以后工作当中的用处更是很大,举例来说:做一个游戏引擎。既然是引擎,就需要提供抽象的东西给上层使用。这里,引入了脚本系统。 这个脚本系统包括一堆根据实际需求自行设计的指令集,包括基本的输入输出,四则运算,系统功能调用,函数声明,调用等等(其实要是用过lua或者其他游戏脚本)整个结构包括指令集、编译器、虚拟机等部分。这样,引擎提供一些基础服务,比如绘图,计算位置等,脚本就可以非常简单控制游戏。甚至快速构建新游戏,应用了EBNF理论。
附录:详细设计
#in
显示全部