编译原理实验报告

上传人:大米 文档编号:497709909 上传时间:2022-12-02 格式:DOCX 页数:19 大小:79.14KB
返回 下载 相关 举报
编译原理实验报告_第1页
第1页 / 共19页
编译原理实验报告_第2页
第2页 / 共19页
编译原理实验报告_第3页
第3页 / 共19页
编译原理实验报告_第4页
第4页 / 共19页
编译原理实验报告_第5页
第5页 / 共19页
点击查看更多>>
资源描述

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

1、武汉科技大学计算机科学与技术学院编译方法实验报告 姓名 : 尹 绮 莉 班级: 计 算 机1003 指导老师:邱 谊 敏实验一 词法分析器设计 2012-4-17【实验目的】1熟悉词法分析的基本原理,词法分析的过程以及词法分析中要注意的问题。2复习高级语言,进一步加强用高级语言来解决实际问题的能力。3通过完成词法分析程序,了解词法分析的过程。【实验内容】用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字,运算符,标识符,常数以及界符)输出。启动调用Init初始化从文件中读取一个非空白字符ch文

2、件是否为空 N判断chCh为标识符?Ch为关键字? N Y YCh为数字? Y将值传入相应组中 Default 结束/对关键字等实现初始化void init() int i;for(i=0;i=255;i+)ssymi=nul;ssym+=plus;ssym-=minus;ssym*=times;ssym/=slash;ssym(=lparen;ssym)=rparen;ssym=eql;ssym,=comma;ssym.=period;ssym#=neq;ssym;=semicolon;strcpy(&(word00),begin);strcpy(&(word10),call);strcpy

3、(&(word20),const);strcpy(&(word30),do);strcpy(&(word40),end);strcpy(&(word50),if);strcpy(&(word60),odd);strcpy(&(word70),procedure);strcpy(&(word80),read);strcpy(&(word90),program);strcpy(&(word100),var);strcpy(&(word110),while);strcpy(&(word120),write);strcpy(&(word130),then);wsym0=beginsym;wsym1=c

4、allsym;wsym2=constsym;wsym3=dosym;wsym4=endsym;wsym5=ifsym;wsym6=oddsym;wsym7=procsym;wsym8=readsym;wsym9=programsym;wsym10=varsym;wsym11=whilesym;wsym12=writesym;wsym13=thensym;/读取源文件并判断单词类别int Key(char *word) for(int i=0;i num;i+) if(!strcmp(KeyWordsi,word) return 1; return 0;/确定是否为关键字 int sign(ch

5、ar word) for(int i=0;inum0;i+) if(opei=word) return 1; return 0;/确定是否为运算符 int tap(char word) for(int i=0;inum1;i+) if(edgesigni=word) return 1; return 0;/确定 是否为分隔符符 void Takenwrite2(char word) /4为运算符,5为分隔符 if(sign(word) printf(4,%c)n,word); if(tap(word) printf(5,%c)n,word); void Takenwrite1(char *wo

6、rd,int Len) /3为字符或者数字,2为标识符,1为关键字 int a; if(Key(word) printf(1,%s)n,word); else if( word0= & wordLen-1=) /字符常量 printf(3,%s)n,word); else if(a=atoi(word)/字符串转化为数字 printf(3,%d)n,a); else if(word0!=0) printf(2,%s)n,word); int Taken() FILE *fp; char temp10,ch=1,temp1; char filename20; int i,j; printf(请输

7、入文件名); scanf(%s,filename); if(fp=fopen(filename,r)=NULL) printf(文件打开失败); return 0 ; while(ch!=EOF) j=0; i=0; ch=fgetc(fp); while(!tap(ch)&!sign(ch)&ch!= &ch!=n&ch!=EOF) tempi=ch; tempi+1=0; ch=fgetc(fp); i+; Takenwrite1(temp,i); temp0=0;/清除字串 temp1=ch; Takenwrite2(temp1); temp1=0;/清除字符 fclose(fp);re

8、turn 1;运行结果实验二 LL(1)语法分析程序设计 2012-4-24【实验目的】1熟悉判断LL(1)文法的方法及对某一输入串的分析过程。2学会构造表达式文法的预测分析表。【实验内容】编写一个语法分析程序,对于给定的输入串,能够判断识别该串是否为给定文法的句型。【实验部分代码】struct pRNode /*产生式右部结构*/ int rCursor; /*右部序号*/ struct pRNode *next;struct pNode /*产生式结点结构*/ int lCursor; /*左部符号序号*/ int rLength; /*右部长度*/ /*注当rLength = 1 时,r

9、Cursor = -1为空产生式*/ struct pRNode *rHead; /*右部结点头指针*/;struct collectNode /*集合元素结点结构*/ int nVt; /*在终结符集中的下标*/ struct collectNode *next;/*返回Vn在Vn表中的位置+100、Vt在Vt表中的位置,-1表示未找到*/int IndexCh(char ch) int n; n = 0; while(ch != Vnn & 0 != Vnn) n+; if(0 != Vnn) return 100 + n; n = 0; while(ch != Vtn & 0 != Vtn) n+; if(0 != Vtn) return n; return -1;/*输出Vn或Vt的内容*/void ShowChArray(char* collect) int k = 0; while(0 != collectk) printf( %c , collectk+); printf(n); Vnn = #; /*以#标志结束用于判断长度是否合法*/ k = n; /*k用于记录n以便改Vnn=0*/ if(# != ch) if( # != (ch = getchar() while(# != (ch = getchar() ;

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

当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

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