词法分析器的设计

《编译原理》 课 程 设 计 报 告

题 目

院 系专 业年级班级学 号学生姓名指导教师

2014 年 6 月 19 日

目 录

1 课程设计目的、任务及要求 ..................................................................................................... 1

1.1 课程设计目的 .................................................................................................................. 1 1.2 课程设计任务及要求 ...................................................................................................... 1

1.2.1 课程设计任务 ......................................................................................................... 1 1.2.2 课程设计要求 ......................................................................................................... 1 1.2.3 课程设计环境 ......................................................................................................... 1

2 需求分析 ..................................................................................................................................... 2

2.1系统设计的目标 ............................................................................................................... 2 2.2系统功能需求分析 ........................................................................................................... 2 2.3数据需求分析 ................................................................................................................... 2 3 系统设计 ..................................................................................................................................... 3

3.1总体设计 ........................................................................................................................... 3 3.2总体流程图 ....................................................................................................................... 3 3.3字识别流程图 .................................................................................................................. 4

3.4关键字识别流程图 ........................................................................................................... 4 3.5数字的识别流程图 .......................................................................................................... 5 4 系统实现 ..................................................................................................................................... 6

4.1各部分的功能介绍及分析 ............................................................................................... 6 4.2 算法实现及模拟 .............................................................................................................. 6 5 系统测试 ..................................................................................................................................... 9

5.1结果的测试 ....................................................................................................................... 9

5.1.1运行结果 ................................................................................................................ 9 5.1.2源文件及分析结果 ................................................................................................ 9

6 课程设计小结 ........................................................................................................................... 10

6.1 设计过程 ........................................................................................................................ 10 6.2 困难与收获 .................................................................................................................... 10 7课程设计源代码 ........................................................................................................................ 11

1 课程设计目的、任务及要求

1.1 课程设计目的

1、 理解词法分析器的工作原理。

2、 使用程序设计语言实现一个简单的词法分析器。

1.2 课程设计任务及要求

1.2.1 课程设计任务

完成下述文法所描述的单词符号的词法分析程序。 -->|| -->| -->+|-|*|/|;|(|)|{|}|=|>|==| -->a|…|z|A|…|Z -->0|…|9 -->’ ’ 说明:

1.假定该语言对字母的大小写不敏感,由指定文件读入预分析的源程序,分析结果再写入指定文件。

2.假定语言的关键字为"if","else","then","for","while","do","and","not","or"。 3.程序的功能描述

从左至右扫描源程序的字符串,按照词法规则(正则文法规则)识别出一个个正确的单词,并转换成该单词相应的二元式(种别码、属性值)交给语法分析使用。

本程序规定输出用KeyWord代表关键字,Word代表普通标识符,Digit代表阿拉伯数字,SingleWord代表单分界符,DoubleWord代表双分界符,ERROR代表无法识别的字符。

1.2.2 课程设计要求

每个学生应完成:课题的需求分析,词法分析器的设计及开发,撰写课程设计报告等。

1.2.3 课程设计环境

系统开发平台Windows 7,系统开发工具Microsoft Visual Studio 2010,win32控制台应用程序,应用语言C++语言

2 需求分析

2.1系统设计的目标

能够完成下述文法所描述的单词符号的词法分析程序,并把从一个文件中读取,然后把结果输入并保存到另一个文件中,能完成的文法所描述的单词符号如下: 1、-->|| 2、-->|

3、-->+|-|*|/|;|(|)|{|}|=|>|=|

4、-->a|…|z|A|…|Z -->0|…|9 -->

2.2系统功能需求分析

1、词法分析需求分析主要是功能分析即词法分析,能对文件内容分析,从指定的源文件中读

取内容并把分析结果输入到指定的文件。

2、程序语言的单词符号一般分为五种:关键字、标示符、常数、运算符、界符,该软件能识别出假定关键字为"if","else","then","for","while","do","and","not","or",这些程序语言。

3、能从左至右扫描源程序的字符串,按照词法规则(正则文法规则)识别出一个个正确的单词,并转换成该单词相应的二元式(种别码、属性值)交给语法分析使用。

