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

📄 cifafenxi.h

📁 布尔表达式的语法分析及语义分析程序设计 初始条件: 词法分析的结果
💻 H
字号:

char prog[80],token[8];		
char ch ;						
int syn , p =0, m = 0, n = 0,sum = 0 ;	/* p是缓冲区prog的指针,m是token的指针,为全局变量*/
char *rwtab[6] = {"and","or","not","rop","i","end"};	/*关键字表*/


int letter(ch)	/*判断是否为字母*/
{
	if((ch>='a' && ch<='z')||(ch>='A' && ch<='Z'))
		return 1;	/*是字母则返回1(真)*/
	else
		return 0;	/*不是则返回0(假)*/
}

int num(ch)	/*判断是否为数字字符*/
{
	if(ch>='0' && ch<='9')
		return 1;	
	else
		return 0;	
}


/*******词法扫描子程序:识别出一个具有独立意思的单词符号********/

void scaner()
{
	for (n = 0 ; n < 8; n++) 	token[n] = NULL; 	/*token置空*/
	  m=0;											/*m是token指针,置0*/
	  ch=prog[p++];									/*读取一个字符*/

	  while (ch==' ' || ch =='\n' || ch =='\t' )		/*忽涅空格和换行符*/
	     ch=prog[p++] ;  									/*读下一个字符*/
	  
	  if (letter(ch))   /*如果ch是字母字符*/
	  {
		
		token[m++] = ch;	/*字母放入token中*/
		ch = prog[p++];		/*读入下一个字符*/
		
		  while (letter(ch) || num(ch) )				/*ch 为字母字符或者数字字符*/
		  {   
			  token[m++] = ch ;							/*   ch=>token  */
		      ch = prog[p++];								/*读下个字符*/
		  }
		  
		  token [m++]='\0';								/*token字符串结束*/		
		  p-- ;											/*回退一个字符*/
		  
		  syn=10;

		  for (n = 0 ; n<6 ; n++)						/*查找是否在关键字表中*/
		  {
			  if(strcmp(token,rwtab[n])==0)
			   {
				   syn = n +1 ;							/*给出syn值*/
				   break;
			   }
		  }	 
	  }
	 else 
	 	 if (num(ch))							/*ch 是数字字符*/
	 {
		 sum = 0 ;										
	     
	     do{
			token[m++] = ch;
			sum = sum * 10 + ch -'0';			/*转换为数字*/
			ch = prog[p++];
			}while(num(ch));
		
		 p-- ;											/*回退一个字符*/
		 syn=7;
	 }
     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 ;						/*将>=的种别码 ==> syn*/
					token[m++] = ch;
				}
				else 
				{
					syn =23 ;						/*将>的种别码=>syn*/
					p-- ;							/*回退一个字符*/
				}
				
				break;
			case ':' : 
				m = 0;	token[m++]= ch;
				ch=prog[p++];								/*读入下个字符*/
				if(ch=='=')
				{
					syn = 18 ;						/*将:=的种别码=>syn*/
					token[m++] = ch;
				}
				else 
				{
					syn = 17 ;						/*将:的种别码=>syn*/
					p-- ;							/*回退一个字符*/
				}
				break;
			
			case '+':	syn = 13;  token[m++]= ch;break;
			case '-':	syn = 14;  token[m++]= ch;break;
			case '*':	syn = 15;  token[m++]= ch;break;
			case '/':	syn = 16;  token[m++]= ch;break;
			case '=':	syn = 25;  token[m++]= ch;break;
			case ';':	syn = 26;  token[m++]= ch;break;
			case '(':	syn = 5;  token[m++]= ch;break;
			case ')':	syn = 6;  token[m++]= ch;break;
			case '$':	syn = 0;   token[m++]= ch;break;
			default :	syn = -1;  token[m++]= ch;

	 }
	 
	 token[m] = '\0';	/*字符串结束*/
  
} 

⌨️ 快捷键说明

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