scaner.h

来自「用c语言编写的关于pascal语言语法分析,词法分析,语义分析(输出有点问题)」· C头文件 代码 · 共 97 行

H
97
字号
char prog[80],token[8];    //源程序与目标代码
char ch;
int syn,p,m,n,sum;         //p->prog,m->token
char *rwtab[6]={"begin","if","then","while","do","end"};  //关键字scaner()
scaner()
{
	for(n=0;n<8;n++) token[n]=NULL;
	m=0;
	ch=prog[p++];
	while(ch==' ') ch=prog[p++];
	if(ch>='a'&&ch<='z')
	{
		while((ch>='a'&&ch<'z')||(ch>='0'&&ch<='9'))
		{
			token[m++]=ch;
			ch=prog[p++];
		}
		token[m++]='\0';
		p--;
		syn=10;
		for(n=0;n<6;n++)
		   if(strcmp(token,rwtab[n])==0)
		   {
			   syn=n+1;
			   break;
		   }
	}
	else if(ch>='0'&&ch<='9')
	{
		sum=0;
		while(ch>='0'&&ch<='9')
		{
			sum=sum*10+ch-'0';
			ch=prog[p++];
		}
		p--;
		syn=11;
	}
	else 
	{
		switch(ch)
		{
		case '<':m=0;token[m++]=ch;
			     ch=prog[p++];
				 if(ch=='>')
				 {
					 syn=21;
					 token[m++]=ch;
				 }
				 else if(ch=='=')
				 {
					 syn=22;
					 token[m++]=ch;
				 }
				 else 
				 {
					 syn=20;
					 p--;
				 }
				 break;
		case '>':m=0;token[m++]=ch;
			     ch=prog[p++];
				 if(ch=='=')
				 {
					 syn=24;
					 token[m++]=ch;
				 }
				 else 
				 {
					 syn=23;
					 p--;
				 }
				 break;
		case ':':m=0;token[m++]=ch;
			     ch=prog[p++];;
				 if(ch=='=')
				 {
					 syn=18;
					 token[m++]=18;
				 }
				 else
				 {
					 syn=17;
					 p--;
				 }
				 break;
		case '+':syn=13;token[0]=ch;break;
        case '-':syn=14;token[0]=ch;break;
		case '*':syn=15;token[0]=ch;break;
	    case '/':syn=16;token[0]=ch;break;
		case ';':syn=26;token[0]=ch;break;
		case '#':syn=0;token[0]=ch;break;
		default:syn=-1;
		}
	}
	return 0;
}

⌨️ 快捷键说明

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