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

📄 cifa001.cpp

📁 前些天写了个小语言的词法分析程序
💻 CPP
字号:
#include<string.h>
#include<stdio.h>
#include<process.h>
const int max=40;

void main()
{
	FILE *in,*out;
	string chars[max];
	char c;
	if(in==fopen("e:\\test.txt","r"))//访问原文件
	{
		printf("cannot find the file!!\n");
		exit(0);
	}
	if(out==fopen("e:\\output.txt","w"))//生成目标文件
	{
		printf("cannot create the file\n");
		exit(1);
	}
	int k,i;
	c=fgetc(in);
	while(c!="@")
	{
//////////////////////////////////////////////////////////////////
//////////////////                      常数编码
		/*if((c>='a'&&c<='z')||(c>='A'&&c<='Z')
		 ||(cr>='0'&&c<='9')||c=='('||c==')'
		 ||c=='{'||c=='}'||c=='>'||c=='<'
		 ||c==';'||c==':'||c=='+'||c=='-'
		 ||c=='*'||c=='/'||c=='='||c=='!'
		 ||c=='&'||(k=c)=='\n'||c==' '||c=='['||c==']')*/
	//	{
			i=0;
			chars[i++]=c;

	//	}
			

	}
}

char F1(FILE *in,FILE *out,char *chars,char c)//常量
{
	char ch;
	if(c>='0'&&c<='9')
	{
		chars[i++]=c;
		ch=c;
		c=fgetc(in);
	}
	while(c>='0'&&c<='9')
	{
		chars[i++]=c;
		ch=c;
		c=fgetc(in);
	}
	if(c=='.')
	{
		chars[i++]=c;
		ch=c;
		c=fgetc(in);
		while(c>='0'&&c<='9')
		{
			chars[i++]=c;
			ch=c;
			c=fgetc(in);
		}
	}
	else
	{
		chars[i++]='\0';
		fprintf(out,"%s%d,%c%s%c%s\n","(",2,'"',chars,'"',")");
	}
	return ch;
}

