资源描述:
《编译原理实验报告31663》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验报告CompilerPrinciplesExperimentReport学生所在学院:燕山大里仁学院学生所在班级:学生姓名:____指导教师:学号:实验一词法分析设计一.实验目的通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确的、熟练的运用。二.实验内容用给定简单语言书写的源程序进行词法分析,通过输入源程序从左到右对字符串进行扫描和分解,一次输出各个单词的内部编码及单词符号自身值,即二元组(二
2、元式);若遇到错误则显示“Error”,同时输出错误单词在源程序中的行位置,即三元组(单词种类,单词内码值,源程序中的行号);同时进行标示符登记符号表的管理。三.实验原理1.待分析词法的自身值说明(1)关键字:main,if,else,int,return,void,while(2)简单运算符+,=,-,(3)界限符(,),{,},;,:,[,](1)字母(2)数字1.功能说明通过对输入的字符串进行扫描和分析输出各个单词和编码的自身值。四.C++语言程序#include#includ
3、e#includeusingnamespacestd;intDeletenull(charS[1000])//与处理函数{boolstatus=1;intj=0;char*P;P=S;for(inti=0;i<200;i++){if(*P!=''&&*P!='/n'){status=0;S[j]=*P;j++;P++;}else{if(status==0){S[j]='';j++;P++;status=1;}elseP++;}}S[j]=' ';return(j);}v
4、oidmain(){char*P;charS[1000];charword[20];stringkey[]={"main","if","else","int","return","void","while"};stringfilename;cout<<"*********************"<>filename;ifstreaminfile(filename.c_str(),ios::in);ofstreamoutfile("result.txt
5、",ios::out);P=S;if(infile&&outfile){infile.getline(S,1000,EOF);intN;N=Deletenull(S);for(inti=0;i='A'&&*P<='Z')//识别一个大写字母为首的标示符{j=0;while((*P>='A'&&*P<='Z')
6、
7、(*P>='a'&&*P<='z')
8、
9、(*P>='0'&&*P>='9')){word[j]=*P;j++;P++;}word[j]=' ';outfil
10、e<<"<"<<4<<",""<"<='0'&&*P<='9')//识别整数{j=0;while(*P>='0'&&*P<='9'){word[j]=*P;j++;P++;}word[j]=' ';outfile<<"<"<<5<<",""<"<='a'&&*P<='z')//识别关键字或标示符{j=0;while((*P>='A'&&*P<='Z')
11、
12、(*P>='a'&&*P<='z'
13、)
14、
15、(*P>='0'&&*P>='9')){word[j]=*P;j++;P++;}word[j]=' ';boolYN=0;stringIKY(word);for(inti=0;i<7;i++){if(!IKY.compare(key[i])){outfile<<"<"<<1<<",""<"<"<16、P=='!'
17、
18、*P=='>'
19、
20、*P=='<')//识别复合运算符{if(*(P+1)=='='){word[0]=*P;word[1]='=';word[2]=' ';P=P+2;outfile<<"<"<<2<<",""<"<