#include "check.h" void lexical_analyzer(FILE *p){ character=fgetc(p); while(character!=EOF){ while(character==' '||character=='\t'||character=='\r'||character=='\n'){ character=fgetc(p); } if(isalpha(character)){ char temp[15]; int k=0; while(isalpha(character)||isdigit(character)){ temp[k]=character; character=fgetc(p); k++; } temp[k]='\0'; int flag=0; for(int i=0;i<8;i++){ if(strcmp(temp,word[i])==0){ printf("(%s,%s)\n",word[8],temp); flag=1; break; } } if(flag==0){ printf("(%d,%s)\n",5,temp); } } else if(isdigit(character)){ int k=0; int num=0; while(isdigit(character)){ num=num*10+character-'0'; character=fgetc(p); k++; } if(k>8) printf("error\n"); else printf("(%d,%d)\n",6,num); } else if(character=='>'){ character=fgetc(p); if(character=='='){ character=fgetc(p); printf("(%d,>=)\n",4); } else{ printf("(%d,>)\n",4); } } else if(character=='<'){ character=fgetc(p); if(character=='='){ character=fgetc(p); printf("(%d,<=)\n",4); } else{ printf("(%d,<)\n",4); } } else if(character=='='){ character=fgetc(p); if(character=='='){ character=fgetc(p); printf("(%d,==)\n",4); } else{ printf("(%d,=)\n",3); } } else if(character=='!'){ character=fgetc(p); if(character=='='){ character=fgetc(p); printf("(%d,!=)\n",4); } else{ printf("error\n"); } } else if(character=='+'||character=='-'||character=='*'||character=='/'){ printf("(%d,%c)\n",3,character); character=fgetc(p); } else{ int flag; flag=0; for(int i=0;i<6;i++){ if(character==separator[i]){ printf("(%d,%c)\n",2,character); character=fgetc(p); flag=1; break; } } if(flag==0){ printf("error\n"); character=fgetc(p); } } } } int main(){ FILE *fp = fopen("text.txt", "r"); if (fp == NULL){ perror("fopen:"); system("pause"); return 0; } lexical_analyzer(fp); system("pause"); }
check.h
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> const char *word[9] = {"if", "int", "for", "while", "do", "return", "break", "continue","1"}; char separator[7]={',',';','{','}','(',')','2'}; char operator_m[6]={'+','-','*','/','=','3'}; char character;
测试数据自己设计吧,.txt文件放在同一目录下就好