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

📄 lily.c

📁 语法分析器
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<process.h>
#define max 50       //取字符串的数组最大数
void 

main()  
{ FILE *in;
 char arr[max];//
 char currentchar;//
 int i=0;//定义整型
 
 if((in=fopen("lily11","r"))==NULL)   
 {printf("cannot open lily11\n");    //如果文件为空的话,则不能打开
 exit(1);
 }
AA: currentchar=fgetc(in);
 AA1: for (i=0;i<=50;i++)
	{arr[i]='\0';}
 while(currentchar!=EOF)
 {
 if(currentchar==' ')//判断空格,把它过滤
 goto AA;
 else if(currentchar=='\n')goto AA;//识别运算符或界符
 else if (currentchar=='(')
 {printf("out %c,%d\n",currentchar,28);goto AA;}
 else if (currentchar==')')
 {printf("out %c,%d\n",currentchar,29);goto AA;}
 else if (currentchar==';')
 {printf("out %c,%d\n",currentchar,18);goto AA;}
 else if (currentchar=='+')
 {printf("out %c,%d\n",currentchar,13);goto AA;}
 else if (currentchar=='-')
 {printf("out %c,%d\n",currentchar,14);goto	AA;}
 else if (currentchar=='*')
 {printf("out %c,%d\n",currentchar,15);goto AA;}
 else if (currentchar=='/')
 {printf("out %c,%d\n",currentchar,16);goto AA;}
 else if (currentchar=='=')
 {printf("out %c,%d\n",currentchar,25);goto AA;}
 else if (currentchar=='#')
 {printf("out %c,%d\n",currentchar,0);goto AA;}
 else if (currentchar=='<')
 {currentchar=fgetc(in);
 if(currentchar=='>')  
 {printf("out <>,%d\n",21);goto AA;}
 else if(currentchar=='=') 
 {printf("out <=,%d\n",22);goto AA;}
 else {printf("out <,%d\n",20);goto AA1;}
 }
 else if (currentchar=='>')
 {currentchar=fgetc(in);
 if(currentchar=='=') 
 {printf("out >=,%d\n",24);goto AA;}
 else {printf("out >,%d\n",23);goto AA1;}
 }
 else if (currentchar==':')
 {currentchar=fgetc(in);
 if(currentchar=='=') 
 {printf("out :=,%d\n",17);goto AA;}
 else {printf(": is Error!\n");goto AA1;}
 }
 else if(currentchar>='0'&&currentchar<='9')//判断识常数
 {i=0;
 currentchar=fgetc(in);
 while (currentchar>='0'&&currentchar<='9')
 {arr[i++]=currentchar;currentchar=fgetc(in);}
 printf("out %s,%6d\n",arr,11);
	 for (i=0;i<=50;i++)
	 {arr[i]='\0';
	 }
}
	 else if(currentchar>='a'&&currentchar<='z'||currentchar>='A'&&currentchar<='Z')//判断是不是关键字或字符
					{
						i=0;
						arr[i++]=currentchar;
						currentchar=fgetc(in);
						while(currentchar>='0'&&currentchar<='9'||currentchar>='a'&&currentchar<='z'||currentchar>='A'&&currentchar<='Z')
						{
							arr[i++]=currentchar;currentchar=fgetc(in);
						}
	                    if(strcmp(arr,"begin")==0) {printf("out begin,%d\n",1);goto AA1;}
						else if(strcmp(arr,"end")==0) {printf("out end,%d\n",6);goto AA1;}
						else if(strcmp(arr,"if")==0) {printf("out if,%d\n",2);goto AA1;}
						else if(strcmp(arr,"then")==0) {printf("out then,%d\n",3);goto AA1;}
						else if(strcmp(arr,"do")==0) {printf("out do,%d\n",5);goto AA1;}
						else if(strcmp(arr,"while")==0) {printf("out while,%d\n",4);goto AA1;}
						else {printf("out %s,%d\n",arr,10);goto AA1;}
						for(i=0;i<=50;i++)
						{
						arr[i]='\0';
						}
					}
					else {printf("The %c is Error!\n",currentchar);goto AA;}
		 }
		 fclose(in);
}

⌨️ 快捷键说明

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