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

📄 词法分析器.c

📁 编写一个词法器
💻 C
字号:
#include"stdio.h"
#include"string.h"
#include"process.h"
#define MAX 50
void main()
{
	FILE *in;   //存放输入字符串和输出单词串的文件
	char arr[MAX];  //arr数组存放单词符号
	char currentchar;//currentchar存放当前输入字符
	int i=0;         //arr数组的一个指针
	char ch;
	  //以读方式打开输入文件
    if((in=fopen("infile.txt","r"))==NULL)
	{
        printf("can not open file\n");
        exit(0);
	}
	//去掉开头空格
     currentchar=fgetc(in);
     while(currentchar==" ")
	 { 
        currentchar=fgetc(in);
	 }
     while(currentchar!=EOF)
	 {  
        if((currentchar>='a'&&currentchar<='z')||(currentchar>='A'&&currentchar<='Z'))
		{
			i=0;  //清空arr数组
         while((currentchar>='a'&&currentchar<='z')||(currentchar>='0'&&currentchar<='9')||currentchar=='_'||(currentchar>='A'&&currentchar<='Z'))
		 {
            arr[i++]=currentchar;
			currentchar=fgetc(in);
         }
        //把字符数组arr和关键字表比较,判断单词串是关键字还是标识符
        arr[i++]='\0';
		    if(strcmp(arr,"if")==0||strcmp(arr,"int")==0||strcmp(arr,"else")==0
		      ||strcmp(arr,"for")==0||strcmp(arr,"while")==0||strcmp(arr,"do")==0
			  ||strcmp(arr,"return")==0||strcmp(arr,"break")==0||strcmp(arr,"continue")==0)
		     	printf("(1, \"%s\")\n",arr);
		    else
			   printf("(2, \"%s\")\n",arr);
        }
		while(currentchar=="")
		{ 
			currentchar=fgetc(in);
		}
        if((currentchar=fgetc(in))=='\n')
			continue;
		if(currentchar>='0'&&currentchar<='9')
		{
			i=0;
			while(currentchar>='0'&&currentchar<='9')
			{		
				arr[i++]=currentchar;
			    currentchar=fgetc(in);
			}
			arr[i++]='\0';
			printf("(3, \"%s\")\n",arr);
		}
		if(currentchar=='+'||currentchar=='-'||currentchar=='*'||currentchar=='/'
			||currentchar=='='||currentchar=='<'||currentchar=='>'||currentchar=='-')
		{
			if(currentchar=='+'||currentchar=='-'||currentchar=='*'||currentchar=='/')
			{
				i=0;
				arr[i]=currentchar;
				arr[i+1]='\0';
				printf("(4, \"%s\")\n",arr);
			}
			if(currentchar=='=')
			{
               i=0;
               arr[i++]=currentchar;
               currentchar=fgetc(in);
               if(currentchar=='=')
			   {
                  arr[i++]=currentchar;
                  arr[i++]='\0';
                  currentchar=fgetc(in);
				  printf("(4, \"%s\")\n",arr);
			   }
               else
			   { 
				  arr[i++]='\0';
                  printf("(4, \"%s\")\n",arr);
			   }

			}
			if(currentchar=='<')
			{
				i=0;
                arr[i++]=currentchar;
                currentchar=fgetc(in);
                if(currentchar=='=')
				{
                  arr[i++]=currentchar;
                  arr[i++]='\0';
                  currentchar=fgetc(in);
				  printf("(4, \"%s\")\n",arr);
				}
				else if(currentchar=='>')
                {
                  arr[i++]=currentchar;
                  arr[i++]='\0';
                  currentchar=fgetc(in);
				  printf("(4, \"%s\")\n",arr);
				}
				else
			   { 
				  arr[i++]='\0';
                  printf("(4, \"%s\")\n",arr);
			   }
			}
            if(currentchar=='>')
			{
				i=0;
                arr[i++]=currentchar;
                currentchar=fgetc(in);
                if(currentchar=='=')
				{
                  arr[i++]=currentchar;
                  arr[i++]='\0';
                  currentchar=fgetc(in);
				  printf("(4, \"%s\")\n",arr);
				}
				else
				{ 
				  arr[i++]='\0';
                  printf("(4, \"%s\")\n",arr);
				}
			}

		}
		if((currentchar)==','||currentchar==';'||currentchar=='{'||currentchar=='}'
			||currentchar=='('||currentchar==')')
		{
			i=0;
			arr[i]=currentchar;
			arr[i+1]='\0';
			printf("(5, \"%s\")\n",arr);
		}
	 }
	 fclose(in);
}

⌨️ 快捷键说明

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