33,008
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#define LEN 1<<16
using namespace std;
char s[LEN],c,*lexeme_beginning;
char *token_beginning = s,*forward = s ;
string token;
int start,state,step,symbol_lex;
char nextchar()
{
return *forward++;
}
void retract(int pos)
{
forward--;
}
string token_nexttoken()
{
while(1)
{
switch(state)
{
case 0:
c=nextchar();
if(c=='a') state = 8;
else if(c=='b') state = 1;
else if(c=='c') state = 2;
else if(c=='v') state = 3;
else state =30;
break;
case 1:
c=nextchar();
if(c=='c') state = 4;
else if(c=='b') state = 5;
else state = 30;
break;
case 2:
c=nextchar();
if(c=='d') state = 7;
else state = 30;
break;
case 3:
if(*forward=='\0') return "002";
else state = 30;
break;
case 4:
if(*forward=='\0') return "001";
else state = 30;
break;
case 5:
c=nextchar();
if(c=='c') state = 6;
else state = 30;
break;
case 6:
if(*forward=='\0') return "004";
else state = 30;
break;
case 7:
if(*forward=='\0') return "003";
else state = 30;
break;
case 8:
c=nextchar();
if(c=='a') state = 9;
else if(c=='b') state = 1;
else if(c=='c') state = 2;
else if(c=='v') state = 3;
else state = 30;
break;
case 9:
c=nextchar();
if(c=='a') state = 9;
else if(c=='b') state = 1;
else if(c=='v') state = 3;
else state = 30;
break;
case 30:
return "[false]";
}
}
}
void Init()
{
}
int main()
{
int len;
string tmp;
while(scanf("%s",s)!=EOF)
{
state = 0;
lexeme_beginning = s;
forward = s;
len = strlen(s);
while(forward!=s+len)
{
start = 0;
state = 0;
token_beginning = lexeme_beginning;
tmp = token_nexttoken();
cout<<tmp.c_str()<<endl;
if(state == 30 ) break;
}
}
system("pause");
return 0;
}