bouchnina

Compilateur

Jan 11th, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.14 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace compilateur
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             // la variable qu on doit remplire avec la declaration de la structure
  14.             string decla = null;
  15.             Console.WriteLine("Entrez une declaration de structure valide : \n ");
  16.             decla = Console.ReadLine();
  17.             // Supprimer les espaces avant et apres la declaration pour bien tester les conditions
  18.             decla = decla.Trim();
  19.             //On verifie si la declaration est vide
  20.             if (decla == string.Empty)
  21.             {
  22.                 Console.WriteLine("\nErreur : La declaration est vide.\n");
  23.                 // Laisser la console en mode attente
  24.                 Console.ReadLine();
  25.                 // L instruction return pour ne pas executer le reste du code et finir le programme
  26.                 return;
  27.             }
  28.             // On verifie si la declaration commence par le mot clé struct
  29.             bool test = decla.ToLower().StartsWith("struct ");
  30.             if (!test)
  31.             {
  32.                 Console.WriteLine("\nErreur : Verifier que vous avez utilise le mot struct\n");
  33.                 Console.ReadLine();
  34.                 return;
  35.             }
  36.  
  37.             // Ici On verifie que le nom de la structure est correcte
  38.             // Un nom est correcte s il comprend seulement des lettres A-Z
  39.             int i = 0;
  40.             for (i = 7; i<decla.Length; i++)
  41.             {
  42.                 if (decla[i] == ' ') break;
  43.                 if (!char.IsLetter(decla[i]))
  44.                 {
  45.                     Console.WriteLine("\nErreur : Le nom de la structure doit etre A-Z\n");
  46.                     Console.ReadLine();
  47.                     return;
  48.                 }
  49.             }
  50.  
  51.              // On verifie l acollade mais on try catch
  52.             // Try catch pour tester si la declaration est complete ou manquante
  53.             try
  54.             {
  55.                 // On verifie l acollade ouvrante                
  56.                 test = decla[++i].Equals('{');
  57.                 if (!test)
  58.                 {
  59.                     Console.WriteLine("Erreur : Verifier que vous avez ouvert une acollade");
  60.                     Console.ReadLine();
  61.                     return;
  62.                 }
  63.                 // Ici On verifie s il y a un espace apres l acollade sinn pas d erreur
  64.                 if (decla[++i] == ' ') i++;
  65.                 // Les types qu on accepte lors de la declaration dans une structure
  66.                 string[] list = {"int","char","float","double","string" };
  67.                 string tmp="";
  68.                 for (; i<decla.Length;i++ )
  69.                 {
  70.                     if (decla[i] == ' ') break;
  71.                     tmp += decla[i];
  72.                 }
  73.                 if (!list.Contains(tmp))
  74.                 {
  75.                     throw new Exception("Veuillez entrer un type valide dans la structure\n");
  76.                 }
  77.                 if (decla[i] != ' ') throw new Exception("Un espace doit separer le type du nom de la variable");
  78.  
  79.                 // On doit verifier le nom de la variable
  80.                 ++i;
  81.                 int pos = decla.IndexOf(';');
  82.                 for (;i<decla.Length ; i++)
  83.                 {
  84.                     if (i == pos) break;
  85.                     if (!char.IsLetter(decla[i]))
  86.                     {
  87.                         throw new Exception("Le nom de la variable doit etre en lettre A-Z");
  88.                     }
  89.                 }
  90.                 // Verifier si l instruction se termine par un ;
  91.                 if (pos==-1) throw new Exception("Une Instruction doit se terminer par un ;");
  92.             }
  93.             catch (Exception e)
  94.             {
  95.                 Console.WriteLine("\nErreur : La declaration est manquante\n");
  96.                 Console.WriteLine("Autre Info : " + e.Message+"\n");
  97.                 Console.ReadLine();
  98.                 return;
  99.             }
  100.  
  101.  
  102.             Console.WriteLine(i + " " + decla.Length);
  103.             Console.ReadLine();
  104.         }
  105.     }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment