下载此文档

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


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
设计题一:算术表达式的语法分析及语义分析程序设计。、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。:算术表达式的文法:〈无符号整数〉∷= 〈数字〉{〈数字〉}〈标志符〉∷= 〈字母〉{〈字母〉|〈数字〉}〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉}〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉}〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’〈加法运算符〉∷= +|-〈乘法运算符〉∷= *|/选择算符优先分析方法完成以上任务,生成逆波兰式的中间代码;(1)写出算术表达式的符合分析方法要求的文法,给出分析方法的思想,完成分析程序设计。(2)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。源代码#define_CRT_SECURE_NO_WARNINGS#include""#include""#include<iostream>usingnamespacestd;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<r;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<r;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<r;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<r;i++){printf("%c:",st

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

非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人docin
  • 文件大小27 KB
  • 时间2019-11-13