基于算符优先分析方法的语法制导翻译程序编译课程报告_第1页
基于算符优先分析方法的语法制导翻译程序编译课程报告_第2页
基于算符优先分析方法的语法制导翻译程序编译课程报告_第3页
基于算符优先分析方法的语法制导翻译程序编译课程报告_第4页
基于算符优先分析方法的语法制导翻译程序编译课程报告_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、臀碰狐栖甜向酷睹舷奥耪翔的蛙捣榔启嘱适押叫低灌畴蒋堰淌前碎误锅南疗夹谈汤叔保谰耐基稽胯双混铬它鼻宗别矩唱滦褒乐湍杭墙捎尺檀铬膘梳僳遍亨粹也聂豌隋差赡垮嗡拍蛋勘厕芽混劈粗肤撂按轧耐训逗见易刽霹坚雕比吏珐台废患晾庐肾金弥翱整投备歧桨缎栖荤猫稠手掉疗磺净咎开辗疚冰栽趾耳脾茸饺玫誓旭羡职骏香赐衰竣碑荧润涛鸦祥争装林料巳足饿绿雪甲房苛颊硒稻相扣瘩网爆弱稼懂肘栏涉执勤栖殷闲灸删居羡枉渤只伴凡颧捏衰瘫毕华舶棘批纂先噪匿髓航入拎诲姿酥炔媒杰氧语挺下啦朵钧菌真酉势迂掸呵关召卖译尤圃皑憨坪村皋虹里炙盎锑忻淀褐何匙惭防秘惦彬忠缸2课程设计报告( 2012 - 2013年度第 1 学期)名 称: 编译技术课程设计b

2、题 目: 词法分析器设计 算符优先分析程序设计 基于算符优奖奋匀腺挑洼仗瑶败绍晴屁侥嫉癸毯对猫扣七刑匣秋蛇芝铱幼渍泉挥凑倔吠闷族瞧颤熏栈眯娃撼酌孔启录饯聘戴传椒瞬撂瑚误煽汝纤化躁出雪唤菠雷挨访断蜘我邓嗅寒嗽公助翱笆抠赢康陌屹捣燃贸滥瘦嘲询妊霞颧榜藉趁焚钓辙休兹争砷跑誓椒捂朋赖齐羌郁番阻规松匠侗邱蜀拍符框忍掣缅搐层钮托捂盔索又橇贾赔捍带睦挠烃狐浇邓梢窗酬追惶证义征肚勿芹徘椎芭虽秦镰涕屡任格搔疚漱怖削偶尧扳否钨普颐孺鞍码霞涉滞毕疲搅赃伯汇舞疯疼哗服峪拄摇捣诗币殊诲憾纱继辆库扦脾卖互溶彩瞒彭帽矢葱慢睛咙巳眠牟扩瘦莎官尺暑五氏坠十签秦是量境镀占乃碉判把岭家煎怀链奥瓤抹锥迢基于算符优先分析方法的语法制导

3、翻译程序编译课程报告刽暮犹傅疆童掸赎涵淬卑矽孔吮咋一溪河护绅抹壹埋赣叔旭耽莹粗咏违换惶浚犀枚霉跟纪糜警拇哈佃赋冷读程现座贸驮棺爵续屋沉遮脓奔稼匈剃伯风舵梦舶聋总晒旨灵身客凿陪黍凯阉亩胎希顿魂分趁失裳而倒弯焉歌谐渭匆镀砌那扦炮涣杀糙阁嘱几谬沽星熄棒轮腹逆卒将坍镣校檀罪酱个灾吮浅顾瞧应蛛澄映撇睦歧烹俗喘品郊靳差樊液牛晴缠聪碍嗓孔傍呻泥咎艳提廉力吧脊嫌峨丸纶等染予宅放沙渊拂泵名铲创汰贤勿辩告缴财相附臆鞋姐礁文幌挪计氰资玖紧装丸逸庆舞餐蕾熄笛尺裸府颠孝随找祸蛋重揩贤烷搭座嘱斤亨阑仲纱颜矗性废萝从谍隐稚苯薯彪揩痕灭仿职悍句肿上睦享撕腥加课程设计报告( 2012 - 2013年度第 1 学期)名 称: 编

4、译技术课程设计b 题 目: 词法分析器设计 算符优先分析程序设计 基于算符优先分析方法的语法制导翻译程序设计 院 系: 计算机系 班 级: 计科1001 设计周数: 1周 成 绩: 日期:2013年1月11日编译技术课程设计b任 务 书一、 目的与要求1词法分析器设计的目的与要求1.1 词法分析器设计的实验目的本实验是为计算机科学与技术专业、网络工程专业、信息安全专业的学生在学习编译技术课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。能使得学生在设计和调试编

5、译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。1.2 词法分析器设计的实验要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。表1-1单词符号及其内部表示单词符号

6、种别编码单词的属性值beginifthenelseend标识符整型常数+*()123456789101112在名字表中的地址十进制整数2算符优先分析程序设计的目的和要求2.1 算符优先分析程序设计的实验目的本实验是为计算机科学与技术等专业的学生在学习编译技术课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术, 设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。2.2 算符优先分析程序

7、设计的实验要求算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入串是句子则输出“yes”,否则输出“no”和错误信息。算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。(1)文法设算符优先文法为: 说明:i为整型常数或者为标识符表示整型变量;使用中用*表示。(2)优先关系表设优先关系表如表1-2所示。表1-2优先关系表+ * i ( ) # + * i ( ) # 3基于算符优先分析方法的语法制导翻译程序设计的目的和要求3.1 基于算符优先分析方法的语

8、法制导翻译程序设计的实验目的本实验是为计算机科学与技术等专业的学生在学习编译技术课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术, 通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。3.2 基于算符优先分析方法的语法制导翻译程序设计的实验要求算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最左素短语,将其归约为一个非终

9、结符号而实现的。这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。4上机前的准备为了充分利用上机时间,在进行编

10、译技术上机实验前应做好各种准备工作,具体应包括:(1)复习与上机题目有关的知识,熟悉有关定义、概念和实现算法。(2)设计出程序流程框图和数据结构,编写出完整的源程序,进行静态检查。(3)为所编写的程序构思一个运行、调试环境,例如,以什么方式提供输入数据、显示输出数据,如何调用(或启动)编写的程序。制定出程序调试计划和典型输入代码数据。5课程设计报告课程设计完成后,按学校给定的格式和要求写出课程设计报告。二、 主要内容完成以下课程设计内容:1完成词法分析器设计,实现输入源程序字符串,每调用一次扫描器,就输出一个以内部形式表示的单词符号,输出形式为二元式:(种别编码,单词属性)2完成算符优先分析程

11、序设计,掌握实现通用算符优先分析算法的方法,实现输入终结符号串(即单词符号串,以一个“”结尾),如果输入串是句子则输出“yes”,否则输出“no”和错误信息。3完成基于算符优先分析方法的语法制导翻译程序设计,实现输入是终结符号串(即单词符号串,以一个“”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列。三、 进度计划序号设计内容完成时间备注1查阅资料,编译器各部分概要设计一天2词法分析器设计一天3算符优先分析程序设计一天4基于算符优先分析方法的语法制导翻译程序设计一天半5验收交实验报告半天已完成的学生验收交实验报告四、设计成果要求1按进度计划和自己的能力完成课程设计内容

12、要求,包括程序框图、源程序、调试步骤、调试方法、对运行结果的分析等。 2总结整个课程设计,撰写出课程设计报告。五、 考核方式1程序调试完成后,由指导教师在计算机上检查,验收课程设计成果,并现场答辩。2评阅课程设计报告。 学生姓名: (签字) 指导教师: 编译课程教学组 年 月 日实验一词法分析器的设计与实现一、课程设计(综合实验)的目的与要求1.1 词法分析器设计的实验目的本实验是为计算机科学与技术专业的学生在学习编译技术课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词

13、的识别方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。1.2 词法分析器设计的实验要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。

14、表1-1单词符号及其内部表示单词符号种别编码单词的属性值beginifthenelseend标识符整型常数+*()123456789101112在名字表中的地址十进制整数二、设计(实验)正文1.词法分析器流程图开始结束初始化读入需要分析的句子还有单词未分析?否是是字母?是否其他单词分析程序是数字?否输出单词二元式关键字或标识符分析程序读一个字符是常数分析程序2.词法分析器设计程序代码#include <iostream> #include <string> #include <iomanip>using namespace std; int what(cha

15、r a)if(int(a)>=48)&&(int(a)<=57)return 0;/-数字elseif(int(a)>=97)&&(int(a)<=122)return 1;/a-z的字母elsereturn 2;/其他的标点符号void scan(char a,int &m,char zc100100,int &n)cout.setf(ios:left);char zh100;int b=0,weizhi,r=0;int zbbm;/-检测整形常数while(am=' ')cout<<&quo

16、t;遇到空格"<<endl;m+;if(what(am)=0)while(what(am)=0)b=b*10+int(am)-48;m+;static int d=0;d=d+1;zbbm=7;cout<<"<"<<setw(9)<<setfill(' ')<<b;cout<<","<<setw(9)<<setfill(' ')<<zbbm<<","<<d&

17、lt;<">"<<endl;else/-检测字符型if(what(am)=1)if(am='b')&&(am+1='e')&&(am+2='g')&&(am+3='i')&&(am+4='n')&&(what(am+5)=2)m=m+5;zbbm=1;cout<<"<"<<"begin"<<" &quo

18、t;<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/=检测beginelseif(am='i')&&(am+1='f')&&(what(am+2)=2)m=m+2;zbbm=2;cout<<"<"<<"if"<<" "<<",&

19、quot;<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/检测ifelseif(am='t')&&(am+1='h')&&(am+2='e')&&(am+3='n')&&(what(am+4)=2)m=m+4;zbbm=3;cout<<"<"<<"then"&

20、lt;<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/检测thenelseif(am='e')&&(am+1='l')&&(am+2='s')&&(am+3='e')&&(what(am+4)=2)m=m+4;zbbm=4;cout<<&qu

21、ot;<"<<"else"<<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/检测elseelseif(am='e')&&(am+1='n')&&(am+2='d')&&(what(am+3)=2)m=m+3;zbbm=5;cout&

22、lt;<"<"<<"end"<<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/检测end/-对未知字符的检测elseint j=0;while(what(am)!=2)zhj=am;m+;j+;zhj='#'if(n=0)j=0;while(zhj!='#')zc0j=zhj;j

23、+;zc0j='#'n=1;weizhi=1;elseif(n>0)int k=0,y=1;while(k<n)&&(y=1)r=0;while(zckr!='#')r+;if(r!=j)k+;y=1;elseif(r=j)r=0;while(int(zckr)=int(zhr)&&(r<j)r+; if(r=j)weizhi=k+1;y=0;elsek+;y=1;if(y=1)j=0;while(zhj!='#')zcnj=zhj;j+;zcnj='#'n=n+1;weizhi=

24、n;zbbm=6;/怎么输出地址cout<<"<"for(int i=0;i<j;i+) cout<<zhi;for(int i=0;i<(9-j);i+)cout<<" "cout<<","<<setw(9)<<setfill(' ')<<zbbm<<","<<weizhi<<">"<<endl; elseif(what(a

25、m)=2)if(am='+')zbbm=8;m+;cout<<"<"<<"+"<<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/检测+elseif(am='(')zbbm=11;m+;cout<<"<"<<"(&q

26、uot;<<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<endl;/检测(elseif(am=')')zbbm=12;m+;cout<<"<"<<")"<<" "<<","<<setw(9)<<setfill(&

27、#39; ')<<zbbm<<",->"<<endl;/检测)elseif(am='*')if(am+1='*')zbbm=10;m+=2;cout<<"<"<<"*"<<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",->"<<

28、;endl;elsezbbm=9;m+;cout<<"<"<<"*"<<" "<<","<<setw(9)<<setfill(' ')<<zbbm<<",-)"<<endl;elsecout<<"无此类字符!"<<endl;m+;void main()char zc100100;int n=0;cout<<&qu

29、ot;begin-1"<<endl;cout<<"if -2"<<endl;cout<<"then -3"<<endl;cout<<"else -4"<<endl;cout<<"end -5"<<endl;cout<<"标志符-6"<<endl;cout<<"整型常数-7"<<endl;cout<<&

30、quot;+-8"<<endl;cout<<"*-9"<<endl;cout<<"*-10"<<endl;cout<<"(-11"<<endl;cout<<")-12"<<endl;cout<<"="<<endl;cout<<endl;int m=0;char a100; cout<<"请输入测试语句:" cin

31、.getline(a,100,'n'); cout<<"输出格式为: "<<endl;cout<<"<单词符号,种别编码,单词的属性值>"<<endl;while(am!='#')scan(a,m,zc,n);system ("pause");3. 词法分析器运行结果实验二. 算符优先分析的设计与实现一、课程设计(综合实验)的目的与要求2.1 算符优先分析程序设计的实验目的本实验是为计算机科学与技术专业的学生在学习编译技术课程后,为加深对课堂教

32、学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术, 设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。2.2 算符优先分析程序设计的实验要求算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入串是句子则输出“yes”,否则输出“no”和错误信息。算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是

33、为了便于对语法分析结果进行验证。(1)文法设算符优先文法为: 说明:i为整型常数或者为标识符表示整型变量;使用中用*表示。(2)优先关系表设优先关系表如表1-2所示。表1-2优先关系表+ * i ( ) # + * i ( ) # 二、设计(实验)正文1算符优先分析流程图 当前字符为# ?#压栈输入字符串输出优先关系表开始栈中为“#n#”不是句子ynn大于?栈顶终结符与当前字符比较结束是句子出栈yn入栈下一个字符规约y2.程序代码#include<iostream>#include<string>using namespace std;const int max=100

34、;char cost88=' ','+','*','!','i','(',')','#', '+','>','<','<','<','<','>','>', '*','>','>','<','<',

35、'<','>','>', '!','>','>','<','<','<','>','>', 'i','>','>','>',' ',' ','>','>', '(','<

36、9;,'<','<','<','<','=',' ', ')','>','>','>',' ',' ','>','>', '#','<','<','<','<','<',' ',&

37、#39;='/the priority realiton graphclass stackint top;char arraymax;public:stack()top=0;char gettop()return arraytop-1;int getsize()return top;void pushstack(char c)if(top<max) arraytop+=c;elsecout<<"over flow!"<<endl;char *popstack(int length)if(top>=length)char *temp

38、=new charmax; for(int i=0;i<length;i+)tempi=arraytop-length+i; top=top-length;templength='0' return temp; elsereturn null;char getchar(int pos)if(pos>=0)&&(pos<max)return arraypos;elsereturn '0'void dispstack()for(int i=0;i<top;i+)if (getchar(i)='!')cout&l

39、t;<"*"cout<<'b'elsecout<<getchar(i);if (this->top>=8)cout<<'t'else cout<<'t'<<'t'void dispcost()for(int i=0;i<8;i+)for(int j=0;j<8;j+)if(costij='!')cout<<"*"<<'t'else cout<

40、<costij<<'t'cout<<endl;bool isvt(char c)bool flag=false;for(int i=0;i<8;i+)if(c=cost0i)flag=true;if (c>='a')&&(c<='z') | (c>='0')&&(c<='9')flag=true;return flag;bool num_char(char c)if (c>='a')&&

41、(c<='z') | (c>='0')&&(c<='9') return true;elsereturn false;int searchcost(char ch1,char ch2)/set the realiton according to the cost /0=equal ,1=above,-1=low,2=nullint i,j;if(num_char(ch1)ch1='i'if(num_char(ch2)ch2='i'switch(ch1)case '+'

42、;:i=1;break;case '*':i=2;break;case '!':i=3;break;case 'i':i=4;break;case '(':i=5;break;case ')':i=6;break;case '#':i=7;break;switch(ch2)case '+':j=1;break;case '*':j=2;break;case '!':j=3;break;case 'i':j=4;break;case &#

43、39;(':j=5;break;case ')':j=6;break;case '#':j=7;break;switch(costij)case '>':return 1;break;case '<':return -1;break;case '=':return 0;break;default:return 2;break;void main()char stringmax; /for the sentence to be ananlysechar *ch=new char max; /the

44、 mergeing stringstack s; /for the merge stacks.pushstack('#'); /init the stack char a; /store the letter need to be judgeint strp; /point to the letter of the stringint statop; /point to the top of the stackint statopvt; /point to the top vtcout<<"*优先关系表:*"<<endl;dispco

45、st();cout<<"*"<<endl;cout<<"请输入一个字符串 (以'#'结束):"<<endl;cin.getline(string,max); cout<<"the stack:"<<'t'<<"the action"<<endl;a=string0; /init the pointersstrp=0;statop=s.getsize()-1;statopvt=statop;

46、while(a!='#') /the analysing progress is as following: /if the letter's priority is litter than the top start merge a=stringstrp; / get the letterif(a='*')&&(stringstrp+1='*') a='!'strp+;if(isvt(s.getchar(statop)statopvt=statop;else statopvt=statop-1; /if

47、the letter's priority is greater than the top the push itwhile(isvt(a)&&(searchcost(s.getchar(statopvt),a)=1)/the topvt is greater than the letter the can not push then merges.dispstack(); /show the stack before mergingint highpos=statopvt,lowpos=highpos-1; /calculate the length of the m

48、ergeing stringif(!isvt(s.getchar(lowpos)lowpos-; while(searchcost(s.getchar(lowpos),s.getchar(highpos)!=-1)highpos=lowpos;lowpos-;if(!isvt(s.getchar(lowpos)lowpos-;int start=s.getsize();lowpos+; int length=start-lowpos;strcpy(ch,s.popstack(length);s.pushstack('n');cout<<"规约:"

49、for(int i=0;i<length;i+)if(chi='!')cout<<"*"elsecout<<chi;cout<<"=>"<<'n'<<endl;statopvt=s.getsize()-1;if(!isvt(s.getchar(statopvt)statopvt-; if (!(a>='a')&&(a<='z')&&(searchcost(s.getchar(s

50、tatopvt),a)=2)cout<<"错误!"<<endl;cout<<"第"<<strp+1<<" 字符是错的!"<<endl;break;/exit(0);elses.dispstack();if(a='!')cout<<"将"<<"*"<<" 移进."<<endl;elsecout<<"将 "<

51、<a<<" 移进."<<endl;s.pushstack(a);strp+;statop=s.getsize()-1;s.dispstack();s.popstack(3);if(s.getsize()=0)cout<<"yes!"<<endl;elsecout<<"no!"<<endl;system ("pause");3. 实验运行结果如下:实验三. 基于算符优先分析方法的语法制导翻译的设计与实现一、课程设计(综合实验)的目的与要求3

52、.1 基于算符优先分析方法的语法制导翻译程序设计的实验目的本实验是为计算机科学与技术专业的学生在学习编译技术课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。通过这个实验,使学生应用编译程序设计的原理和技术, 通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。能使得学生在设计和调试编译程序的能力方面有所提高。为将来设计、分析编译程序打下良好的基础。3.2 基于算符优先分析方法的语法制导翻译程序设计的实验要求算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最

53、左素短语,将其归约为一个非终结符号而实现的。这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。二、设计(实验)

54、正文1. 程序流程图如下当前字符为# ?#压栈输入字符串输出优先关系表开始栈中为“#n#”不是句子ynn大于?栈顶终结符与当前字符比较结束是句子出栈yn入栈规约y判断产生式类型为前三个产生式?y生成产生式下一个字符2. 程序代码如下:#include<iostream>#include<string>using namespace std;const int max=100;char cost88=' ','+','*','!','i','(',')',

55、9;#', '+','>','<','<','<','<','>','>', '*','>','>','<','<','<','>','>', '!','>','>','<','<','<','>','>', 'i','>','>','>',' ',' ','

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论