#include <>#include <>#include <>#include <>#define SPACE 0x20 //空格键#define CHANGE 'c' //转义字符#define STRING 'S' //引号里的字符串#define BOUNDARY 'B' //界符#define OPERATION 'O' //运算符#define WORD 'I' //标识符#define KEY_WORD 'K' //关键字#define DIGIT 'n' //数字,包括小数#define DOTH 'd' //头文件,“.h”文件#define INT 't'#define VOID 'v'#define IF 'f'#define ELSE 'e'#define WHILE 'w'#define FOR 'r'#define MAIN 'm'#define PRINTF 'p'#define INCLUDE 'u'#define FLOAT 'l'#define KEYNUM 10#define BOUNDNUM 8#define OPERNUM 7#define VALUENUM 100/************************************************************************//* data type *//************************************************************************/struct bianliang{ int id; char name[20]; int value;};struct changliang{ int data;};char KeyWord[KEYNUM][8]={"int","void","if","else","while","for","main","printf","include","float"};char Boundary[BOUNDNUM]={'"',';',',','(',')','#','{','}'};char Operation[OPERNUM]={'+','-','*','/','=','<','>'}; char Logogram[KEYNUM]={INT,VOID,IF,ELSE,WHILE,FOR,MAIN,PRINTF,INCLUDE,FLOAT};char Value[VALUENUM][8];int Value_n=0;int ErrorLine=0;int QuotationCount=0; //计算引号的数量int QuotationFlag=0; //引号数量为奇数时为1,偶数时为0char LastOpera=0; //用于判断"=="号存前一个"="号/************************************************************************//* function describe *//************************************************************************/int isKeyWord(char* s) //是关键字返回1,否则返回0{ int i; for (i=0;i=l) { return 1; } else { if ('.'==s[i]) { i++; for (;i=l) return 1; else return 0; }}int isDotH(char *s) //是头文件{ int i,l=strlen(s); for (i=0;i=l) { return 0; } else { if ('.'==s[i]) { i++; if(s[i]=='h') return 1; else return 0; } else return 0; }}int isWord(char *s) //是标识符{ int i=0,l=strlen(s); if (isalpha(s[i])) { i++; for (;i=l) { return 1; } else return 0;}void isWhat(int *i,char *str,FILE *fileOutput,FILE *fileOutput2) //判断字符串,并把相应类型存入文件{ int n; struct bianliang temp; struct changliang t; FILE *file=fopen("","ab"); if(1!=*i) { str[--(*i)]='\0'; if(n=isKeyWord(str)) { fputs(str,fileOutput); fputc('\t',fileOutput); fputc(KEY_WORD,fileOutput); fputc('\t',fileOutput); if(isKeyWord(str)>9) fputc(isKeyWord(str)+'a'-10,fileOutput); else fputc(isKeyWord(str)+'0',fileOutput); fputc('\t',fileOutput); fputc(Logogram[n-1],fileOutput); fputc('\n',fileOutput); } else if(isWord(str)) { fputs(str,fileOutput); fputc('\t',fileOutput); fputc(WORD,fileOutput); fputc('\t',fileOutput); for(n=0;n9) fputc(isBoundary(ch)+'a'-10,fileOutput); else fputc(isBoundary(ch)+'0',fileOutput); fputc('\t',fileOutput); fputc(Boundary[isBoundary(ch)-1],fileOutput); fputc('\n',fileOutput); i=0; } else if(isOperation(ch)) { if(0==QuotationCount%2) { isWhat(&i,str,fileOutput,fileOutput2); if ('='==ch) { qtemp=fgetc(fileInput); if ('='==qtemp) { fputc('=',fileOutput); fputc('=',fileOutput); flag=1; } else { fputc('=',fileOutput); fseek(fileInput,-1,SEEK_CUR); flag=0; } } else fputc(ch,fileOutput); fputc('\t',fileOutput); fputc(OPERATION,fileOutput); fputc('\t',fileOutput); if(isOperation(ch)>9) fputc(isOperation(ch)+'a'-10,fileOutput); else fputc(isOperation(ch)+'0',fileOutput); fputc('\t',fileOutput); if (flag) { fputc('q',fileOutput); } else fputc(Operation[isOperation(ch)-1],fileOutput); fputc('\n',fileOutput); i=0; } else { fputc(ch,fileOutput); fputc('\t',fileOutput); fputc('\t',fileOutput); fputc('\t',fileOutput); fputc('c',fileOutput); fputc('\n',fileOutput); i=0; } } else if('\n'==ch) { isWhat(&i,str,fileOutput,fileOutput2); ErrorLine++; i=0; } else if(SPACE==ch||'\t'==ch) { if(1void main ( ){ int i; int j; int m; m=1; for(i=0;i<5;i=i+1) { printf("\t",i); for(j=0;j