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

📄 main.cpp

📁 小型的英语识别程序 识别语法是否正确 没有太深的编译原理知识的人可以接受
💻 CPP
字号:
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("e.in");

int wordscode[10000];
int codepoint=-1;

char word[250];
char*s=&word[0];
int wordpoint=-1;

const char* article[2] = {"a", "the"};
const char* noun[8] = {"tom", "jerry", "goofy", "mickey", "jimmy", "dog", "cat", "mouse"};
const char* verb[4] = {"hate", "love", "know", "like"};
const char* link[1] = {"and"};
const char* smp[1]  = {","};
int equal(const char*s1,const char*s2)
{
 int i=0;
 while((s1[i]!=0)&&(s2[i]!=0)){if(s1[i]!=s2[i])return 0;i++;}
 if(s1[i]!=s2[i])return 0;
 return 1;
}

bool VERB_test()
{char temp;
 for(int i=4;i<=wordpoint;i++)if(word[i]!='s')return false;
 temp=word[4];word[4]=0;
 if(!((equal(s,verb[0]))||(equal(s,verb[1]))||(equal(s,verb[2]))||(equal(s,verb[3]))))return false;
 word[4]=temp;
 return true;
}

int getword()//return 1:file end; return 0:file is not at the end
{
for(int i=0;i<=codepoint+2;i++)wordscode[i]=0;
codepoint=-1;
wordpoint=-1;
char alpha;
do
{
  alpha=in.get();
  if(((alpha<='z')&&(alpha>='a'))||(alpha==',')){wordpoint++;word[wordpoint]=alpha;continue;}
  if(alpha==' ')
  {
      codepoint++;
      word[wordpoint+1]=0;
      if((equal(s,noun[0]))||(equal(s,noun[1]))||(equal(s,noun[2]))||(equal(s,noun[3]))||(equal(s,noun[4]))||(equal(s,noun[5]))||(equal(s,noun[6]))||(equal(s,noun[7])))wordscode[codepoint]=1;
      if((equal(s,article[0]))||(equal(s,article[1])))wordscode[codepoint]=3;
      if(equal(s,link[0]))wordscode[codepoint]=4;
      if(VERB_test())wordscode[codepoint]=2;
      if(equal(s,smp[0]))wordscode[codepoint]=5;
      wordpoint=-1;
    }
/*  if(alpha==',')
  {
      codepoint++;
      wordscode[codepoint]=5;
      wordpoint=-1;
      in.get();
      }
*/
  if((alpha=='\n')||(in.eof()))
  {
      codepoint++;
      word[wordpoint+1]=0;
      if((equal(s,noun[0]))||(equal(s,noun[1]))||(equal(s,noun[2]))||(equal(s,noun[3]))||(equal(s,noun[4]))||(equal(s,noun[5]))||(equal(s,noun[6])||(equal(s,noun[7]))))wordscode[codepoint]=1;
      if((equal(s,article[0]))||(equal(s,article[1])))wordscode[codepoint]=3;
      if(equal(s,link[0]))wordscode[codepoint]=4;
      if(VERB_test())wordscode[codepoint]=2;
      if(equal(s,smp[0]))wordscode[codepoint]=5;
      codepoint++;
      wordscode[codepoint]=6;
      wordpoint=-1;
  }
}while((codepoint==-1)||(wordscode[codepoint]!=6));

if(in.eof())return 1;
return 0;
}

int sp=0;//识别的起始位置

int END()
{if(sp==codepoint)return 1;return 0;
}

int NOUN()
{
    if(wordscode[sp]==1){sp++;return 1;}
    return 0;
}
int VERB()
{
    if(wordscode[sp]==2){sp++;return 1;}
    return 0;
}
int ARTICLE()
{
    if(wordscode[sp]==3){sp++;return 1;}
    return 0;
}
int LINK()
{
    if(wordscode[sp]==4){sp++;return 1;}
    return 0;
}
int ACTOR()
{
int oldsp;
oldsp=sp;
ARTICLE();
if(NOUN())return 1;else return 0;
}

int ACTIVE_LIST()
{
if(!ACTOR())return 0;
int oldsp;
oldsp=sp;
if(LINK())return ACTIVE_LIST();
sp=oldsp;
return 1;
}

int ACTION()
{
if(!ACTIVE_LIST())return 0;
if(!VERB())return 0;
if(!ACTIVE_LIST())return 0;
return 1;
}

int STATEMENT()
{
 if(!ACTION())return 0;
 while(wordscode[sp]==5)
 {sp++;if(!ACTION())return 0;}
 if(END())return 1;
 return 0;
}

int main()
{
    int n;
    in>>n;in.get();
    for(int i=1;i<=n;i++)
     {getword();
     //for(int j=0;j<=codepoint;j++)cout<<wordscode[j];
     //cout<<endl;
     if(STATEMENT())cout<<"YES I WILL"<<endl;else cout<<"NO I WON't"<<endl;sp=0;}
    return 0;
}

⌨️ 快捷键说明

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