源程序的预处理及词法分析程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//词法分析

#include

#include

#include

#include

using namespace std;

void chu_li_1(FILE *p,FILE *q) //处理空格

{

charch;

if((p=fopen("输出文件.txt","r+"))==NULL) //shili3.txt为中转文件{

cout<<"输出文件打开错误"<

}

if((q=fopen("中转文件.txt","w+"))==NULL) //保存处理后程序的文件{

cout<<"中转文件打开错误"<

}

while(!feof(p))

{

ch=fgetc(p);

if(ch!=32)

fputc(ch,q); //保留一个空格

else if(ch==32) //将多个空格删除

{

fputc(ch,q);

while(1&&(ch!=EOF))

{

ch=fgetc(p);

if(ch!=32) //空格结束

{

fputc(ch,q);

break;

}

}

}

}

fclose(p);

fclose(q);

}

void chu_li_2(FILE *p,FILE *q) //处理换行

{

charch;

if((p=fopen("中转文件.txt","r+"))==NULL)

{

cout<<"中转文件打开错误"<

}

if((q=fopen("输出文件.txt","w+"))==NULL)

{

cout<<"输出文件打开错误"<

}

while((ch=fgetc(p))!=EOF)

{

if(ch!='\n') //忽略换行符

fputc(ch,q);

}

fclose(p);

fclose(q);

}

void chu_li_3(FILE *p,FILE *q) //处理注释

{

charch;

if((p=fopen("输入文件.txt","r+"))==NULL) //程序输入文件{

if((p=fopen("输入文件.txt","w+"))==NULL) //程序输入文件

{

cout<<"输入文件打开错误"<

}

}

if((q=fopen("中转文件.txt","w+"))==NULL)

{

cout<<"中转文件打开错误"<

}

while((ch=fgetc(p))!=EOF)

{

if(ch==47) //程序中发现字符'/'

{

ch=fgetc(p);

if(ch==42) //判断字符后'/'是否有字符'*'

{

while(1)

{

ch=fgetc(p); //忽略注释内容

if(ch==42) //直到有'*'出现

{

ch=fgetc(p);

if(ch==47) //判断结束

break;

}

}

}

else if(ch==47) //判断以"//"开头形式的注释

{

while((ch!='\n')&&((ch=fgetc(p))!=EOF))

ch=fgetc(p);

}

else

{

fputc('/',q); //将不属于注释标示符的字符'/'写入文件

fputc(ch,q); //

}

}

else

fputc(ch,q);

}

fclose(p);

fclose(q);

}

void Y_C_L(FILE *p,FILE *q) //预处理函数

{

chu_li_3(p,q); //处理注释

chu_li_2(p,q); // 处理换行

chu_li_1(p,q); //处理空格

}

voidFen_xi()

{

FILE *p,*q;

charch;

intm,n=0;

char letter[20000]="\0";

char *rwtab[44]={"#","main","if","then","while","do","static", "int"," double","struct","break","else","long","switch",

"case","typedef","char","return","const","float","short",

"continue","for","void","sizeof","ID","NUM","+","-","*","/",

":",":=","<","<>","<=",">",">=","=","default","include",";","(",

")"};

if((p=fopen("中转文件.txt","r+"))==NULL)

相关文档
最新文档