2.3数据需求分析

1、本程序规定输出用KeyWord代表关键字,Word代表普通标识符,Digit代表阿拉伯数字,SingleWord代表单分界符,DoubleWord代表双分界符,ERROR代表无法识别的字符。

2、通过关键字"if","else","then","for","while","do","and","not","or"能够识别出标识符、无符号整数、分界符、字母并作出相应的分析。

3、假定该语言对字母的大小写不敏感,由指定文件读入预分析的源程序,分析结果再写入指定文件,源程序尽量包含所需要的数据,关键字尽量都含有。

3 系统设计

3.1总体设计

该词法分析器有以下几个功能:关键字的判断、单分界符的判断、双分界符的判断、数字的判断、普通标识符的判断和无法识别字符的判断。除此之外,还要能从指定的源文件中读取程序并把结果输出到指定文件。

3.2总体流程图

图3—1

3.3字识别流程图

判断输入的是否为字符,若为字符将其拼凑成以单词再往下进行判断,若不为字符则判断是否为数字,函数实现:

int IsLetter(char c) { //判断是否为字母

if(((c='a'))||((c='A'))) return 1; else return 0; }

图3—2

3.4关键字识别流程图

判断从文件中读取单词是否为关键字,若为关键字则返回它的编码,若不为关键字,怎判断其是否为数字。主要程序为:

int Iskey(string c){ //关键字判断 int i;

for(i=0;i

if(key[i].compare(c)==0) return 1; } return 0;

}

图3—3

3.5数字的识别流程图

判断输入的字符是否为关键字,若为关键字则返回它的编码,若不为关键字则判断其是否为运算符。主要实现函数:

int IsDigit(char c){ //判断是否为数字 if(c>='0'&&c

else return 0;}

4 系统实现

系统的实现是通过各个函数实现的,实现分为个函数功能的说明、算法实现及模拟。

4.1各部分的功能介绍及分析

1、各函数及功能说明

int IsLetter(char c) /*判断是否为字母*/ int IsDigit(char c) /*判断是否为数字*/ int delimiter(char ch) /*判断是否是分界符*/ key[i].compare(c) /*比较关键字*/ int Iskey(string c) /*判断是否是关键字*/ void analyse(FILE *fpin,FILE *fpout) /*对读取的文件分析*/ 主函数实现对文件的读取,和写入操作。

4.2 算法实现及模拟

1、读入源文件有函数int fgetc(FILE *FILE)实现,文件是否结束及循环读入字符由while循环实现,while(!feof(fpr)),其中fpr=fopen("sourcecode.txt","r")sourcecode.txt为存放源程序的文本文件。

2、对文件的分析程序主要为:

void analyse(FILE *fpin,FILE *fpout){

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='A'))

}

}

ch=ch+32;

arr=arr+ch; ch=fgetc(fpin);

fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)) {

fprintf(fpout,"\n",arr.c_str());

}

else fprintf(fpout,"\n",arr.c_str());

else if(IsDigit(ch)) { }

else switch(ch) { case'+':

while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))) { }

fseek(fpin,-1L,SEEK_CUR);

fprintf(fpout,"\n",arr.c_str());

arr=arr+ch; ch=fgetc(fpin);

case'-' : case'*' : case'=' :

case'/' :fprintf(fpout,"\n",ch);break; case'(' : case')' :

case'[' :

case']' : case';' : case'.' : case',' : case'{' :

case'}' :fprintf(fpout,"\n",ch);break; case':' :{ch=fgetc(fpin);

if(ch=='=') fprintf(fpout,"\n",':','='); else {fprintf(fpout,"\n",'='); fseek(fpin,-1L,SEEK_CUR);} }break;

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

if(ch=='=') fprintf(fpout,"\n",'>','='); if(ch=='>')fprintf(fpout,"\n",'>','>'); else {fprintf(fpout,"\n",'>'); fseek(fpin,-1L,SEEK_CUR);} }break; case'

