编译原理实验报告三

编译原理实验报告三
编译原理实验报告三

编译原理实验报告

题目词法分析程序的构造学院

专业

班级

学号

学生姓名

指导教师

西安思源学院教务处制

二〇一年

实验三词法分析程序的构造

一、实验目的

1 掌握C++编译程序的使用方法

2 掌握C++编译程序的总体结构

3 掌握C++编译程序的词法分析程序

4 改编总控程序和词法分析程序

二、实验环境

Microsoft Visual C++ 6.0

三、实验内容

1 单词的分类:

可将所有标识符归为一类;将常数归为另一类:保留字、界符、运算符符则可采取一词一类。

2 符号表的建立

可事先建立一保留字表,以备识别保留字时进行查询。变量名表及常数表则在词法分析过程中建立。

3 单词串的输出形式:

所输出的每一单词,均按形如(CLASS,VALUE)的二元式编码。对于变量标识符和常数,CLASS字段为相应的类别码,VALUE字段是该标识符、常数在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串,其最大长度为四个字符;常数表登记项中则存放该常数(整数)的二进制形式)。对于保留字、界符和运算符,由于采用一词一类的编码方式,所以仅需在二元式的CLASS 字段上放置相应的单词的类别码,VALUE字段则为“空”。(或:为便于查看由词法分析程序输出的单词串也可以在CLASS字段上放置单词符号串本身)。

4 编写上述词法分析程序

四、设计说明

void analyse(FILE *fpin){

string arr="";

while((ch=fgetc(fpin))!=EOF) {

arr="";

if(ch==' '||ch=='\t'||ch=='\n'){}

else if(IsLetter(ch)){

while(IsLetter(ch)||IsDigit(ch)) {

if((ch<='Z')&&(ch>='A')) ch=ch+32;

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

if (Iskey(arr)){cout<

else cout<

}

else if(IsDigit(ch))

{ while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))){ arr=arr+ ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

cout<

}

else switch(ch){

case'+':

case'-' :

case'*' :

case'=' :

case'/' :cout<

case'(' :

case')' :

case'[' :

case']' :

case';' :

case'.' :

case',' :

case'{' :

case'}' :cout<

case':' :{ch=fgetc(fpin);

if(ch=='=') cout<<":="<<"\t$运算符"<

else {cout<<"="<<"\t$运算符"<

fseek(fpin,-1L,SEEK_CUR);}

}break;

case'>' :{ch=fgetc(fpin);

if(ch=='=') cout<<">="<<"\t$运算符"<

if(ch=='>')cout<<">>"<<"\t$输入控制符"<

else {cout<<">"<<"\t$运算符"<

fseek(fpin,-1L,SEEK_CUR);}

}break;

case'<' :{ch=fgetc(fpin);

if(ch=='=')cout<<"<="<<"\t$运算符"<

else if(ch=='<')cout<<"<<"<<"\t$输出控制符"<

else if(ch=='>') cout<<"<>"<<"\t$运算符"<

else{cout<<"<"<<"\t$运算符"<

fseek(fpin,-1L,SEEK_CUR);}

}break;

default : cout<

}

}

}

void main(){

char in_fn[30];

FILE * fpin;

cout<<"请输入源文件名(包括路径和后缀名):";

for(;;){

cin>>in_fn;

if((fpin=fopen(in_fn,"r"))!=NULL) break;

else cout<<"文件路径错误!请输入源文件名(包括路径和后缀名):"; }

cout<<"\n********************分析如下*********************"<

fclose(fpin);

}

分析代码

#include

#include

char ch[2000];

char a[2000];

char b[2000];

char c[2000];

int i,j,k,t;

void main()

{ void find_word();

void show_all();

void Input();

Input();

cout<<"运行结果如下"<

find_word();

show_all();

}

运行结果:

五、实验总结

通过这次实验使我对词法分析有了更好的了解,掌握词法分析的基本原理和方法。

相关主题
相关文档
最新文档