【最新版】C语言编译器实现毕业设计(2)

2018-11-28 18:08

图2 递归下降分析分析程序流程图

图3 语句块分析流程图 否 图4 语句串分析流程图 否

是 是

图5 语句分析流程图

五、运行测试结果

正确程序结果

错误程序结果:报错!(1)

错误程序结果:报错!(2)

六、心得体会

这次的课程设计,最大的收获就是清楚了编译的整个过程,在学习编译原理这门课程之时,在做设计的过程中和词法分析、语法分析、语义分析联系起来, 非常清晰的理解了简单编译器实现过程。读完了一个完整的源程序,知道了它里面的功能模快以及结构组织,也明白了编译的基本原理.。在实验中加深了在课堂上说学到编译原理知识的理解,实验中实践了书本上的知识和原理。

通过这次课程设计也使我认识到自己的不足。首先这些代码我并不能独立完成,而是在网上查阅了大量资料,以及在许多同学的帮助下才完成的。其次平时对编译原理的各个部分理解的不错,平时实验做的也还可以,只是在做这次的课程设计的时候需要把整个编译的过程整体的思路搞清楚。通过看以前的笔记和课本,我了解了各个阶段间的连接,最

终使得本次课程设计的顺利完成。

七、源代码

#include

int syn,p,m,n,i; double sum; int count; int isSignal; int isError;

int isDecimal; double decimal; int isExp; int index;

int isNegative; double temp; int temp2; int repeat; int nextq; int kk;

int ntc,nfc,nnc,nnb,nna;

char *rwtab[9]={\struct{ char result[10]; char arg1[10]; char opera[10]; char arg2[10]; }fourCom[20]; void scanner(); void lrparser();

void staBlock(int *nChain); void staString(int *nChain); void sta(int *nChain); void fuzhi();

void tiaojian(int *nChain); void xunhuan(); char* E(); char* T(); char* F();

char *newTemp();

void backpatch(int p,int t); int merge(int p1,int p2);

void emit(char *res,char *num1,char *op,char *num2); void main() { p=0; count=0; isDecimal=0; index=0; repeat=0; kk=0;

printf(\请输入待编译程序:\\n\ do{ ch=getchar(); prog[p++]=ch; }while(ch!='#'); p=0; isError=0; scanner(); lrparser(); for(i=1;i

\\t%5s )\\n\ } }

void lrparser() { int nChain; nfc=ntc=1; nextq=1; if(syn==1) { scanner(); if(syn==26) { scanner(); if(syn==27) { scanner(); staBlock(&nChain); } else printf(\缺少右括号\\n\ } else printf(\缺少左括号\\n\ } else printf(\缺少main\\n\}

void staBlock(int *nChain) { if(syn==28) { scanner(); staString(nChain); if(syn==29) scanner(); else printf(\缺少}号\\n\ } else printf(\缺少{号\\n\}

void staString(int *nChain) { sta(nChain);

backpatch(*nChain,nextq); while(syn==31) { scanner(); sta(nChain); } }

void sta(int *nChain) { if(syn==10) { fuzhi(); } else if(syn==6) { tiaojian(nChain); } else if(syn==8) xunhuan(); }

void tiaojian(int *nChain) { char res[10],num1[10],num2[10],op[10]; int nChainTemp; if(syn==6) { scanner(); if(syn==26) { scanner(); strcpy(num1,E()); if((syn<=37)&&(syn>=32)) { switch(syn) { case 32: strcpy(op,\ break; case 33: strcpy(op,\ break; case 34: strcpy(op,\ break; case 35: strcpy(op,\ break; case 36: strcpy(op,\ break; case 37: strcpy(op,\ break; default: printf(\ } } scanner();


【最新版】C语言编译器实现毕业设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:物理教学经验交流材料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: