下载此文档

编译原理课程设计 算术表达式的语法分析及语义分析程序设计..doc


文档分类:IT计算机 | 页数:约17页 举报非法文档有奖
1/17
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/17 下载此文档
文档列表 文档介绍
编译原理课程设计_算术表达式的语法分析及语义分析程序设计.设计题一:算术表达式的语法分析及语义分析程序设计。、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。:       算术表达式的文法:〈无符号整数〉∷= 〈数字〉{〈数字〉}〈标志符〉∷= 〈字母〉{〈字母〉|〈数字〉}〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉}〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉}〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’〈加法运算符〉∷= +|-〈乘法运算符〉∷= *|/选择算符优先分析方法完成以上任务,生成逆波兰式的中间代码;(1)写出算术表达式的符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。(2)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。源代码#define_CRT_SECURE_NO_WARNINGS#include""#include""#includeusingnamespacestd;chardata[20][20];//算符优先关系chars[100];//模拟符号栈scharlable[20];//文法终极符集charinput[100];//文法输入符号串charstr[20][10];//用于输入串的分析intk,j;chara,q;intr;//文法规则个数intr1;intm,n,N;//转化后文法规则个数charst[10][30];//用来存储文法规则charfirst[10][10];//文法非终结符FIRSTVT集charlast[10][10];//文法非终结符LASTVT集intfflag[10]={0};//标志第i个非终结符的FIRSTVT集是否已求出intlflag[10]={0};//标志第i个非终结符的LASTVT集是否已求出intdeal(;//对输入串的分析intterminal_symbol(charc;//判断字符c是否是终极符intlocation(charc;//求字符c在算符优先关系表中的下标voidout(intj,intk,char*s;//打印s栈voidfirstvt(charc;//求非终结符c的FIRSTVT集voidlastvt(charc;//求非终结符c的LASTVT集voidtable(;//创建文法优先关系表charoutput[10];//存储逆波兰式voidmain({inti,j,k=0;printf("请输入文法规则数:";scanf("%d",&r;printf("请输入文法规则:\n";for(i=0;i{scanf("%s",st[i];//存储文法规则,初始化FIRSTVT集和LASTVT集*/first[i][0]=0;/*first[i][0]和last[i][0]分别表示st[i][0]非终极符的FIRSTVT集和LASTVT集中元素的个数*/last[i][0]=0;}for(i=0;i//判断文法是否合法{for(j=0;st[i][j]!='\0';j++{if(st[i][0]<'A'||st[i][0]>'Z'{printf("文法error!\n";exit(-1;}if(st[i][j]>='A'&&st[i][j]<='Z'{if(st[i][j+1]>='A'&&st[i][j+1]<='Z'{printf("文法error!\n";exit(-1;}}}}for(i=0;i//for(j=0;st[i][j]!='\0';j++if((st[i][j]<'A'||st[i][j]>'Z'&&st[i][j]!='-'&&st[i][j]!='>'&&st[i][j]!='|'lable[k++]=st[i][j];lable[k]='#';lable[k+1]='\0';table(;//printf("FIRST集为:\n";//输出每个非终结符的FIRST集for(i=0;i{printf("%c:",st[i][0];for(j=0;jprintf("%c",first[i][j+1];printf("\n";}printf("LAST集为:\n";//输出每个非终结符的LAST集for(i=0;i{printf("%c:",st[i][0];for(j=0;j{printf("%c",last[i][j+1];}printf("\n";}printf("算符优先分析表如下:\n";for(i=0;lable[i]!='\0';i++printf("\t%c",lable[i];printf("\n";for(i=0;i{printf("%c\t",lable[

编译原理课程设计 算术表达式的语法分析及语义分析程序设计. 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数17
  • 收藏数0 收藏
  • 顶次数0
  • 上传人q1188830
  • 文件大小65 KB
  • 时间2019-10-26