版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE10号:班级:院:信息工程院计算机系201463二… 8三… 151 : : □证□合□□新 ::、实验目的掌握算机语言开发方。二、实验内容编制一个能够三种整数、标识符、主要运算符和主要关键字。三、实验要求标识符 <母>(<母>|<>)*十进制整数 0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*:八进制整数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*十六进制整数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*运算符和界符 + - * / > < = <= >= ( ) ;{ }关键字 main if then else while do int (可根据需要添加)2、根据状态图,intscan:从文本文件中读入测试源代码,根据状态转换图,出一个单, 其中:0123运算符和界符,关键字采用一字一符,不编码其中表示如下:运算符和界符,关键字采用一字一符,属性为空3、编写测试scan,输出单种别和属性。四、实验环境PC微机DOS操作系统或Windows操作系统TurboCVisualC++、实验步骤C(n下:#include<stdio.h>FILE*outputFile;voidisNumber();//输文件#defineSYMBOL_CODE0voidisOthers();//标识符0voidisKeyword();#defineNUM_CODE1voidoutput_keyword()//字1{//可识别的关键字charkeywordstab[8][30]=";charch; //r;FILE*sourceFile; //源文件
printf("关键字:<%s,%s>\n",name,"-");}voidoutput_symbol(){printf("标识符:<%s,%s>\n","0",name);}voidoutput_number(){printf("字:<%s,%s>\n","1",name);}voidoutput_others()
name[k]='\0'; // 初{}
while(((ch>='a') && (ch<='z'))||((ch>='A')&&(ch<='Z'))||ch=='_'||(ch>'0'&&ch<'9'))//================================voidscan(){sourceFile=fopen("program.txt","r"); //if(sourceFile==NULL){printf("fileopenerror\n");exit(0);}outputFile=fopen("output.txt","w"); //if(outputFile==NULL){printf("fileopenerror\n");exit(0);}
{name[i++]=ch; //chfgetc(sourceFile); // 一个}for(i=0;i<8;i++){for(j=0;j<30;j++){ //判断是否与关键匹配if(name[j] ==keywordstab[i][j])flag=0;elsech=fgetc(sourceFile); // 读 { //如果与当前关键不while(ch!=EOF){ //if((ch>='a' && ch<='z') &&ch<='Z')||ch=='_')isKeyword();if(ch>='0'&&ch<='9')isNumber();elseisOthers();}}//============================voidisKeyword(){inti=0,j=0,intflag=0;for(k=0;k<30;k++)
匹配则跳内循环继续与一个关键配flag=1;break;}}if(flag==0) //如果是关键则跳外循环break;}if(flag==0) // 是关键字{output_keyword(); // 关else // 不是关键字{output_symbol(); // 标}}//============================voidisNumber(){inti=0;for(i=0;i<30;i++)
case'>':case'=':{fgetc(sourceFile);
ch1 =名i=0;
name[i]='\0'; //量
if(ch1=='='){name[0]=while(ch>='0'&&ch<='9'){name[i++]=ch;ch=
ch;'=';
name[1]=ch =}output_number();}
fgetc(sourceFile); //一个字符output_others();break;//============================voidisOthers(){charch1;inti;for(i=0;i<30;i++)
ch;
output_others();
{name[0]=ch =switch(ch){casecase'-':
ch1;break;
}}case'':case'*':case'/':case';':case'(':case')':eecase'[':case']':name[0]=ch=fgetc(sourceFile);
case'10'://换行符ch =fgetc(sourceFile);break;default: ch =fgetc(sourceFile); }}//============================voidmain(){scan();}5、思考题1或界定符。2设计哪些环节影响效率如何提高效率?例如在判断为关键字时方把全部读取并存放在一个字符数组后再逐个与关键字表匹配这样做效率比较低若在读取同时判断会提高效率。1):: 、实验目的二、实验内容三、实验要求1G[E]2LL(1)CC++Java3;读搜索把送是否是否是,;上述有余力同可以非到11。四、实验环境PC微机Windows操作系统C++集环境、实验步骤G[E]E->T|E+T;T->F|T*F;F->i|(E);E->TE1E1->+TE1|ƐT1->*FT1|Ɛ;F->i|(E);FIRSTFOLLOWFIRST(E)={(,i} FOLLOW(E)={),#}FIRST(E1)={+,Ɛ} FOLLOW(E1)={),#}FIRST(T)={(,i} FOLLOW(T)={+,),#}FIRST(T1)={*,Ɛ} FOLLOW(T1)={+,),#}FIRST(F)={(,i} FOLLOW(F)={*,+,),#}EiE->TE1+*(E->TE1)#E1TT->FT1E1->+TE1T->FT1E1->ƐE1->ƐT1FF->iT1->ƐT1->*FT1F->(E)T1->ƐT1->ƐPE1QT1。4.习预测分析程序的结构,设计合理的预测分析程序;4.编写测试程序,包括表达式的读入和结果的输出;FILE*inputFile; //FILE*outputFile; //charcurrentStr[10];//串charcurrentChar; //chartabData[5]; //匹配产生式右部charstatement[50]; //于语句intindex=0;intfinish=intendFlag0; //结尾interrorFlag0; //语法错误标志intendOfStamnt0; //于判断是否达到语句结尾//:@示错误,K示空串char E [10][5] =;char E1[10][5] ;char T [10][5] =;char T1[10][5] ;char F =;structStack//模拟号栈{inttop;//栈顶指针charstrName[MAX_STACK]//栈中存号串//================================voidcheckOneStatement(){charerrorFlag=0;finish=0;
stack.top=0;tabData[0]='\0';push('#');push('E');currentCharreadNext();//符while(!finish){showStack();chtoppop();//栈顶printf("char=%c\t",currentChar);printf("tabData=%s\n",tabData);if(chtop==currentChar){if(chtop=='#'){finish1;//finishprintf("break;}currentChar=readNext();}elseif(chtop=='#'){error();exit(0);}else{inti;match(chtop,currentChar);if(tabData[1]=='@'){ error();printf(" 错误:%c\n",currentChar);finish=1;{for(i=0;tabData[i]!='\0';i++);i--;while(i>0){if(tabData[i--]!=push(tabData[i+1]);}}}/d}
checkOneStatement();// 条语句做语法检查if(errorFlag){printf("语句:%s错误!\n",statement);fprintf(outputFile," 句:%s错误!\n",statement);e{printf("语句:%s合法!\n",statement);fprintf(outputFile," 句:%s合法!\n",statement);}}fclose(inputFile);fclose(outputFile);exit(0);//================================ }voidmain(){init();while(!endFlag){index=0;、测试数据输入数据:
10;1+2;(1+2)*3+(5+6*7);((1+2)*3+4;1+2+3+(*4+5);10;1+2;(1+2)*3+(5+6*7);((1+2)*3+4;1+2+3+(*4+5);(a+b)*(c+d);((ab3+de4)**5)+1;一的词法分析程序扫描输入语句输出结果如下:图:输入文件然后本次的语法分析程序对词法分析的结果进行处理,结果如下:、实验总结现对词法分析序上的理论知识运用到加深、巩固了对语法制导翻译原理的理解。八、思考题如果使用递归下降分析法来进行语法分析为什么L法再做递归下降分析?答为了消除左递归和消除回溯。实验 3 语法分析程序的设计(2)学生姓名:学号:专业班级:实验类型:□ 验证 □、实验目的综合□ 设计 □创新 实验日期:实验成绩:通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中算符优先分析方法,并加深对语法制导翻译原理的理解。二、实验内容设计一个文法的算符优先分析程序,判断特定表达式的正确性,并结合语法制导翻译原理,构造相应语义规则,将语法分析所识别的正确的表达式翻译计算出结果。三、实验要求1、给出文法如下:G[E]+*(+*()i+*()i2、计算机中表示上述优先关系,优先关系的机内存放方式有两种 )直接存放,)为优先关系建立优先函数,直接存放;1、给出算符优先分析算法如下:k:=1; S[k]:=‘#’;REPEAT进a;FVTNkEWHILES[j]aDOBEGINREPEATQ:=S[j];FVTN1EQ];k:=j+1;S[k]:=N;IFIFS[j]aORS[j]aBEGINk:=k+1;S[k]:=aENDELSEERRORL’45;读中调2中词搜索单词;单词送判断是否正确(是否是语言;上述有余力同学可以对正确计果。、实验环境PC微机DOS操作系统或操作系统TurboC集环境或C++集环境五、实验步骤1中终号关系;2存放关系或造函3编读和果输#include"malloc.h"#include<stdlib.h>#include"stdio.h"//#define_DEBUG_ 0 // 是否打印调信息/存储关系大于1小
{,,,,,,,{,,,,,,{,,,,,,,,;于2t{{,,,
char;charF[4][4]={"(E)","(F)","(T)","i"};ch=fgetc(inputFile);charT[2][4]={"F*F","T*F"};for(i=0;ch!='>';i++){FILE*inputFile; //currentStr[i]=ch;FILE*outputFile; //ch=fgetc(inputFile);}charcurrentStr[10]; //输if(currentStr[0]=='0'||currentStr[0]=='1')charcurrentChar; //的{for(i=2; currentStr[i] '\0';chartabData[5]; //析i++){charstatement[50]; //读statement[index++]=currentStr[i];intindex=0;}intendFlag0; //return'i';//=============}voidinit()elseif(currentStr[0]==';'){{inputFile =statement[index++]=';';fopen("wordfile.txt","r");statement[index++]='\0';if(inputFile==NULL)return'#';{ printf("inputfile open error\n");}exit(0);}else{outputFile =statement[index++]=fopen("outputfile.txt","w");currentStr[0];if(outputFile==NULL)returncurrentStr[0];{printf("outputfileopenerror\n");}exit(0);}}}//========一个intmatch(charch)charreadNext(){{intt;charch;switch(ch)inti;{for(i=0;i<10;i++) currentStr[i]case'+':t=0;break;='\0';case'*':t=1;break;while((ch=fgetc(inputFile))!='<')case'(':t=2;break;{case')':t=3;break;if(ch==EOF)case'i':t=4;break;{endFlag =1;return''; };
case'#':t=5;break;default:t=-1;//判断非终符 ch_ptr++;} }returnt;}intgetState(charSichara){inti=match(Si),j=match(a);returntable[i][j];}reduce(char*c_ptr){inti,j;char*ch_ptr=c_ptr;if(*ch_ptr=='i')return'F';for(i=0;i<6;i++){for(j=0;j<3;j++){if(*ch_ptr!=E[i][j])break;ch_ptr++;}if(j==3)return'E';ch_ptr=c_ptr;}for(i=0;i<3;i++){for(j=0;j<3;j++){if(*ch_ptr!=F[i][j])break;ch_ptr++;}if(j==3)return'F';ch_ptr=c_ptr;}
if(j==3)return'T';ch_ptr=c_ptr;}return'$';}voiderror(charch[]){//printf("错误%s\n",ch);}//======核心函数intjudgeOneStamnt(){interrorFlag0;//0示正确intk=1,j=0,i=0;charcurChar,Q,N;charstack[20];stack[k]='#';while(curChar!='#'){curChar=readNext();if(endFlag)return2;if(match(stack[k]) >= 0)// 终j=k;elsej=k-1;#ifdef_DEBUG_for(i=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届广晟集团高校毕业生专项招聘笔试历年参考题库附带答案详解
- 2025届中国电建集团山东电力建设有限公司秋季招聘80人笔试历年参考题库附带答案详解
- 2025安徽皖信人力资源管理有限公司城市管理辅助招聘10人笔试历年参考题库附带答案详解
- 2025宁夏天之舟有限公司招聘110名工作人员信息笔试历年参考题库附带答案详解
- 2025中国建筑一局(集团)有限公司工程研究院高效建造研究中心复杂结构建造岗招聘1人笔试历年参考题库附带答案详解
- 2025中咨(南京)工程咨询有限公司2025年社会招聘6人笔试历年参考题库附带答案详解
- 2025“才聚齐鲁成就未来”山东南郊集团投资有限公司招聘2人笔试历年参考题库附带答案详解
- 2026浙江宁波市特种设备检验研究院招聘高层次人才1人考试备考试题及答案详解
- 2026山东烟台黄渤海新区教育体育局招聘教师70人考试备考题库及答案详解
- 2026年安徽大学社会与政治学院管理助理招聘1名笔试参考试题及答案详解
- 酒品采购协议范例
- MOOC 探秘移动通信-重庆电子工程职业学院 中国大学慕课答案
- JJG 365-2008电化学氧测定仪
- 三年级下语文(部编版)古诗默写
- 2022版20kV及以下配电网工程技术经济指标编制导则
- GB/T 23220.1-2023烟叶储存保管方法第1部分:原烟
- 高考英语高频词汇汇总清单(共1801个)
- 2014年高考作文(北京卷)“老规矩”作文公式全解
- 农药销售技巧培训
- 团体心理治疗实践
- 肌电图科内讲座课件
评论
0/150
提交评论