if(ch=='=')fprintf(fpout,"\n",'\n",'') fprintf(fpout,"\n",''); else{fprintf(fpout,"\n",'

default : fprintf(fpout,"\n",ch); } } }

5 系统测试

5.1结果的测试

5.1.1运行结果

5.1.2源文件及分析结果

1、源文件 : 2、部分分析结果

6 课程设计小结

6.1 设计过程

首先,根据课程设计的任务:使用C++语言编程,实现词法分析器的基本功能,来确定本次程序设计的总体目标及路线。详细阅读课程设计的内容及要求,明确接下来的大致作业。进一步,规划算法,描绘出初步的,总体的流程图。

然后,结合编译原理相关书籍,理解程序系统的基本原理。结合C++语言相关书籍,具体细化程序设计的思路,粗略确定程序的模块划分,功能划分,并确定这些模块和功能应该有c语言的哪些函数来实现。

接下来,着手程序编写。依次完成源文件的读入,字符的判断,文件的读写,结果的输出,并在编程过程中反复完善,多多的测试,及时检测问题是否存在,若存在,立即改善。直到程序足够强壮,功能完善,结果正确为止。

最后,选择考虑到所有可能的测试数据,总体测试词法分析器的性能。更改输出数据的格式,使之布局合理。在需要的地方增添注释信息,删除设计过程中的测试代码或其他冗余代码,美化程序布局,调整整体的程序代码间隔。

6.2 困难与收获

本次课程设计初步培养设计者对编译器设计的思想的了解,加深对编译原理和应用程序的理解。通过设计调试词法分析程序,实现了从程序中分出各种单词的方法,从而加深了对该知识的理解,提高了词法分析的实践能力。

程序的关键点在于对对给出一段程序中的各种单词的分离。在每段程序中,单词种类可以分为:关键字,分界符,算术运算符,关系运算符,标识符和常数。关键字的判断则是通过与已知数组中列出的元素进行对比,得出该单词是否为关键字;分解符,算术运算符,关系运算符的判断与接受到的字符进行比较,得出该字符是否为分解符,算术运算符或者为关系运算符。遇到的一个难题警告 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\documents\visual studio 2010\projects\9\9\9.cpp 101 1 后来找了好久查到了原因。

7课程设计源代码

#include

#include

using namespace std;

#define MAX 22

char ch =' ';

string key[9]={"if","else","then","for","while","do","and","not","or"};

int Iskey(string c){ //关键字判断

int i;

for(i=0;i

if(key[i].compare(c)==0) return 1;

}

return 0;

}

int IsLetter(char c) { //判断是否为字母

if(((c='a'))||((c='A'))) return 1;

else return 0;

}

int IsDigit(char c){ //判断是否为数字

if(c>='0'&&c

else return 0;

}

void analyse(FILE *fpin,FILE *fpout){

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='A'))

ch=ch+32;

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

if (Iskey(arr))

{

fprintf(fpout,"\n",arr.c_str());

}

else fprintf(fpout,"\n",arr.c_str());

else if(IsDigit(ch))

{

while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin)))

{

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

fprintf(fpout,"\n",arr.c_str());

}

else switch(ch)

{

case'+':

case'-' :

case'*' :

case'=' :

case'/' :fprintf(fpout,"\n",ch);break;

case'(' :

case')' :

case'[' :

case']' :

case';' :

case'.' :

case',' :

case'{' :

case'}' :fprintf(fpout,"\n",ch);break;

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

if(ch=='=') fprintf(fpout,"\n",':','='); else {fprintf(fpout,"\n",'=');

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

}break;

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

if(ch=='=') fprintf(fpout,"\n",'>','='); if(ch=='>')fprintf(fpout,"\n",'>','>'); else {fprintf(fpout,"\n",'>');

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

}break;

case'

if(ch=='=')fprintf(fpout,"\n",'\n",'') fprintf(fpout,"\n",''); else{fprintf(fpout,"\n",'

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

}break;

default : fprintf(fpout,"\n",ch);

}

}

