#include<stdio.h> #include<string.h> #define MAX 100 int n=0,i=0; char *keyshuru[6]={"begin","if","then","while","do","end"}; void KEYword(char shuru[MAX]) { int k=0,key=0,q=1; char token[MAX]; while(shuru[i]!='#') { while((shuru[i]>='a'&&shuru[i]<='z') || (shuru[i]>='A'&&shuru[i]<='Z') || (shuru[i]>='0' && shuru[i]<='9')) { if((shuru[i]>='a'&&shuru[i]<='z') || (shuru[i]>='A'&&shuru[i]<='Z') || (shuru[i]>='0' && shuru[i]<='9')) { token[n]=shuru[i]; n++; token[n]='\0'; i++; if(shuru[i]>='0' && shuru[i]<='9') q++; } for(k=0;k<6;k++) { key=0; if(strcmp(keyshuru[k],token)==0) { printf("%s %d\n",keyshuru[k],k+1); key=1; break; } } } if((shuru[i-q]>='a'&&shuru[i-q]<='z')||(shuru[i-q]>='A'&&shuru[i-q]<='Z')) { if(key==0) { printf("%s 10\n",token); } } key=1; i=i+1; n=0; } } void character(char shuru[MAX]) { int p=0,sign=0; for(p=0;p<MAX;p++) { switch(shuru[p]) { case '+': printf("+ 13\n"); break; case '-': printf("- 14\n"); break; case '*': printf("* 15\n"); break; case '/': printf("/ 16\n"); break; case ':': if(shuru[p+1]=='=') { printf(":= 18\n"); p++; } else printf(": 17\n"); break; case '<': if(shuru[p+1]=='=') { printf("<= 21\n"); sign=1; p++; } else if(shuru[p+1]=='>') { printf("<> 22\n"); sign=1; p++; } else if(sign==0) printf("< 20\n"); break; case '>': if(shuru[p+1]=='=') { printf(">= 24\n"); p++; } else printf("> 23\n"); break; case '=': printf("= 25\n"); break; case ';': printf("; 26\n"); break; case '(': printf("( 27\n"); break; case ')': printf(") 28\n"); break; case '#': printf("# 29\n"); break; } } } void number(char shuru[MAX]) { int p=0,j=0,t=0,key=0,q=1; char num[MAX]; while(shuru[p]!='#') { key=0; j=0; while(shuru[p]>='0' && shuru[p]<='9') { num[j]=shuru[p]; p++; j++; key=1; q++; } if((shuru[p-q]>='a'&&shuru[p-q]<='z')||(shuru[p-q]>='A'&&shuru[p-q]<='Z')) { key=0; q=1; } if(key==1) { for(t=0;t<j;t++) { printf("%c",num[t]); } printf(" 11\n"); j=0; } p++; } } main() { char a; char shuru[MAX]; int p=0,j=0,m=0; printf("请输入源程序,#键为结束标志:"); do{ scanf("%c",&a); shuru[p]=a; p++; }while(a!='#'); KEYword(shuru); character(shuru); number(shuru); }