《编译原理》 课 程 设 计 报 告
题 目
院 系专 业年级班级学 号学生姓名指导教师
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");
}