void main(){

char in_fn[30];

char out_fn[30];

FILE * fpin;

FILE * fpout;

cout

for(;;){

cin>>in_fn;

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

else cout

cout

cin>>out_fn;

fpout=fopen(out_fn,"w");

cout

analyse(fpin,fpout);

fclose(fpin);

fclose(fpout);

cout

cout

system("pause");

}

《编译原理》 课 程 设 计 报 告

题 目

院 系专 业年级班级学 号学生姓名指导教师

2014 年 6 月 19 日

目 录

1 课程设计目的、任务及要求 ..................................................................................................... 1

1.1 课程设计目的 .................................................................................................................. 1 1.2 课程设计任务及要求 ...................................................................................................... 1

1.2.1 课程设计任务 ......................................................................................................... 1 1.2.2 课程设计要求 ......................................................................................................... 1 1.2.3 课程设计环境 ......................................................................................................... 1

2 需求分析 ..................................................................................................................................... 2

2.1系统设计的目标 ............................................................................................................... 2 2.2系统功能需求分析 ........................................................................................................... 2 2.3数据需求分析 ................................................................................................................... 2 3 系统设计 ..................................................................................................................................... 3

3.1总体设计 ........................................................................................................................... 3 3.2总体流程图 ....................................................................................................................... 3 3.3字识别流程图 .................................................................................................................. 4

3.4关键字识别流程图 ........................................................................................................... 4 3.5数字的识别流程图 .......................................................................................................... 5 4 系统实现 ..................................................................................................................................... 6

4.1各部分的功能介绍及分析 ............................................................................................... 6 4.2 算法实现及模拟 .............................................................................................................. 6 5 系统测试 ..................................................................................................................................... 9

5.1结果的测试 ....................................................................................................................... 9

5.1.1运行结果 ................................................................................................................ 9 5.1.2源文件及分析结果 ................................................................................................ 9

6 课程设计小结 ........................................................................................................................... 10

6.1 设计过程 ........................................................................................................................ 10 6.2 困难与收获 .................................................................................................................... 10 7课程设计源代码 ........................................................................................................................ 11

1 课程设计目的、任务及要求

1.1 课程设计目的

1、 理解词法分析器的工作原理。

2、 使用程序设计语言实现一个简单的词法分析器。

1.2 课程设计任务及要求

1.2.1 课程设计任务

完成下述文法所描述的单词符号的词法分析程序。 -->|| -->| -->+|-|*|/|;|(|)|{|}|=|>|==| -->a|…|z|A|…|Z -->0|…|9 -->’ ’ 说明:

1.假定该语言对字母的大小写不敏感,由指定文件读入预分析的源程序,分析结果再写入指定文件。

2.假定语言的关键字为"if","else","then","for","while","do","and","not","or"。 3.程序的功能描述

从左至右扫描源程序的字符串,按照词法规则(正则文法规则)识别出一个个正确的单词,并转换成该单词相应的二元式(种别码、属性值)交给语法分析使用。

本程序规定输出用KeyWord代表关键字,Word代表普通标识符,Digit代表阿拉伯数字,SingleWord代表单分界符,DoubleWord代表双分界符,ERROR代表无法识别的字符。

1.2.2 课程设计要求

每个学生应完成:课题的需求分析,词法分析器的设计及开发,撰写课程设计报告等。

1.2.3 课程设计环境

系统开发平台Windows 7,系统开发工具Microsoft Visual Studio 2010,win32控制台应用程序,应用语言C++语言

2 需求分析

2.1系统设计的目标

能够完成下述文法所描述的单词符号的词法分析程序,并把从一个文件中读取,然后把结果输入并保存到另一个文件中,能完成的文法所描述的单词符号如下: 1、-->|| 2、-->|

3、-->+|-|*|/|;|(|)|{|}|=|>|=|

4、-->a|…|z|A|…|Z -->0|…|9 -->

2.2系统功能需求分析

1、词法分析需求分析主要是功能分析即词法分析,能对文件内容分析,从指定的源文件中读

取内容并把分析结果输入到指定的文件。

2、程序语言的单词符号一般分为五种:关键字、标示符、常数、运算符、界符,该软件能识别出假定关键字为"if","else","then","for","while","do","and","not","or",这些程序语言。

3、能从左至右扫描源程序的字符串,按照词法规则(正则文法规则)识别出一个个正确的单词,并转换成该单词相应的二元式(种别码、属性值)交给语法分析使用。

2.3数据需求分析

1、本程序规定输出用KeyWord代表关键字,Word代表普通标识符,Digit代表阿拉伯数字,SingleWord代表单分界符,DoubleWord代表双分界符,ERROR代表无法识别的字符。

2、通过关键字"if","else","then","for","while","do","and","not","or"能够识别出标识符、无符号整数、分界符、字母并作出相应的分析。

3、假定该语言对字母的大小写不敏感,由指定文件读入预分析的源程序,分析结果再写入指定文件,源程序尽量包含所需要的数据,关键字尽量都含有。

3 系统设计

3.1总体设计

该词法分析器有以下几个功能:关键字的判断、单分界符的判断、双分界符的判断、数字的判断、普通标识符的判断和无法识别字符的判断。除此之外,还要能从指定的源文件中读取程序并把结果输出到指定文件。

3.2总体流程图

图3—1

3.3字识别流程图

判断输入的是否为字符,若为字符将其拼凑成以单词再往下进行判断,若不为字符则判断是否为数字,函数实现:

int IsLetter(char c) { //判断是否为字母

if(((c='a'))||((c='A'))) return 1; else return 0; }

图3—2

3.4关键字识别流程图

判断从文件中读取单词是否为关键字,若为关键字则返回它的编码,若不为关键字,怎判断其是否为数字。主要程序为:

int Iskey(string c){ //关键字判断 int i;

for(i=0;i

if(key[i].compare(c)==0) return 1; } return 0;

}

图3—3

3.5数字的识别流程图

判断输入的字符是否为关键字,若为关键字则返回它的编码,若不为关键字则判断其是否为运算符。主要实现函数:

int IsDigit(char c){ //判断是否为数字 if(c>='0'&&c

else return 0;}

4 系统实现

系统的实现是通过各个函数实现的,实现分为个函数功能的说明、算法实现及模拟。

4.1各部分的功能介绍及分析

1、各函数及功能说明

int IsLetter(char c) /*判断是否为字母*/ int IsDigit(char c) /*判断是否为数字*/ int delimiter(char ch) /*判断是否是分界符*/ key[i].compare(c) /*比较关键字*/ int Iskey(string c) /*判断是否是关键字*/ void analyse(FILE *fpin,FILE *fpout) /*对读取的文件分析*/ 主函数实现对文件的读取,和写入操作。

4.2 算法实现及模拟

1、读入源文件有函数int fgetc(FILE *FILE)实现,文件是否结束及循环读入字符由while循环实现,while(!feof(fpr)),其中fpr=fopen("sourcecode.txt","r")sourcecode.txt为存放源程序的文本文件。

2、对文件的分析程序主要为:

void analyse(FILE *fpin,FILE *fpout){

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='A'))

}

}

ch=ch+32;

arr=arr+ch; ch=fgetc(fpin);

fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)) {

fprintf(fpout,"\n",arr.c_str());

}

else fprintf(fpout,"\n",arr.c_str());

else if(IsDigit(ch)) { }

else switch(ch) { case'+':

while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))) { }

fseek(fpin,-1L,SEEK_CUR);

fprintf(fpout,"\n",arr.c_str());

arr=arr+ch; ch=fgetc(fpin);

case'-' : case'*' : case'=' :

case'/' :fprintf(fpout,"\n",ch);break; case'(' : case')' :

case'[' :

case']' : case';' : case'.' : case',' : case'{' :

case'}' :fprintf(fpout,"\n",ch);break; case':' :{ch=fgetc(fpin);

if(ch=='=') fprintf(fpout,"\n",':','='); else {fprintf(fpout,"\n",'='); fseek(fpin,-1L,SEEK_CUR);} }break;

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

if(ch=='=') fprintf(fpout,"\n",'>','='); if(ch=='>')fprintf(fpout,"\n",'>','>'); else {fprintf(fpout,"\n",'>'); fseek(fpin,-1L,SEEK_CUR);} }break; case'

if(ch=='=')fprintf(fpout,"\n",'\n",'') fprintf(fpout,"\n",''); else{fprintf(fpout,"\n",'

default : fprintf(fpout,"\n",ch); } } }

5 系统测试

5.1结果的测试

5.1.1运行结果

5.1.2源文件及分析结果

1、源文件 : 2、部分分析结果

6 课程设计小结

6.1 设计过程

首先,根据课程设计的任务:使用C++语言编程,实现词法分析器的基本功能,来确定本次程序设计的总体目标及路线。详细阅读课程设计的内容及要求,明确接下来的大致作业。进一步,规划算法,描绘出初步的,总体的流程图。

然后,结合编译原理相关书籍,理解程序系统的基本原理。结合C++语言相关书籍,具体细化程序设计的思路,粗略确定程序的模块划分,功能划分,并确定这些模块和功能应该有c语言的哪些函数来实现。

接下来,着手程序编写。依次完成源文件的读入,字符的判断,文件的读写,结果的输出,并在编程过程中反复完善,多多的测试,及时检测问题是否存在,若存在,立即改善。直到程序足够强壮,功能完善,结果正确为止。

最后,选择考虑到所有可能的测试数据,总体测试词法分析器的性能。更改输出数据的格式,使之布局合理。在需要的地方增添注释信息,删除设计过程中的测试代码或其他冗余代码,美化程序布局,调整整体的程序代码间隔。

6.2 困难与收获

本次课程设计初步培养设计者对编译器设计的思想的了解,加深对编译原理和应用程序的理解。通过设计调试词法分析程序,实现了从程序中分出各种单词的方法,从而加深了对该知识的理解,提高了词法分析的实践能力。

程序的关键点在于对对给出一段程序中的各种单词的分离。在每段程序中,单词种类可以分为:关键字,分界符,算术运算符,关系运算符,标识符和常数。关键字的判断则是通过与已知数组中列出的元素进行对比,得出该单词是否为关键字;分解符,算术运算符,关系运算符的判断与接受到的字符进行比较,得出该字符是否为分解符,算术运算符或者为关系运算符。遇到的一个难题警告 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\documents\visual studio 2010\projects\9\9\9.cpp 101 1 后来找了好久查到了原因。

7课程设计源代码

#include

#include

using namespace std;

#define MAX 22

char ch =' ';

string key[9]={"if","else","then","for","while","do","and","not","or"};

int Iskey(string c){ //关键字判断

int i;

for(i=0;i

if(key[i].compare(c)==0) return 1;

}

return 0;

}

int IsLetter(char c) { //判断是否为字母

if(((c='a'))||((c='A'))) return 1;

else return 0;

}

int IsDigit(char c){ //判断是否为数字

if(c>='0'&&c

else return 0;

}

void analyse(FILE *fpin,FILE *fpout){

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='A'))

ch=ch+32;

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

if (Iskey(arr))

{

fprintf(fpout,"\n",arr.c_str());

}

else fprintf(fpout,"\n",arr.c_str());

else if(IsDigit(ch))

{

while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin)))

{

arr=arr+ch;

ch=fgetc(fpin);

}

fseek(fpin,-1L,SEEK_CUR);

fprintf(fpout,"\n",arr.c_str());

}

else switch(ch)

{

case'+':

case'-' :

case'*' :

case'=' :

case'/' :fprintf(fpout,"\n",ch);break;

case'(' :

case')' :

case'[' :

case']' :

case';' :

case'.' :

case',' :

case'{' :

case'}' :fprintf(fpout,"\n",ch);break;

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

if(ch=='=') fprintf(fpout,"\n",':','='); else {fprintf(fpout,"\n",'=');

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

}break;

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

if(ch=='=') fprintf(fpout,"\n",'>','='); if(ch=='>')fprintf(fpout,"\n",'>','>'); else {fprintf(fpout,"\n",'>');

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

}break;

case'

if(ch=='=')fprintf(fpout,"\n",'\n",'') fprintf(fpout,"\n",''); else{fprintf(fpout,"\n",'

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

}break;

default : fprintf(fpout,"\n",ch);

}

}

void main(){

char in_fn[30];

char out_fn[30];

FILE * fpin;

FILE * fpout;

cout

for(;;){

cin>>in_fn;

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

else cout

cout

cin>>out_fn;

fpout=fopen(out_fn,"w");

cout

analyse(fpin,fpout);

fclose(fpin);

fclose(fpout);

cout

cout

system("pause");

}


相关内容

  • VSC#词法分析程序设计-编译原理课程设计说明书(含程序)
  • 课 程 设 计 说 明 书 设计题目: 词法分析程序设计 课 程 设 计 任 务 书 一.课程设计题目: 词法分析程序设计 二.课程设计主要参考资料 (1) 韩太鲁等,编译原理. 石油大学出版社.2007.9 (2) C#程序设计--Windows项目开发 清华大学出版社 三.课程设计应解决的主要问 ...

  • 词法分析程序的构造
  • 通达学院 题 专 学 班 指 指 日II 词法分析程序的构造 业 生 姓 名 级 学 号 导 教 师 导 单 位 计算机学院计算机科学与技术系 期 专业课程设计目: 词法分析程序的构造 一. 课题内容和要求 通过状态转换图构造C或者PASCAL语言子集的词法分析程序. 原理解析:选取语言,例如选取了 ...

  • 编译原理_词法分析器_实验报告
  • 词法分析器实验报告 实验目的: 设计.编制.调试一个词法分析子程序-识别单词,加深对词法分析原理的理解. 功能描述: 该程序要实现的是一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字.标识符.常数.运算符.分隔符五大类.并依次输出各个单词的内部编码及单词符号自身值.(遇到 ...

  • 张瑞编译原理实验报告
  • 黑龙江大学 "编译原理课程设计"读书报告 学院 年级 专业 学号 姓名 报告日期 成绩 软件学院 2012级 软件工程 20122515 张瑞 2014年6月28日 黑龙江大学计算机科学技术学院 黑龙江大学软件学院 概述 "编译原理"课程是计算机专业中一门重要 ...

  • 简单的C语言编译器
  • 中国好资料 一个简单的C 语言编译器 一.小组成员 朱嘉俊(3991102161) 王筱(3991102168) 朱杭(3991102162) 朱林(3991102094)计算机996计算机996计算机996计算机994 二.运行方式 在DOS 环境下运行: Cminus.exe -h 三.概述 经 ...

  • 编译原理课程设计c版
  • 本文由leishensc贡献 doc文档可能在WAP端浏览体验不佳.建议您优先选择TXT,或下载源文件到本机查看. 2008-2009 学年第二学期 学年第二 <编译原理> 课程设计报告 学院(系) : 班 级: 计算机科学与技术学院 08 级 学生姓名: 学 号: 指导教师: 时间: ...

  • 编译原理实验指导书(2015)
  • LIAOCHENG UNIVERSITY 编译原理 实验指导书 聊城大学计算机学院 2011年3月 目 录 <编译原理>课程实验教学大纲 ............................. 1 实验一 词法分析器的设计 .............................. ...

  • 编译原理--教学大纲
  • <计算机编译原理>课程大纲 一.适用对象 本课程适用于计算机科学与技术以及相关专业的网络教育.成人教育学生. 二.课程性质 本课程是计算机科学与技术专业学生的专业基础课. 编译原理课程是计算机专业的一门主干课程.课程介绍程序设计语言编译程序构造的一般原理.基本设计方法.主要实现技术和一些 ...

  • [编译原理]一个词法分析器源码的剖析
  • 一,词法分析器 作用:读取源程序的输入字符.将他们组成词素,生成并输出一个词法单元序列 二,设计原理 1)C程序语言的符号分类:关键字.标识符.常数.运算符.界符 2)词法分析器的二元输出: 3)正规式和状态转换图 4)程序说明: 1>main 中打开源码文件,从第一个字符流读取 2>如 ...