201406114257 张俊毅 词法分析 修改完

#include<stdio.h>

find(char a[],int i);

find2(char a[],int i);

find3(char a[],int i);

main()

{

int i=0;

char a[100];

gets(a);

while (a[i]!='#'&&i<=100)

{

if (a[i]=='b'||a[i]=='i'||a[i]=='t'||a[i]=='w'||a[i]=='d'||a[i]=='e')

{

i=find(a,i);

i++;

}

else

{

i=find3(a,i);

i++;

}

if (a[i]==' ')

{

i++;

}

}

printf(" ");

}

find(char a[],int i)//仅限于 b i t e w开头的字母

{

switch (a[i])

{

case 'b':

if (a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')

{

printf("(begin,1)");

i=i+4;return i;

}

else

{i=find2(a,i);

return i;

}

case 'i':

if (a[i+1]=='f')

{

printf("(if,2)");

i=i+1;

return i;

}

else

{i=find2(a,i);

return i;

}

case 't':

if (a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')

{

printf("(then,3)");

i=i+3;

return i;

}

else

{i=find2(a,i);

return i;

}

case 'w':

if (a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')

{

printf("(while,4)");

i=i+4;

return i;

}

else

{i=find2(a,i);

return i;

}

case 'd':

if (a[i+1]=='o')

{

printf("(do,5)");

i=i+1;

return i;

}

else

{i=find2(a,i);

return i;

}

case 'e':

if (a[i+1]=='n'&&a[i+2]=='d')

{

printf("(end,6)");

i=i+2;

return i;

}

else

{i=find2(a,i);

return i;

}

default:

return i;

}

}

find2(char a[],int i)

{

if (a[i]!=' ')
printf("(");

for (i;a[i]!=' ';i++)

{

printf("%c",a[i]);

}

if (a[i]==' ')
printf(",10)");

return i;

}

find3(char a[],int i)

{

switch(a[i])

{

case '+':

printf("(+,13)");

return i;

case '-':

printf("(-,14)");

return i;

case '*':

printf("(*,15)");

return i;

case '/':

printf("(/,16)");

return i;

case ':':

if (a[i+1]=='=')

{

printf("(:=,18)");

i++;

}

else

{

printf("(:,17)");

}

return i;

case '<':

if (a[i+1]=='=')

{

printf("(<=,21)");i++;

}

else if(a[i+1]=='>')

{

printf("(<>,22)");

i++;

}

else

{

printf("(<,20)");

}

return i;

case '>':

if (a[i+1]=='=')

{

printf("(>=,24)");i++;

}

else

{

printf("(>,23)");

}

return i;

case '=':

printf("(=,25)");

return i;

case ';':

printf("(;,26)");

return i;

case '(':

printf("((,27)");

return i;

case ')':

printf("(),28)");

return i;

case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':case '0':

printf("(");

while(i<100)

{

if (a[i]<='9'&&a[i]>='0')

{

printf("%c",a[i]);

i++;

}

else

{

i--;

printf(",11)");

return i;

}

}

default:

break;

}

i=find2(a,i);

return i;

}

原文地址:https://www.cnblogs.com/Mrwhite/p/4835616.html