比赛 |
20100420 |
评测结果 |
WTAAAWW |
题目名称 |
词法分析程序 |
最终得分 |
42 |
用户昵称 |
.Xmz |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2010-04-20 10:37:51 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstring>
using namespace std;
struct state
{
char ch[101];
state *next[301];
}P[101];
int n;
void init()
{
memset(P,0,sizeof(P));
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%s",P[i].ch);
}
int t,tt;
char tch[1];
for (int i=0;i<n;i++)
{
scanf("%d",&t);
for (int j=1;j<=t;j++)
{
scanf("%s%d",tch,&tt);
P[i].next[tch[0]]=&P[tt];
}
}
scanf("%s",tch);
}
char token[101];
int th=-1;
int main()
{
freopen("lex.in","r",stdin);
freopen("lex.out","w",stdout);
init();
char tch[101];
scanf("%s",tch);
while(tch[0]!='$')
{
state *now=&P[0];
th=-1;
int i=0;
while (i<=(int)strlen(tch)-1)
{
char lookahead=tch[i];
if (now->next[lookahead])
{
token[++th]=lookahead;
now=now->next[lookahead];
i++;
}
else
{
if (now->ch[0]!='-' || now->ch[1]!='2')
{
if (now->ch[0]=='-' && now->ch[1]=='1') printf("Lexer Error: ");
else printf("%s: ",now->ch);
for (int i=0;i<=th;i++) printf("%c",token[i]);
if (th==-1)
{
printf("%c",lookahead);
i++;
}
printf("\n");
}
now=&P[0];
th=-1;
}
}
if (th!=-1)
if (now->ch[0]!='-' || now->ch[1]!='2')
{
if (now->ch[0]=='-' && now->ch[1]=='1') printf("Lexer Error: ");
else printf("%s: ",now->ch);
for (int i=0;i<=th;i++) printf("%c",token[i]);
printf("\n");
}
scanf("%s",tch);
}
return 0;
}