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

📄 p_getsym.h

📁 我的编译原理课程设计。类PASCAL的语法
💻 H
字号:
#include<string.h>
int getch()
{   
    //int fp1=fileno(fp);
	if (cc==ll)
	{
		if(feof(fp))
		{
			//printf("program incomplete\n");
			
	        fclose(fp);
			
	        //exit(1);
            f_eof=1;
			return 1;
		}
     	ll=0;cc=0;count_line++;
	
		ch=fgetc(fp);
		
		while (ch!=chr1&&!feof(fp))
		{
			line[ll++]=ch;
			//printf("%c",ch);
			
			ch=fgetc(fp);
			
		}
        //printf("\n");
	
		ch=fgetc(fp);
	
		line[ll]=' '; //process end-line
		
	}
	ch=line[cc++]; 
	return 0;
}    //getch

void getsym()//getsym
{
	int k,flag,k_w;
	//int getch();
	while(ch==' ')
		getch();
	if (isalpha(ch))
	{
		k=0;
	
		while((isalpha(ch))||(isdigit(ch)))
		{
			if(k<al)  //10 lenth of identifier table
			{
				a[k++]=ch;
			}
			getch();
		}
		if(k<10)
		{
			for(;k<10;k++)
				a[k]=' ';
		}
		memcpy(id,a,10);
		flag=0;
		for(k_w=0;k_w<13&&!flag;k_w++)
		{
			if(!memicmp(id,word[k_w].w,10))
				flag=1;
		}
	   
		if(flag)
			sym=wsym[--k_w];
		else sym=ident;
	}
	else if(isdigit(ch))  //if ch in '0'—'9'
		{
			k=0;num=0;sym=number;
			while(isdigit(ch))
			{
				num=10*num+(int)ch-(int)('0');
				k++;
				getch();
			}
			if(k>nmax) error(30);//the digit is too large
			
		}
	else if(ch=='=')
	{ 
			sym=becomes;getch();
			if (ch=='=')
			{
				sym=eql;
				getch();
			}
		
	}
	else if(ch=='<')
	{
		getch();
		if(ch=='=')  //<=
		{
			sym=leq;
			getch();
		}
		else if(ch=='>')
		{
			sym=neq; //<>
			getch();
		}
		else sym=lss; //<
	}
	else if(ch=='>')
	{
		getch();
		if(ch=='=') //>=
		{
			sym=geq;
			getch();
		}else sym=gtr;//>
	}else
	{
		for(k=0;k<9;k++)
		{
			if(ch==ssym[k].ch)
			{
				sym=ssym[k].ch_sym;
				getch();
				break;
			}
		}
		if (k==9)
		{
			error(20);//this character is not allowed
			//getch();
		}
	}
}

⌨️ 快捷键说明

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