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

📄 my_syn_f.h

📁 这是个源码合集
💻 H
字号:
/*-----------------------------------*\
--几种正确的F形式-------
human(x).
human(x,y,z).
human(abc_9,x).
human(abc9).
human(as,abc9_).
human(address(a,b),cc).
human(x,z,school(z,class(a,kko)),p).
\*-----------------------------------*/

/*-----------------------------------*\
--几种错误的F形式-------
human(X).
human(X);
human(x);
human(x)
human(xx,yy,zz)09
Phuman(abc,x).
human(xx,123,yy).
human(9_,xx,abc,yy).
human(abc9)..
human(abc9).ol
human
human.
#human(aa).
human(aa)
human(address(a,xx),yy)
human(x,z,school(z,class(a,kko),p).
human(abc9
humanabc9)
\*-----------------------------------*/

/*-----------------------------------*\
--正确的F形式的结构-------
F_Factor=F_predicate+F_end
F_predicate=C+(+F_A+F_Asuff+F_Aend
F_A=C
F_A=F_predicate
F_Asuff=,+F_A+F_Asuff
F_Asuff=0
F_Aend=)
\*-----------------------------------*/

//下表为脚本语言程序(询问部分)的递归结构

void F_Factor();
void F_predicate();
void F_A();
void F_end();
void F_Asuff();
void F_Aend();
//
////////////////////////////////////////////////////////////////
//
void F_Factor()
{
  F_predicate();
  F_end();
}
//
////////////////////////////////////////////////////////////////
//
void F_predicate()
{
 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++;
	  F_A();
	  F_Asuff();
	  F_Aend();
	}
	else
	{
	   f_error(2); 
       //谓词的第二个单词不是(,出错
	}
 }
 else
 {
   f_error(1); 
   //谓词的第一个单词不是标识符,出错
 }
}
//
////////////////////////////////////////////////////////////////
//
void F_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++;
	  F_A();
	  F_Asuff();
	  F_Aend();
	 }
	 else
     //参数的第一个单词或者是标识符,而参数第二个单词不是(
     //则说明参数是常量,需要回退一个单词.
	 {
	   //回退一个单词.
       //!!!!!!!!!!!!!!!-------------
	   return;
	 }
  }
  else
  {
         f_error(3); 
         //参数的第一个单词不是标识符,出错
  }
}
//
////////////////////////////////////////////////////////////////
//
void F_Asuff()
{
  if(Code_F[Code_I]==COM)
  //如果参数后缀的第一个单词是COM
  {
    Code_I++;
	F_A();
	F_Asuff();
  }
  else
  { 
	if(Code_F[Code_I]==RBR)
    //如果参数后缀的第一个单词不是COM,而是RBR
	{
	  //回退一个单词.
	  //!!!!!!!!!!!!!!!-------------
	  return;
	}
	else
	{
	  f_error(4); 
      //参数后缀的第一个单词不是COM,也不是RBR,则出错
	}
  }
}
//
////////////////////////////////////////////////////////////////
//
void F_Aend()
{
  if(Code_F[Code_I]==RBR)
  //参数尾的第一个单词一定是RBR
  {
	Code_I++;
    return;
  }
  else
  {
    f_error(5); 
    //参数尾的第一个单词不是RBR,则出错
  }
}
//
////////////////////////////////////////////////////////////////
//
void F_end()
{
  if(Code_F[Code_I]==DOT)
  //事实尾的第一个单词一定是DOT
  {	     
	  if(Code_I!=Syn_Lines-1)
	  //说明DOT以后还有其他的字符
	  {
	      f_error(7);
          //说明DOT以后还有其他的字符,则出错
	  }
	  else
	  {
          return;
	  }
  }
  else
  {
    f_error(6); 
    //事实尾的第一个单词不是DOT,则出错
  }
}

⌨️ 快捷键说明

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