文档介绍:语法分析源代硒分析扳吿学圭:昊艺萍、陈璐、崔旻、刘超群学号:095 、094、101、103时间:2014年06戸目录一、 概述 1二、 词法分析设计与实现 11、 相关枚举类型的定义 12、 函数 2三、 语法、语义分析设计与实现 31、 相关数据结构定义 32、 函数 3四、 中间代码 61、 相关数据结构定义 62、 相关枚举类型的定义 63、 函数 7一、概述编译原理是在介绍编译程序构造的一般原理和基木方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、屮间代码生成、存储管理、代码优化和目标代码生成。现在计算机系统的性能不仅仅取决于它的原始速度,还取决于编译器是否能生成充分利用其特征的代码。在现代计算机体系结构的研究屮,在处理器的设计阶段就开发编译器,并将编译生成的代码在模拟器上运行,以评价拟采用体系结构的特征。编译器技术影响计算机体系结构设计的一个著名例了是精简指令集计算机(RISC)的发明。二、词法分析1、相关枚举类型定义SymType的定义〃记号类型enumSymType\OR,〃或AND,〃与RELOP,〃关系运算符ADDOP,〃加减MULOP,〃乘除NOT,〃非LP, 〃左括号RP,ID,NUM,ASSIGN,LB,MA,SEMICOLON,UNDEFINED,INT,IF,ELSE,WHILE,RETURN,PRINTF,SCANF,〃右括号〃标志符〃数〃赋值〃左大括号〃右大括号〃逗号〃分号//未定义//int//if//else//while//return//printf//scanf)//AddOp>MuIOp>RelType的定义次枚举类粮确定了加减乘除运算和关系运算符的符号enumAddOp{ADD,SUB〃加法〃减达enumMulOp{〃乘法〃除法〃取余MUL,DIV,MOD,};〃关系运算符类型enumRelType{GT,GE,EQ,LT,LE,NE,NR〃大于〃大于等于〃等于〃小于〃小于等于//不等于!=>>=<<=〃没有关系用于优先关系表);2、函数用char*types[]har*keywords[KeyWordsCount](关键字)、staticintkeyType[KeyWordsCount](关键字对应类别)來申明输入的字符串中词语的特定意义,即词法。根据一下函数来函数作用staticintisDigit(charch);判断现在的token是否为数值staticintisLetter(charch)判断现在的token是否为字母staticintgctKeyWord(char*str);获取现有的token的关键字voidgetTokenO;取得当前的token进行判断识别词义。组成了词法分析的功能。三、语法、语义分析设计与实现1、相关数据结构的定义(1)//表达式(采用C的风格,非0为真,0为假Jlypedefstruct{inttmclist;intfalselist;intaddress;〃真出口链〃假出口链〃存放表达式值的地址或常量的值〃若为负数,则存放全局变就的地址//若为止数,则为局部变if的相对地址boolisTcmp;(ExprNode;〃是否为临时变量(2)SymbolEntry的定义〃符号表表项typcdcfstruct{inttype; 〃类型FUN或VARintaddress; //地址全局为非正局部为正charlexeme|MaxIdLen+l]; 〃词索,变鈕名或•函数名intparamCount; 〃函数的参数个数}SymbolEntry;SymbolTable的定义该数据结构的作用是用来记录已存在的变量,关联到相关的存储位置,还有防上重名structSymbolTable{SymbolEntry*entries;〃各表项intindex; 〃符号表当前表尾的下标,表'11第项不用I;这里采用的是四元式形式的屮间代码。另外还需要实现i个虚拟机来解释执行编译后的屮间代码。语法定义并未采用文法的形式,而是采用语法图的直观形式,语法图和文法相比具有更易于理解的优点。这里是用采用白顶向下的递归下降分析方法⑺,它也是基于语法图进行分析的。下图由椭I员1和闘形代表的其实是语法图对应文法的终结符,矩形方框代表的是相应文法的非终结符。下图规定了合法的程序的“程序体”应具有什么样的语法形式,此处“稈序体”的概念显然是语法图对应文法的开始符号。下图很岚观地给出了语言是由函数的定义和全局变量的声明所构成。全局变量可以只声明而不进行初始化,也可在声明的时侯进行初始化,还可以同时声明多个全局变量。全局变量与函数的声明可以交替进行。通过以下函数实现statement的语法函数作用staticvoidinputValue(