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

📄 示例代码.txt

📁 用C++编写的编译原理词法分析器读磁盘文件进行词法分析
💻 TXT
字号:
#include"stdafx.h"
#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
#include <malloc.h> 
#include <conio.h> 

char *ReserveWords[42] = {"false","NULL","true","include","stdafx","iostream","using","namespace","cin","cout",
  "auto","break","case","char","const","continue","default","do","double",
                 "else","enum","extern","float","for","goto","if","int","long","register",
                 "return","short","signed","sizeof","static","struct","switch","typedef",
                 "union","unsigned","void","volatile","while"
};
int IsLetter(char ch) 
{ 
       if(isalpha(ch)) return 1; 
       return 0; 
} 
int IsDigit(char ch) 
{
       if(isalnum(ch)) return 1; 
       return 0; 
} 
int IsSpace(char ch) 
{
       if(isspace(ch)) return 1; 
       return 0; 
} 
void GetChar(FILE *fp,char *ch) 
{
     *ch = fgetc(fp); 
} 
void GetBC(FILE *fp,char *ch) 
{
do 
{ 
       GetChar(fp,ch); 
}
while(IsSpace(*ch)&&(*ch != EOF)); 
} 
void Retract(FILE *fp,char *ch) 
{ 
       fseek(fp,-1,1); 
       ch =""; 
} 
char Reserve(char *strToken) 
{
	int i;
	for(i=0;i<42;i++)
	{
		
		
       if(strcmp(strToken,ReserveWords[i]) == 0) 
       return '0';


	}
 
return '1';

} 
void Concat(char *strToken, char *ch) 
{
         int i; 
        for(i=0;i<80;i++) { 
        if(*strToken == NULL) { 
        *strToken = *ch; 
         break; 
} 
      strToken++; 
} 
} 

int lexSubFunc(FILE *fp1,FILE *fp2) 
{
       char ch,code; 
        int i; 
       char strToken[80]; 
       while(1) 
	   { 
         GetBC(fp1,&ch); 
         for(i=0;i<80;i++)
         strToken[i]=NULL; 
         if(ch == EOF) return 0; 
         if (IsLetter(ch)) 
		 { 
           while (IsLetter(ch) || IsDigit(ch)) 
		   { 
              Concat(strToken,&ch); 
              GetChar(fp1,&ch); 
           } 
             Retract(fp1,&ch); 
           code = Reserve(strToken);

         if (code == '0') 
		 { 
             printf("%s.......关键字\n",strToken); 
             fputs(strToken,fp2);fputs(".......关键字",fp2); fputs("\n",fp2); 
          } 
         if(code=='1') 
		 { 
              printf("%s........标识符\n",strToken); 
                fputs(strToken,fp2); fputs("......标识符\n",fp2); 
          }
} 
        else if (IsDigit(ch)) 
		{ 
           while (IsDigit(ch)) 
		   { 
               Concat(strToken,&ch); 
               GetChar(fp1,&ch); 
                } 
              Retract(fp1,&ch); 
               printf("%s.......数字\n",strToken); 
              fputs(strToken,fp2);fputs(".......数字",fp2); fputs("\n",fp2); 
                } 
         else if (ch == '=') 
		 { 
        printf("=........特殊符号\n"); 
        fputs("=.......特殊符号\n",fp2); 
         }
        else if (ch == '<=') 
		{ 

			printf("<=........特殊符号\n"); 

			fputs("<=........特殊符号\n",fp2); 
}

		else if (ch == '>=') 
		{ 

			printf(">=........特殊符号\n"); 

			fputs(">=........特殊符号\n",fp2); 

		} 

		else if (ch == '+') 
		{ 

			printf("+.......运算符号\n"); 

			fputs("+.......运算符号\n",fp2); 

		}

		else if (ch == '-') 
		{ 

			printf("-.......运算符号\n"); 

			fputs("-.......运算符号\n",fp2); 

		}

		else if (ch == '/') 
		{ 

			printf("/.......运算符号\n"); 

			fputs("/.......运算符号\n",fp2); 

		}

		else if (ch == '*') 
		{ 

			GetChar(fp1,&ch); 

			if (ch == '/') 
			{ 

				printf("*.........zhushi\n"); 

				fputs("*........zhushi\n",fp2); 

			} 

			else 
			{ 

				Retract(fp1,&ch); 

				printf("*.........运算符号\n"); 

				fputs("*........运算符号\n",fp2); 

			} 

		} 

		else if (ch == ';') 
		{ 

			printf(";........特殊符号\n"); 

			fputs(";........特殊符号\n",fp2); 

		}

		else if (ch == '.') 
		{ 

			printf(".--------特殊符号\n"); 

			fputs(".---------特殊符号\n",fp2); 

		}

		else if (ch == ':') 
		{ 
	
			printf(":........特殊符号\n"); 
	
			fputs(":........特殊符号\n",fp2); 

		}

		else if (ch == '#') 
		{ 
	
			printf("#........特殊符号\n"); 
	
			fputs("#........特殊符号\n",fp2); 

		} 

		else if (ch == '(') 
		{ 

			printf("(........特殊符号\n"); 

			fputs("(........特殊符号\n",fp2); 

		} 

		else if (ch == ')') 
		{ 

			printf(").........特殊符号\n"); 

			fputs(").........特殊符号\n",fp2); 

		} 

		else if (ch == '{') { 

			printf("{........特殊符号\n"); 

			fputs("{.........特殊符号\n",fp2); 

		} 

		else if (ch == '}') 
		{ 

			printf("}........特殊符号\n"); 

			fputs("}........特殊符号\n",fp2); 


		} 
		}


} 
void main(int argc, char *argv[]) 
{

	FILE *fp1,*fp2; 
 

	if((fp1=fopen("c:\\a.txt","r"))==NULL)


	{ 

		printf("Cannot open %s\n"); 

		getch(); 
 

	} 

	if((fp2=fopen("c:\\result.txt","wt+"))==NULL) 

	{ 

		printf("Cannot create out.txt FILE.strike any key exit"); 

		getch();
 

	} 


	lexSubFunc(fp1,fp2); 

	fclose(fp1); 

	fclose(fp2); 
} 
/*词法分析2.c 结束*/ 



*/ 

⌨️ 快捷键说明

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