河北工业大学编译原理实验报告

上传人:鲁** 文档编号:511731435 上传时间:2022-11-13 格式:DOC 页数:13 大小:136KB
返回 下载 相关 举报
河北工业大学编译原理实验报告_第1页
第1页 / 共13页
河北工业大学编译原理实验报告_第2页
第2页 / 共13页
河北工业大学编译原理实验报告_第3页
第3页 / 共13页
河北工业大学编译原理实验报告_第4页
第4页 / 共13页
河北工业大学编译原理实验报告_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《河北工业大学编译原理实验报告》由会员分享,可在线阅读,更多相关《河北工业大学编译原理实验报告(13页珍藏版)》请在金锄头文库上搜索。

1、.编译原理实验报告组员: 韦廷廷、熊敏、马昊任课老师:吴 清一、 任务概述 本次实验我们要完成的任务主要是实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法。我们组的分工并不是词法分析、语法分析、语义分析每人负责一个,而是先确定每种分析按照哪一种方法实现,然后每个人写出自己的想法,按照自己的想法实验,最后总结到一起,有问题大家一起讨论,共同商量解决的办法。二、系统设计实验采用的实现方法和依据: 语言中的各类单词符号及其分类码表单词符号类别编码类别码的助记符单词值begin1BEGINend2ENDif3IFthen4THENelse5ELSE标识符6ID字母打头的字母数字

2、串无符号常数7UCON机内二进制表示8LT=9LE=10EQ11NE12GT=13GE:=14IS+15PL-16MI*17MU/18DI实验采用的实现方法和依据:文法:E T | E+T | E-T T F | T*F | T/F F i | SLR分析表状态ACTIONGOTO+-*/i#ETF0S4S51231S6S7Acc2R3R3R3S8S9R33R6R6R6R6R6R64S4S510235R8R8R8R8R8R86S4S51137S4S51238S4S5139S4S51410S15S6S711R1R1R1S8S9R112R2R2R2S8S9R213R4R4R4R4R4R414R5R

3、5R5R5R5R515R7R7R7R7R7R7三、系统实现包括必要的框图,各.h和.c文件说明,所有函数功能的说明,数据结构、各种表格、变量等的说明,以及函数调用关系图等1各.h和.c文件说明Cifa.cpp的功能:字符串扫描识别。Table.cpp的功能:存放SLR分析法需要用到的ACTION和GOTO表。Yufa.cpp的功能:引用Cifa.cpp、Table.cpp两个文件进行语法、语义的分析。2函数功能说明词法分析部分函数说明:int lookup /比较是否是关键字 int GetChar /每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字

4、符位置。 int HandleError /报错函数 int EXCUTE /状态转换 int lookup /比较是否是关键字void out/输出函数 void scanner_example /词法分析语法、语义部分函数功能说明:void REPORT_ERROR/报错函数void Accept/语法成功接受int INDEX/获取当前字符串对应的索引void yuyi/语义子程序void INPUT/语法分析程序 数据结构、各种表格、变量等的说明Cifa.cpp中:char *KeyWordTableMAX_KEY_NUMBER=begin,end, if, then, else, K

5、EY_WORD_END;/数组指针关键字int w,n,p,e,d;/w尾数累加器,n小数位数计数器,p指数累加器,e指数符号标记,int Class;/标识单词类型Table.cpp#define MAXROW 16 /行数#define MAXCOL 11 /列数int TableMAXROWMAXCOLYufa.cpp中#define NUMBER 9/表达式的个数int StateMAXState;/状态栈int CURRENTSTATE=0;/标识当前状态int LENGTHNUMBER=1,3,3,1,3,3,1,3,1;/表达式右边的长度int Yes=0;/判断是否结束int

6、tag=0;/判断是否需要调用词法程序四、系统工作过程及运行说明使用操作指南程序使用:在工程里创建一个b.txt文件以识别算数运算表达式五、源程序清单要求有详细注释和实例程序运行结果源程序清单:Cifa.cpp / .#include#include#include#include#include#define DIGIT 1#define POINT 2#define OTHER 3#define POWER 4# define ID 6# define UCON 7# define LT 8# define LE 9# define EQ 10# define NE 11# define

7、GT 12# define GE 13# define IS 14# define PL 15 /+# define MI 16 /-# define MU 17# define DI 18#define zuokuohao 19#define youkuohao 20#define jin 21#define ClassOther 200#define EndState -1#define MAX_KEY_NUMBER 20 /*关键字的数量*/#define KEY_WORD_END END /*关键字结束标记*/char *KeyWordTableMAX_KEY_NUMBER=begin

8、,end, if, then, else, KEY_WORD_END;/数组指针char TOKEN20;char ch;int w,n,p,e,d;/w尾数累加器,n小数位数计数器,p指数累加器,e指数符号标记,int Class;/标识单词类型int ICON;double FCON;static int CurrentState=0;int result;int start=0;/指示程序的开始int end=0;/指示程序的结束int GetChar ;int EXCUTE ;int HandleOtherWord return ClassOther; int HandleError

9、printf ; return 0;int lookup /比较是否是关键字 int n=0; while strcmp /*strcmp比较两串是否相同,若相同返回0*/ if !strcmp /*比较token所指向的关键字和保留字表中哪个关键字相符*/ return n+1; /*根据单词分类码表I,设置正确的关键字类别码,并返回此类别码的值*/ break; n+; return 0; /*单词不是关键字,而是标识符*/int GetChar char c=a; ifisdigit d=c-0; /字符c与字符0的ascii码差值,返回类型为一个整数 return DIGIT; if

10、return POINT; if return POWER; if return PL; if return MU; return OTHER;void report_error printf;void out1/输出函数 switch case 1:printfn;break; case 2:printfn;break; case 3:printfn;break; case 4:printfn;break; case 5:printfn;break; case 6: printfn,token;break; case 8:printfn,token;break; case 9:printfn,token;break; case 10:printfn,token;break; case 11:printfn,token;break; case 12:printfn,token;break; case 13:printfn,token;break; case 14:printfn,token;break; case 15:printfn,token;break; case 16:printfn,token;break; case 17:printfn,token;break; case 18:printf

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号