📄 my_syn_f.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 + -