#include<stdio.h> #include<string.h> #include<ctype.h> #define m 500 struct KEYWORD { char keyword[20]; }; typedef struct KEYWORD keyword; int main() { keyword key[6]; int i=0,j=0; char a[m],b[m]; strcpy(key[0].keyword,"begin"); strcpy(key[1].keyword,"if"); strcpy(key[2].keyword,"then"); strcpy(key[3].keyword,"while"); strcpy(key[4].keyword,"do"); strcpy(key[5].keyword,"end"); printf("Please input the code and end with‘#‘:"); gets(a); while(a[i]!=‘\0‘) { j=0; if(isalpha(a[i])) { while((a[i]!=‘ ‘)&&(a[i]!=‘\0‘)) { if(isalpha(a[i])) { b[j]=a[i]; j++; i++; } else break; } if((a[i]==‘ ‘)||(a[i]==‘\0‘)) { b[j]=‘\0‘; if(strcmp(b,key[0].keyword)==0) printf("(1,\"begin\")\n"); else if(strcmp(b,key[1].keyword)==0) printf("(2,\"if\")\n"); else if(strcmp(b,key[2].keyword)==0) printf("(3,\"then\")\n"); else if(strcmp(b,key[3].keyword)==0) printf("(4,\"while\")\n"); else if(strcmp(b,key[4].keyword)==0) printf("(5,\"do\")\n"); else if(strcmp(b,key[5].keyword)==0) printf("(6,\"end\")\n"); else printf("(10,\"%s\")\n",b); } else { b[j]=‘\0‘; printf("(10,\"%s\")\n",b); i--; } } else if(isdigit(a[i])) { while(isdigit(a[i])) { b[j]=a[i]; j++; i++; } b[j]=‘\0‘; printf("(11,\"%s\")\n",b); i--; } else { switch(a[i]) { case ‘+‘: printf("(13,\"%c\")\n",a[i]);break; case ‘-‘: printf("(14,\"%c\")\n",a[i]);break; case ‘*‘: printf("(15,\"%\")\n",a[i]);break; case ‘/‘: printf("(16,\"%c\")\n",a[i]);break; case ‘:‘: if(a[i+1]==‘=‘) { printf("(18,\":=\")\n");i++;break; } else printf("(17,\"%c\")\n",a[i]);break; case ‘<‘: if(a[i+1]==‘=‘) { printf("(21,\"<=\")\n");i++;break; } else if(a[i+1]==‘>‘) { printf("(22,\"<>\")\n");i++;break; } else printf("(20,\"%c\")\n",a[i]);break; case ‘>‘: if(a[i+1]==‘=‘) { printf("(24,\">=\")\n");i++;break; } else printf("(23,\"%c\")\n",a[i]);break; case ‘=‘: printf("(25,\"%c\")\n",a[i]);break; case ‘;‘: printf("(26,\"%c\")\n",a[i]);break; case ‘(‘: printf("(27,\"%c\")\n",a[i]);break; case ‘)‘: printf("(28\",%c\")\n",a[i]);break; case ‘#‘: printf("(0,\"%c\")\n",a[i]);break; default: printf("%c\t语法错误!\n",a[i]);break; } } i++; } }
原文:http://www.cnblogs.com/zou779596337/p/4876143.html