void F2(FILE *in,FILE *out,char *chars,char c)//标识符和关键字
{
	if(c>='a'&&c<='z'||c>='A'&&c<='Z')
	{	
		i=0;
		chars[i++]=c;
		while(c>='a'&&c<='z'||c>='A'&&c<='Z')
			||c>='0'&&c<='9'||c=="_")
		{
			chars[i++]=c;
			c=fgetc(in);
		}
		chars[i++]='\0';
		if(strcmp(chars,"Auto")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",10,"",chars,"",">");
		else if(strcmp(chars,"Double")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",11,"",chars,"",">");
		else if(strcmp(chars,"Int")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",12,"",chars,"",">");
		else if(strcmp(chars,"Struct")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",13,"",chars,"",">");
		else if(strcmp(chars,"Break")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",14,"",chars,"",">");
		else if(strcmp(chars,"Else")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",15,"",chars,"",">");
		else if(strcmp(chars,"Long")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",16,"",chars,"",">");
		else if(strcmp(chars,"Switch")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",17,"",chars,"",">");
		else if(strcmp(chars,"Case")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",18,"",chars,"",">");
		else if(strcmp(chars,"Enum")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",19,"",chars,"",">");
		else if(strcmp(chars,"Register")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",20,"",chars,"",">");
		else if(strcmp(chars,"Typedef")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",21,"",chars,"",">");
		else if(strcmp(chars,"Char")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",22,"",chars,"",">");
		else if(strcmp(chars,"Extern")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",23,"",chars,"",">");
		else if(strcmp(chars,"Return")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",24,"",chars,"",">");
		else if(strcmp(chars,"Union")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",25,"",chars,"",">");
		else if(strcmp(chars,"Const")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",26,"",chars,"",">");
		else if(strcmp(chars,"Float")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",27,"",chars,"",">");
		else if(strcmp(chars,"Short")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",28,"",chars,"",">");
		else if(strcmp(chars,"Unsigned")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",29,"",chars,"",">");
		else if(strcmp(chars,"Continue")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",30,"",chars,"",">");
		else if(strcmp(chars,"For")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",31,"",chars,"",">");
		else if(strcmp(chars,"Signed")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",32,"",chars,"",">");
		else if(strcmp(chars,"Void")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",33,"",chars,"",">");
		else if(strcmp(chars,"Default")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",34,"",chars,"",">");
		else if(strcmp(chars,"Goto")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",35,"",chars,"",">");
		else if(strcmp(chars,"Sizeof")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",36,"",chars,"",">");
		else if(strcmp(chars,"Volatile")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",37,"",chars,"",">");
		else if(strcmp(chars,"Do")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",38,"",chars,"",">");
		else if(strcmp(chars,"If")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",39,"",chars,"",">");
		else if(strcmp(chars,"While")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",40,"",chars,"",">");
		else if(strcmp(chars,"Static")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",41,"",chars,"",">");
		else if(strcmp(chars,"define")==0)
		{	
			c=jumpping(in,c);
			fprintf(out,"%s%d,%c%s%c%s","<",41,"",chars,"",">");
		}
		else fprintf(out,"%s%d,%c%s%c%s","<",1,"",chars,"",">");
		
//		chars[i++]='\0';
//		fprintf(out,"%s%d,%c%s%c%s\n","(",1,'"',chars,'"',")");
	}
}

char F2(FILE *in,FILE *out,char *chars,char c)//运算符
{
	char ch;
	if(c=='='||c=='+'||c=='*'||
		c=='-'||c=='/'||c=='%'||
		c=='<'||c=='>'||c==/*'&'*/||
		c=='^'||c=='|'||c=='!'||
		c=='?'||c=='.')
	{
		i=0;chars[i++]=c;
		ch=c;
		c=fgetc(in);
		while(c=='='||c=='+'||c=='*'||
			c=='-'||c=='/'||c=='%'||
			c=='<'||c=='>'||/*c=='&'*/||
			c=='^'||c=='|'||c=='!'||
			c=='?'||c=='.')
		{
			chars[i++]=c;
			ch=c;
			c=fgetc(in);
		}
		chars[i++]='\0';
		else if(strcmp(chars,"=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",101,"",chars,"",">");
		else if(strcmp(chars,"+=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",102,"",chars,"",">");
		else if(strcmp(chars,"*=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",103,"",chars,"",">");
		else if(strcmp(chars,"-=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",104,"",chars,"",">");
		else if(strcmp(chars,"/=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",105,"",chars,"",">");
		else if(strcmp(chars,"%=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",106,"",chars,"",">");
		else if(strcmp(chars,"<<=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",107,"",chars,"",">");
		else if(strcmp(chars,">>=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",108,"",chars,"",">");
		else if(strcmp(chars,"&=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",109,"",chars,"",">");
		else if(strcmp(chars,"^=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",110,"",chars,"",">");
		else if(strcmp(chars,"|=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",111,"",chars,"",">");
		else if(strcmp(chars,"+")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",112,"",chars,"",">");
		else if(strcmp(chars,"-")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",113,"",chars,"",">");
		else if(strcmp(chars,"*")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",114,"",chars,"",">");
		else if(strcmp(chars,"/")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",115,"",chars,"",">");
		else if(strcmp(chars,"%")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",116,"",chars,"",">");
		else if(strcmp(chars,"++")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",117,"",chars,"",">");
		else if(strcmp(chars,"--")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",118,"",chars,"",">");
		else if(strcmp(chars,">")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",119,"",chars,"",">");
		else if(strcmp(chars,">=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",120,"",chars,"",">");
		else if(strcmp(chars,"<")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",121,"",chars,"",">");
		else if(strcmp(chars,"<=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",122,"",chars,"",">");
		else if(strcmp(chars,"==")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",123,"",chars,"",">");
		else if(strcmp(chars,"!=")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",124,"",chars,"",">");
//		else if(strcmp(chars,"&&")==0)
//			fprintf(out,"%s%d,%c%s%c%s","<",125,"",chars,"",">");
//		else if(strcmp(chars,"&")==0)
//			fprintf(out,"%s%d,%c%s%c%s","<",126,"",chars,"",">");
		else if(strcmp(chars,"|")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",127,"",chars,"",">");
		else if(strcmp(chars,"||")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",128,"",chars,"",">");
		else if(strcmp(chars,"!")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",129,"",chars,"",">");
		else if(strcmp(chars,"?")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",130,"",chars,"",">");
		else
			fprintf(out,"%s%d,%c%s%c%s","<",131,"",chars,"",">");
	}
	return ch;
}

char F3(FILE *in,FILE *out,char *chars,char c)//分隔符
{
	char ch;
	if(c==','||c==';'||c='(||
		c==')'||c=='['||c==']'||
		c=='{'||c=='}'||c=='#'||
		c=='&')
	{
		i=0;chars[i++]=c;
		ch=c;
		c=fgetc(in);
		chars[i++]='\0';
		else if(strcmp(chars,",")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",200,"",chars,"",">");
		else if(strcmp(chars,";")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",201,"",chars,"",">");
		else if(strcmp(chars,"(")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",202,"",chars,"",">");
		else if(strcmp(chars,")")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",203,"",chars,"",">");
		else if(strcmp(chars,"[")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",204,"",chars,"",">");
		else if(strcmp(chars,"]")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",205,"",chars,"",">");
		else if(strcmp(chars,"{")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",206,"",chars,"",">");
		else if(strcmp(chars,"}")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",207,"",chars,"",">");
		else if(strcmp(chars,"#")==0)
			fprintf(out,"%s%d,%c%s%c%s","<",208,"",chars,"",">");
//		else if(strcmp(chars,"&")==0)
//			fprintf(out,"%s%d,%c%s%c%s","<",209,"",chars,"",">");
	}
	return ch;
}

void F3(FILE *in,FILE *out,char *chars,char c)//判断&符号的编码
{
	if(c=='&')
	{
		char d;
		i=0;
		chars[i++]=c;
		if((d=fgetc(in))=='&')
		{
			chars[i++]=d;
			chars[i++]='\0';
			fprintf(out,"%s%d,%c%s%c%s","<",125,"",chars,"",">");
		}
		else
	}
}
	

⌨️ 快捷键说明

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