📄 chifayuchuli.cpp
字号:
// 这个程序是词法分析程序
# include<stdio.h>
# include<stdlib.h>
// 错误显示
void error()
{
printf("\nError!!");
}
//词法分析
accidence_analyse_1(char *in_file,char *out_file)
{
FILE *in,*out;
char ch,str[20];
int i,j;
if((in=fopen(in_file,"r"))!=NULL && (out=fopen(out_file,"w"))!=NULL) //打开输入文件输出文件
{
ch=fgetc(in);
while(!feof(in))
{
if(ch==32 || ch==10) // 空格和回车的处理
{
ch=fgetc(in);
continue;
}
if(ch==';') //分号的处理
{
ch=fgetc(in);
if(ch==10)
{
ch=fgetc(in);
continue;
}
else
{
fputc(';',out);
fputc(ch,out);
fputc('@',out);
ch=fgetc(in);
continue;
}
}
if(ch=='=') // 等号的处理
{
ch=fgetc(in);
if(ch=='=')
{
fputc('=',out);
fputc('=',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else if((ch>='a' && ch<='z') ||(ch>='A' && ch<='Z') || ch=='('||(ch>='0'&&ch<='9'))
{
fputc('=',out);
fputc('@',out);
continue;
}
else
error();
}
if(ch=='+') //“+”和“++”的处理
{
ch=fgetc(in);
if(ch=='+')
{
fputc('+',out);
fputc('+',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
fputc('+',out);
fputc('@',out);
continue;
}
}
if(ch=='-') //“-”和“--”的处理
{
ch=fgetc(in);
if(ch=='-')
{
fputc('-',out);
fputc('-',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
fputc('-',out);
fputc('@',out);
continue;
}
}
if(ch=='!') //“!=”的处理
{
ch=fgetc(in);
if(ch=='=')
{
fputc('!',out);
fputc('=',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
error();
}
}
if(ch=='>') //“>”和“>=”的处理
{
ch=fgetc(in);
if(ch=='=')
{
fputc('>',out);
fputc('=',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
fputc('>',out);
fputc('@',out);
continue;
}
}
if(ch=='<') //“<”和“<=”的处理
{
ch=fgetc(in);
if(ch=='=')
{
fputc('<',out);
fputc('=',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
fputc('<',out);
fputc('@',out);
continue;
}
}
if(ch=='*'||ch=='/'||ch=='%'||ch=='('||ch==')'||ch=='{'||ch=='}'||ch==',') //“*”、“╱”、“()”、“{}”和“%”的处理
{
fputc(ch,out);
fputc('@',out);
ch=fgetc(in);
continue;
}
if(ch=='&') //“&&”(与)的处理
{
ch=fgetc(in);
if(ch=='&')
{
fputc('&',out);
fputc('&',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
error();
}
}
if(ch=='|') //“||”(或)的处理
{
ch=fgetc(in);
if(ch=='|')
{
fputc('|',out);
fputc('|',out);
fputc('@',out);
ch=fgetc(in);
continue;
}
else
{
error();
}
}
//保留字、标识符的处理
i=0;
str[i]=ch;
ch=fgetc(in);
while(ch!='+' && ch!='-' && ch!='*' && ch!='/' && ch!='(' && ch!=')' && ch!=',' && ch!=';' && ch!='%'&& ch!='=' && ch!='>' && ch!='<' && ch!=32 && ch!=10 && !feof(in))
{
i++;
str[i]=ch;
ch=fgetc(in);
}
j=0;
while(j<=i)
{
fputc(str[j],out);
j++;
}
fputc('@',out);
}
}
fclose(in);
fclose(out); //关文件
}
void main()
{
accidence_analyse_1("c3a.txt","c3b.txt");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -