⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一个简单的编译器,接收表达式,并输出后缀表达式或者编译过程,可以计算的输出计算结果
💻 C
字号:
/****   main.c   *****************************************/

#include "global.h"

int main(int argc,char *argv[])
{
	if(argc!=4){
		printf("Usage:pro_name -s inputname outname\n\
			pro_name -c intputname outname\n");
		return 0;
	}
	if(argv[1][1]!='s' && argv[1][1]!='c'){
		printf("Usage:pro_name -s inputname outname\n\
			pro_name -c intputname outname\n");
		return 0;
	}
	flags=argv[1][1];
	if((fp1=fopen(argv[2],"r"))==NULL){
		printf("file %s can not open!\n",argv[2]);
		return 0;
	}
	if((fp2=fopen(argv[3],"w"))==NULL){
		printf("%s can not open!\n",argv[3]);
		return 0;
	}
    init();
	if(flags=='c'){
		while(!feof(fp1)){
			parse();
			fputc('\n',fp2);
		}
	}
	else {
		int length,i,data;
		char	buf[BSIZE]; //存放字母
		allnum=0;
		while(!feof(fp1)){	
			length=1;
			while((data=fgetc(fp1))!='\n'){
				length++;
				if(isalpha(data)){  //当前字符为字母,则判断它是不是MOD和 DIV
					i=0;			//length记录扫描的字符数
					while(isalpha(data)){
						buf[i]=data;
						i++;
						data=fgetc(fp1);
						length++;
					}
					buf[i]='\0';
					if(!strcmp(buf,"MOD") || !strcmp(buf,"DIV"))	continue;
					else {
						allnum=1;
						length--;
						break;
					}
				}
			}		
			fseek(fp1,-length,SEEK_CUR);//返回行首
			if(!allnum)	InitStack(&Fig);
			parse();
			if(!allnum)			fprintf(fp2,"%d\n",Pop(&Fig));
			else				fprintf(fp2,"\n");
			allnum=0;
			while(!feof(fp1)){
				if((data=fgetc(fp1))=='\n')	; //消除多余的回车
				else {
					ungetc(data,fp1);
					break;
				}
			}
		}
		DestroyStack(&Fig);
	}
	fclose(fp1);
	fclose(fp2);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -