📄 cifafenxi.c
字号:
else if (ch == '*')
{ /* *判断 */
GetAChar(fp1,&ch);
if (ch == '*')
{ GetAChar(fp1,&ch);
if (ch == '*')
{
printf("此处有错误的表示方式~\n");
fprintf(fp3,"<--$error,%d,%d,此处有错误的表示方式~-->\n",code,hang);
}
else
{
if (Pha(ch))
{
while (Pha(ch) ||Num(ch))
{
Join(string,&ch);
GetAChar(fp1,&ch);
}
code=63;
printf("<--$pingfang,%d,%d,**%s-->\n",code,hang,string);
}
else
{
code=53;
printf("<--$POWER,%d,%d,**-->\n",code,hang);
fprintf(fp2,"<--$POWER,%d,%d,**-->\n",code,hang);
fprintf(fp6,"<--%d,**-->\n",hang);
}
}
}
else
{ if (Pha(ch))
{
while (Pha(ch) ||Num(ch))
{
Join(string,&ch);
GetAChar(fp1,&ch);
}
code=62;
printf("<--$cheng,%d,%d,*%s-->\n",code,hang,string);
}
/* Return_A(fp1,&ch); */
else
{ Return_A(fp1,&ch);
code=54;
printf("<--$STAR,%d,%d,*-->\n",code,hang);
fprintf(fp2,"<--$STAR,%d,%d,*-->\n",code,hang);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
}
}
else if (ch == ';')
{ /* ;判断 */
code=55;
printf("<--$SEMICOLON,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp2,"<--$SEMICOLON,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if (ch == '(')
{ /* (判断 */
code=56;
printf("<--$LPAR,%d,%d,(-->\n",code,hang);
fprintf(fp2,"<--$LPAR,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if (ch == ')')
{ /* )判断 */
code=57;
printf("<--$RPAR,%d,%d,%c,-->\n",code,hang,ch);
fprintf(fp2,"<--$RPAR,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if (ch == '{')
{ /* {判断 */
code=58;
printf("<--$LBRACE,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp2,"<--$LBRACE,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if (ch == '}')
{ /* }判断 */
code=59;
printf("<--$RBRACE,%d,%d,}-->\n",code,hang);
fprintf(fp2,"<--$RBRACE,%d,%d,}-->\n",code,hang);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if (ch == '"')
{ /* ”判断 */
code=65;
printf("<--$YINHAO,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp2,"<--$YINHAO,%d,%d,%c-->\n",code,hang,ch);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if(ch=='\b')
{ /* 转义符\b判断 */
code=66;
printf("<--$ZHUANYI,%d,%d,b-->\n",code,hang);
fprintf(fp2,"<--$ZHUANYI,%d,%d,b-->\n",code,hang);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
else if(ch=='\t')
{ /* 转义符\t判断 */
code=66;
printf("<--$ZHUANYI_1,%d,%d,t-->\n",code,hang);
fprintf(fp2,"<--$ZHUANYI_1,%d,%d,t-->\n",code,hang);
fprintf(fp6,"<--%d,%c-->\n",hang,ch);
}
/* GetAChar(fp1,&ch);
else if(ch=='"')
{ code=63;
GetAChar(fp1,&ch);
while(ch!='"'&&ch!=EOF)
{
Join(string,&ch);
GetAChar(fp1,&ch);
if(ch==EOF)
{ printf("'''' 无结尾,此处有错误,请改正~\n");
getch();
return(0);
}
}
printf("<--$talk,%d,%d,''%s''-->\n",code,hang,string);
fprintf(fp2,"<--$talk,%d,%d,''%s''-->\n",code,hang,string);
}*/
else if(ch=='<')
{ code=64;
GetAChar(fp1,&ch);
while(ch!='>')
{
Join(string,&ch);
GetAChar(fp1,&ch);
if(ch==EOF)
{ printf("'<' 无结尾,此处有错误,请改正~\n");
fprintf(fp3,"<--$error,%d,%d,此处'<' 无结尾-->\n",code,hang);
getch();
return(0);
}
}
printf("<--$talk_2,%d,%d,<%s>-->\n",code,hang,string);
fprintf(fp2,"<--$talk_2,%d,%d,<%s>-->\n",code,hang,string);
}
else if (ch=='/')
{
GetAChar(fp1,&ch);
if (ch == '*')
{
code=61;
GetAChar(fp1,&ch);
while(ch != '*'&&ch !=EOF)
{
Join(string,&ch);
GetAChar(fp1,&ch);
}
GetAChar(fp1,&ch);
if(ch=='/')
{ printf("<--$note,%d,%d,/*%s*/-->\n",code,hang,string);
fprintf(fp2,"<--$note,%d,%d,/*%s*/-->\n",code,hang,string);
}
else
{
printf("\n此处有错\n");
fprintf(fp3,"<--$error,%d,%d,此处存在注释不完全错误-->\n",code,hang);
}
}
else
{
Return_A(fp1,&ch);
code=62;
printf("<--$XIAHUA,%d,%d,/-->\n",code,hang);
fprintf(fp2,"<--$XIAHUA,%d,%d/-->\n",code,hang);
}
}
fclose(fp4) ;
}
printf("词法分析结束,按任意键结束!");
getch();
}
/* 主程序 */
void main()
{
FILE *fp1,*fp2,*fp3,*fp5,*fp6;
char ch,ch1;
char file_name;
printf("请输入文件名:\n");
scanf("%s",&file_name);
if((fp1=fopen(&file_name,"rt"))==NULL)
{
printf("文件名有错,或者文件路径有错,按任意键重新输入: \n");
scanf("%s",&file_name);
if((fp1=fopen("in.txt","rt"))==NULL)
{ printf("文件名有错,或者文件路径有错,请核实后运行,按任意键退出~\n");
getch();
exit(1);
}
}
printf("分析结果为(保存文件为out.txt):\n");
printf("输出的格式为:<--$助记符,种别编码,行号,代码-->\n");
/* ch=fgetc(fp1);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(fp1);
}
*/
if((fp2=fopen("out.txt","wt+"))==NULL)
{
printf("不能创建out.txt文件,按任意键退出~");
getch();
exit(1);
}
if((fp3=fopen("error.txt","wt+"))==NULL)
{
printf("不能创建error.txt文件,按任意键退出~");
getch();
exit(1);
}
if((fp5=fopen("biaoshifu.txt","wt+"))==NULL)
{
printf("不能创建biaoshifu.txt文件,按任意键退出~");
getch();
exit(1);
}
if((fp6=fopen("fuhao.txt","wt+"))==NULL)
{
printf("不能创建fuhao.txt文件,按任意键退出~");
getch();
exit(1);
}
cifafenxi(fp1,fp2,fp6,fp3,fp5);
fclose(fp1);
fclose(fp2);
fclose(fp3);
fclose(fp5);
fclose(fp6);
}
/*======================最后再次鄙视下不排队检查作业的人们=====================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -