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

📄 my_syn_g.h

📁 这是个源码合集
💻 H
字号:
/*-----------------------------------*\
--几种正确的询问形式-------
human(X).---ok
human(X,Y,Z).---ok
human(abc,X).---ok
human(X,abc,Y).---ok
human(_,X,abc,Y).---ok
human(abc9).---ok
human.---ok
human(address(a,X),Y).---ok
human(X,z,school(z,class(A,kko)),P).---ok
\*-----------------------------------*/

/*-----------------------------------*\
--几种错误的询问形式-------
human(X);---ok
human(X,Y,Z)09---ok
Phuman(abc,X).---ok
human(X,123,Y).---ok
human(9_,X,abc,Y).---ok
human(abc9)..---ok
human(abc9).ol---ok
human---ok
human(address(a,X),Y)---ok
human(X,z,school(z,class(A,kko),P).---ok
human(abc9---ok
humanabc9)---ok
\*-----------------------------------*/

/*-----------------------------------*\
--正确的询问形式的结构-------
quest=C+.
quest=structure+.
structure=C+(+A+Asuff+Aend
A=C
A=V
A=structure
Asuff=,+A+Asuff
Asuff=0
Aend=)
\*-----------------------------------*/

//下表为脚本语言程序(询问部分)的递归结构
void quest();
void A();
void Asuff();
void Aend();
void structure();

/////////////////////////////////////////////////////////////////
//
//
void quest()
{
 if(Code_F[Code_I]>=BY_BEGIN_OF_C+1&&Code_F[Code_I]<=BY_BEGIN_OF_C+BY_MAX_NUM_OF_C)
 //询问的第一个单词一定要是标识符
 {
	 Code_I++;
     if(Code_F[Code_I]==DOT)
     //如果询问的第二个单词是DOT
	 {
       return;
	   //则询问结束
	 }
     else
	 {
	    if(Code_F[Code_I]==LBR)
	    //当询问的第二个单词不是DOT,而是(
		{
          Code_I++;
		  A();
		  Asuff();
		  Aend();
		  if(Code_F[Code_I]==DOT)
		  //询问的最后一个单词一定要是DOT
		  {
		     if(Code_I!=Syn_Lines-1)
			 //说明DOT以后还有其他的字符
			 {
			   error(9);
               //说明DOT以后还有其他的字符,则出错
			 }
			 else
			 {
			   return;
	           //则询问结束
			 }
		  }
		  else
		  {
		     error(8);
			 //询问的最后一个单词不是DOT,则出错
		  }
		}
	    else
		{
	      error(2);
          //询问的第二个单词即不是DOT,也不是(,则出错
		}
	 }
 }
 else
 {
   error(1);
   //询问的第一个单词不是标识符,出错
 }
}
//
////////////////////////////////////////////////////////////////
//
void structure()
{
 if(Code_F[Code_I]>=BY_BEGIN_OF_C+1&&Code_F[Code_I]<=BY_BEGIN_OF_C+BY_MAX_NUM_OF_C)
 //结构的第一个单词一定要是标识符
 {
    Code_I++;
	if(Code_F[Code_I]==LBR)
	//结构的第二个单词一定要是(
	{
      Code_I++;
	  A();
	  Asuff();
	  Aend();
	}
	else
	{
	   error(4); 
       //结构的第二个单词不是(,出错
	}
 }
 else
 {
   error(3); 
   //结构的第一个单词不是标识符,出错
 }
}
//
////////////////////////////////////////////////////////////////
//
void A()
{
  if(Code_F[Code_I]>=BY_BEGIN_OF_C+1&&Code_F[Code_I]<=BY_BEGIN_OF_C+BY_MAX_NUM_OF_C)
  //参数的第一个单词或者是标识符
  {	  
     Code_I++; 
   	 if(Code_F[Code_I]==LBR)
	 //参数的第一个单词或者是标识符,并且参数第二个单词是(
	 {
      Code_I++;
	  A();
	  Asuff();
	  Aend();
	 }
	 else
     //参数的第一个单词或者是标识符,而参数第二个单词不是(
     //则说明参数是常量,需要回退一个单词.
	 {
	   //回退一个单词.
       //!!!!!!!!!!!!!!!-------------
	   return;
	 }
  }
  else
  {
      if(Code_F[Code_I]>=BY_BEGIN_OF_V+1&&Code_F[Code_I]<=BY_BEGIN_OF_V+BY_MAX_NUM_OF_V)
      //参数的第一个单词不是标识符,而是变量
	  {
		Code_I++;
		Num_V++;
        return;
	  }
      else
	  {
         error(5); 
         //参数的第一个单词不是标识符,也不是变量,出错
	  }
  }
}
//
////////////////////////////////////////////////////////////////
//
void Asuff()
{
  if(Code_F[Code_I]==COM)
  //如果参数后缀的第一个单词是COM
  {
    Code_I++;
	A();
	Asuff();
  }
  else
  { 
	if(Code_F[Code_I]==RBR)
    //如果参数后缀的第一个单词不是COM,而是RBR
	{
	  //回退一个单词.
	  //!!!!!!!!!!!!!!!-------------
	  return;
	}
	else
	{
	  error(6); 
      //参数后缀的第一个单词不是COM,也不是RBR,则出错
	}
  }
}
//
////////////////////////////////////////////////////////////////
//
void Aend()
{
  if(Code_F[Code_I]==RBR)
  //参数尾的第一个单词一定是RBR
  {
	Code_I++;
    return;
  }
  else
  {
    error(7); 
    //参数尾的第一个单词不是RBR,则出错
  }
}

⌨️ 快捷键说明

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