#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define M 1000
struct
key
{
char
g[20];
};
typedef
struct
key KEY;
int
main()
{
KEY k[6];
int
i=0,j=0;
char
a[M],b[M];
strcpy(k[0].g,
"begin"
);
strcpy(k[1].g,
"if"
);
strcpy(k[2].g,
"then"
);
strcpy(k[3].g,
"while"
);
strcpy(k[4].g,
"do"
);
strcpy(k[5].g,
"end"
);
printf(
"請輸入源程式:\n"
);
gets(a);
while
(a[i]!=
'\0'
)
{
j=0;
if
((isalpha(a[i]))||(a[i]==
'_'
))
{
while
((a[i]!=
' '
)&&(a[i]!=
'\0'
))
{
if
((isalpha(a[i]))||(isdigit(a[i])))
{
b[j]=a[i];
j++;
i++;
}
else
break
;
}
if
((a[i]==
' '
)||(a[i]==
'\0'
))
{
b[j]=
'\0'
;
if
(strcmp(b,k[0].g)==0)
printf(
"begin\t種别碼 1\n"
);
else
if
(strcmp(b,k[1].g)==0)
printf(
"if \t種别碼 2\n"
);
else
if
(strcmp(b,k[2].g)==0)
printf(
"then \t種别碼 3\n"
);
else
if
(strcmp(b,k[3].g)==0)
printf(
"while\t種别碼 4\n"
);
else
if
(strcmp(b,k[4].g)==0)
printf(
"do \t種别碼 5\n"
);
else
if
(strcmp(b,k[5].g)==0)
printf(
"end \t種别碼 6\n"
);
else
printf(
"%s \t種别碼 10\n"
,b);
}
else
{
b[j]=
'\0'
;
printf(
"%s \t種别碼 10\n"
,b);
i--;
}
}
else
if
(isdigit(a[i]))
{
j=0;
while
(isdigit(a[i]))
{
b[j]=a[i];
j++;
i++;
}
b[j]=
'\0'
;
printf(
"%s \t種别碼 11\n"
,b);
i--;
}
else
{
switch
(a[i])
{
case
'+'
:
printf(
"%c \t種别碼 13\n"
,a[i]);
break
;
case
'-'
:
printf(
"%c \t種别碼 14\n"
,a[i]);
break
;
case
'*'
:
printf(
"%c \t種别碼 15\n"
,a[i]);
break
;
case
'/'
:
printf(
"%c \t種别碼 16\n"
,a[i]);
break
;
case
':'
:
if
(a[i+1]==
'='
)
{ printf(
":= \t種别碼 18\n"
);i++;
break
;}
else
{ printf(
"%c \t種别碼 17\n"
,a[i]);
break
;}
case
'<'
:
if
(a[i+1]==
'='
)
{ printf(
"<= \t種别碼 21\n"
);i++;
break
;}
if
(a[i+1]==
'>'
)
{ printf(
"<> \t種别碼 22\n"
);i++;
break
;}
else
printf(
"%c \t種别碼 20\n"
,a[i]);
break
;
case
'>'
:
if
(a[i+1]==
'='
)
{ printf(
">= \t種别碼 24\n"
);i++;
break
;}
else
printf(
"%c \t種别碼 23\n"
,a[i]);
break
;
case
'='
:
printf(
"= \t種别碼 25\n"
);
break
;
case
';'
:
printf(
"; \t種别碼 26\n"
);
break
;
case
'('
:
printf(
"( \t種别碼 27\n"
);
break
;
case
')'
:
printf(
") \t種别碼 28\n"
);
break
;
case
'#'
:
printf(
"# \t種别碼 0\n"
);
break
;
default
:
printf(
"%c \t文法錯誤!\n"
,a[i]);
break
;
}
}
i++;
}
}