资源描述:
《河北工业大学编译原理实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、编译原理实验报告组员:韦廷廷(112455)、熊敏(112456)、马昊(113042)任课老师:吴清一、任务概述本次实验我们要完成的任务主要是实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法。我们组的分工并不是词法分析、语法分析、语义分析每人负责一个,而是先确定每种分析按照哪一种方法实现,然后每个人写出自己的想法,按照自己的想法实验,最后总结到一起,有问题大家一起讨论,共同商量解决的办法。二、系统设计实验采用的实现方法和依据:语言中的各类单词符号及其分类码表单词符号类别编码类别码的助记符单词值begin1BEGINend2EN
2、Dif3IFthen4THENelse5ELSE标识符6ID字母打头的字母数字串无符号常数7UCON机内二进制表示<8LT<=9LE=10EQ<>11NE>12GT>=13GE:=14IS+15PL-16MI*17MU/18DI实验采用的实现方法和依据:文法:E→T
3、E+T
4、E-TT→F
5、T*F
6、T/FF→i
7、(E)SLR(1)分析表状态ACTIONGOTO()+-*/i#ETF0S4S51231S6S7Acc2R3R3R3S8S9R33R6R6R6R6R6R64S4S510235R8R8R8R8R8R86S4S51137S4S51238S4S5139
8、S4S51410S15S6S711R1R1R1S8S9R112R2R2R2S8S9R213R4R4R4R4R4R414R5R5R5R5R5R515R7R7R7R7R7R7三、系统实现(包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等)(1)各.h和.c文件说明Cifa.cpp的功能:字符串扫描识别。Table.cpp的功能:存放SLR分析法需要用到的ACTION和GOTO表。Yufa.cpp的功能:引用Cifa.cpp、Table.cpp两个文件进行语法、语义的分析。(2)函数功能说明词法
9、分析部分函数说明:intlookup(char*token)//比较是否是关键字intGetChar(charch)//每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。intHandleError(void)//报错函数intEXCUTE(intstate,intsymbol)//状态转换intlookup(char*token)//比较是否是关键字voidout(inta,char*token)//输出函数voidscanner_example(FILE*fp)//词法分析语法、语义部分函数功能说明
10、:voidREPORT_ERROR()//报错函数voidAccept()//语法成功接受intINDEX(chara)//获取当前字符串对应的索引voidyuyi(intn)//语义子程序voidINPUT(inta)//语法分析程序(2)数据结构、各种表格、变量等的说明Cifa.cpp中:char*KeyWordTable[MAX_KEY_NUMBER]={"begin","end","if","then","else",KEY_WORD_END};//数组指针关键字intw,n,p,e,d;//w尾数累加器,n小数位数计数器,p指数累加器,e指数
11、符号标记,intClass;//标识单词类型Table.cpp#defineMAXROW16//行数#defineMAXCOL11//列数intTable[MAXROW][MAXCOL]Yufa.cpp中#defineNUMBER9//表达式的个数intState[MAXState];//状态栈intCURRENTSTATE=0;//标识当前状态intLENGTH[NUMBER]={1,3,3,1,3,3,1,3,1};//表达式右边的长度intYes=0;//判断是否结束inttag=0;//判断是否需要调用词法程序四、系统工作过程及运行说明(使用操
12、作指南)程序使用:在工程里创建一个b.txt文件以识别算数运算表达式五、源程序清单(要求有详细注释)和实例程序运行结果源程序清单:Cifa.cpp#include#include#include#include#include#defineDIGIT1#definePOINT2#defineOTHER3#definePOWER4#defineID6#defineUCON7#defineLT8#defineLE9#defineEQ10#defineNE11#def
13、ineGT12#defineGE13#defineIS14#definePL15//+#def