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

📄 小语言词法分析.txt

📁 一个小语言的词法分析程序
💻 TXT
字号:
void parse(FILE* fpin,FILE* fpout)
{
	char arr[MAXBUF];//读出的最长的字符串不超过MAXBUF,MAXBUF定义为255,够长了我想
	int i=0;//分析含字母的字符串用
	int j=0;//分析纯数字的字符串用
     

	while(1)
	{
	fscanf(fpin,"%c",&ch);//从输入文件中读入一个字符
		if( ch=='' ''|| ch ==''\t'')//过滤掉空格和tab
			;
		else if( ch==''\n'')//回车换行符,为下面进行错误判断
			lineno++;
		else if( IsDigit(ch))//读入的是数字
		{
			while(IsDigit(ch))
			{
				 
				arr[j] = ch;
				j++;
				fscanf(fpin,"%c",&ch);
				
			}
			
		    fseek(fpin,-1L,SEEK_CUR);//文件指针后退一个字节

			char* temp1 =(char*)malloc(j+1);/
			memcpy(temp1,arr,j);
			temp1[j] =''\0'';//把数组里面的内容拷贝到连外一个数组里面,因为我定义的
			//arr为255个字节,实际上写不到那么多,所以只拷贝实际上有数据的

			j=0;//恢复初始状态,以备下次使用
			fprintf(fpout,"%s\t\t%d\n",temp1,2);//常数
		
			free(temp1);//释放内存
		    
			
		}

		else if(IsAlpha(ch))//是字母开头的
		{
		
			while(IsAlpha(ch) || IsDigit(ch))
			{
				arr[i] =ch;
				i++;
				fscanf(fpin,"%c",&ch);
				
			}
			fseek(fpin,-1L,SEEK_CUR);
			
			char* temp = (char*)malloc(i+1) ;
			memcpy(temp,arr,i);
			temp[i] =''\0'';

			i=0;
			/*基本思想同处理数字的*/
		
          if(FindOK(temp))//FindOK函数在关键字表中查找和temp字符串相同的,找到就返回类别编号
		  {
			 
			 fprintf(fpout,"%s\t\t%d \n",temp,FindOK(temp));
			 
		  }
		  else
		  {
			  fprintf(fpout,"%s\t\t%d\n",temp,1);//标示符号
			  
		  }
		  free(temp);
		}
	
		//以下为2字节的运算符号
		else if( ch=='':'')//符号“:=”
		{
			fscanf(fpin,"%c",&ch);
			if(ch==''='') 
				fprintf(fpout,"%s\t\t%d\n",":=",20);
			
		else 	
			fprintf(fpout,"error in compileing %d lines unknown character %c \n",lineno,ch);//出错了
		}

		else if(ch==''>'')//符号 “> “ 和”>=”
		{  
			fscanf(fpin,"%c",&ch);
			if(ch==''='')
			fprintf(fpout,"%s\t\t%d\n",">=",16);
			else
			fprintf(fpout,">\t\t15\n");
		}
		else if( ch==''<'') //符号 “< “ 和”<=”

		{
			fscanf(fpin,"%c",&ch);
			if(ch==''='')
			{fprintf(fpout,"<=\t\t18\n");}
			else if( ch==''>'')
			{fprintf(fpout,"<>\t\t19");}
			else 
			{fprintf(fpout,"<\t\t19\n");}
		}
	

		else {
	   	//以下为一个字节的运算符号
		if(ch==''-'') {fprintf(fpout,"%s\t\t%d\n",''-'',10);continue;}//在文件中输出为“-   10”
		if(ch=='';'') {fprintf(fpout,";\t\t21\n");continue;}
		if(ch==''+'') {fprintf(fpout,"+\t\t9\n");continue;}
		if(ch==''*'') {fprintf(fpout,"*\t\t11\n");continue;}
		if(ch==''/'') {fprintf(fpout,"/ \t\t12\n");continue;}
		if(ch==''('') {fprintf(fpout,"(\t\t13\n");continue;}
		if(ch=='')'') {fprintf(fpout,")\t\t14\n");continue;}
		if(ch==''.'') {fprintf(fpout,".\t\t22\n");continue;}
		if(ch=='','') {fprintf(fpout,",\t\t23\n");continue;}
		if(ch==''#'') break;//分析结束
		else fprintf(fpout,"error in compileing %d lines unknown character %c \n",lineno,ch);//出错了,输出出错信息
		}
	}
}

⌨️ 快捷键说明

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