📄 lexi.cpp
字号:
// Nom Du Fichier : lexi.cpp// Fonction : Programmation principale de analyseur lexicographe// Cadre : TP Compilation// Auteurs : Wei zhou yue// Date : 12/02/2005#include "lexi.h"void Ensource(){ int i=0; char c; fstream infile(FichierNom); // Ouvriez le fichier par son nom. while (infile.get(c)) Str[i++]=c; Str[i]='\0';}/******************************************************************************************/int Debut_chercher() // Retirer un caractere dans le buffer. // si oui alors 1, sinon 0{ ch=Str[++pStr]; if (ch=='\0') return(-1); else return(1);}/*****************************************************************************************/int LireUs(){ bool flag=false; int k=-1; Type_no=0; Prevtype=0; while (ch<=32 && ch>0) Fbuffer=Debut_chercher(); /****************************************************/ // Traiter le caract鑢e erreur if(ch=='^' || ch=='#') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); Stoker[++k]='\0'; Type_no=101; } /***************************************************/ // Traiter le commentaire if(ch=='@') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); while(ch!='@') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); } Stoker[++k]=ch; Fbuffer=Debut_chercher(); Stoker[++k]='\0'; Type_no=100; } /**************************************************/ // Traiter le cha頽e de caract鑢e if(ch=='"') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); while(ch!='"') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); } Stoker[++k]=ch; Fbuffer=Debut_chercher(); Stoker[++k]='\0'; Type_no=17; } /**************************************************/ // Traiter le Mot_cle ou l'identificateur if (ch>='a'&& ch<='z'|| ch>='A'&& ch<='Z') { k=-1; while(true) { if((++k)<Maxlen) { Stoker[k]=ch; } Fbuffer=Debut_chercher(); if (!(ch>='a'&& ch<='z'|| ch>='A'&& ch<='Z'||ch>='0' && ch<='9')) break; } Stoker[++k]='\0'; int i; for (i=0;i<Motcle_No;i++) if (strcmp(Stoker,MOTCLE[i])==0) { flag=true; break; } if(flag) Type_no=i+1; else Type_no=16; } /**************************************************/ // Traiter Enti鑢e et R閑l else if (ch>='0' && ch<='9') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); while(true) { while(ch>='0' && ch<='9') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); } if(ch!='.') { Type_no=20; break; } else { Stoker[++k]=ch; Fbuffer=Debut_chercher(); while(ch>='0' && ch<='9') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); } Type_no=19; break; } } Stoker[++k]='\0'; } else if (ch=='.') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); while(true) { if(ch=='.') { Type_no=1000; break; } else { while(ch>='0' && ch<='9') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); } Type_no=19; break; } } Stoker[++k]='\0'; } /***************************************************************/ // Traiter le Signsymbole else if (ch=='+' || ch=='-' || ch=='*' || ch=='/'|| ch=='>'||ch=='<'||ch=='='||ch=='!') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); if( ch=='=') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); } if(ch=='+') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); if(ch=='+') Stoker[++k]='\0'; } if(ch=='-') { Stoker[++k]=ch; Fbuffer=Debut_chercher(); if(ch=='-') Stoker[++k]='\0'; } Stoker[++k]='\0'; int i; for (i=0;i<Signsymbole_No;i++) if (strcmp(SIGNSYMBOLE[i],Stoker)==0) { flag=true; break; } if(flag) Type_no=i+21; } /***************************************************************/ // Traiter le Limitsymbole else if (ch=='('||ch==')'||ch=='['||ch==']'||ch=='{'||ch=='}'||ch==','||ch==':'||ch==';') { Stoker[++k]=ch; Stoker[++k]='\0'; int i; for (i=0;i<Limitsymbole_No;i++) if (strcmp(Stoker,LIMITSYMBOLE[i])==0) { flag=true; break; } if(flag) Type_no=i+34; Fbuffer=Debut_chercher(); } return(Type_no);}/*************************************************************************/int main(){ FILE *fp,*fp1; int n=100; cout<<"Entrez le nom du fichier,S'il vous plait: "<<endl; cin.getline(FichierNom,n); fp=fopen(FichierNom,"r"); while (fp==NULL) { cout<<"Pardon,Le fichier n'est existe!"<<endl; cout<<"Entrez un autre nom du fichier: "<<endl; cin.getline(FichierNom,n); fp=fopen(FichierNom,"r"); } if((fp1=fopen("outfile.txt","w"))==NULL) { printf("can not open outfile\n"); return -1; } Ensource(); fclose(fp); cout<<endl; Debut_chercher(); Fbuffer=1; while(Fbuffer!=-1) { Type_no=LireUs(); if(Type_no!=0) { if(Type_no>=1 && Type_no<=15) { cout<<"MOT_CLE: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," MOT_CLE: ",Stoker); } else if(Type_no==100) { cout<<"COMMENTAIRE: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," COMMENTAIRE: ",Stoker); } else if(Type_no==101) { cout<<"Erreur: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," ERREUR: ",Stoker); } else if(Type_no==16) { cout<<"IDENTIFICATEUR: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," IDENTIFICATEUR: ",Stoker); } else if(Type_no==17) { cout<<"CHAINE DE CARACTERE: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," CHAINE DE CARACTERE: ",Stoker); } else if(Type_no==19) { cout<<"REEL: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," REEL: ",Stoker); } else if(Type_no==20) { cout<<"ENTIER: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," ENTIER: ",Stoker); } else { cout<<"SYMBOLE: "; cout<<"("<<Type_no+0<<","; cout<<"\""<<Stoker<<"\""; cout<<")"<<endl; fprintf(fp1,"%d%s%s\n", Type_no," SYMBOLE: ",Stoker); } } } cout<<'\n'; return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -