Main Page | File List | Globals

calculette.c

Go to the documentation of this file.
00001 
00007 #include"operations.h"
00008 #include<stdio.h>
00009 #include<stdlib.h>
00010 #include<string.h>
00011 #include"erreur.h"
00012 
00018 void analyse(FILE *stream){
00019   char ligne[200];
00020   int i;
00021   while(1){
00022     /* On copie la ligne courante dans le buffer
00023      * en remplacant '/n' par '/0'  */
00024     for(i=0;i<200;i++){
00025       ligne[i]=fgetc(stream);
00026       if(ligne[i]=='\n'){
00027         ligne[i]='\0';
00028         break;
00029       }
00030     }
00031     /* Si on deborde du buffer, il y a erreur */
00032     if(i==200){
00033       num_erreur=E_LONG;
00034       print_erreur("!");
00035       continue;
00036     }
00037     switch(ligne[0]){
00038     case '@':/* Declaration de constante */
00039       if( !traiteConstante(ligne+1) )
00040         print_erreur("assignation");
00041       break;
00042     case ';': break;/* Commentaire */
00043     case '\t':/* Instruction */
00044       if( !traiteInstruction(ligne+1) )
00045         print_erreur("instruction");
00046       break;
00047     case '\0': end(); return ; /* Ligne vide : sortie */
00048     default: /* Erreur  */
00049       num_erreur=E_UNSUP;
00050       print_erreur("ligne inconnue");
00051     }
00052   }
00053 }
00054 
00062 int main(int argc, char** argv){
00063   FILE *stream;
00064   /* Argument obligatoire */
00065   if(argc!=2){
00066     fprintf(stderr,"Usage : %s file\n",argv[0]);
00067     return EXIT_FAILURE;
00068   }
00069   /* Si l'argument est "-" on lit sur l'entree standard */
00070   if(strcmp(argv[1],"-")){
00071     stream=fopen(argv[1],"r");
00072     if(stream==NULL){
00073       print_erreur(argv[1]);
00074       return EXIT_FAILURE;
00075     }   
00076   }
00077   else
00078     stream=stdin;
00079   /* C'est parti */
00080   analyse(stream);
00081   return EXIT_SUCCESS;
00082 }

Generated on Mon Nov 10 16:02:57 2008 for Calculette by  doxygen 1.3.9.1