Advertisement
Guest User

Untitled

a guest
May 27th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. #include "pila.h"
  2. #include <stddef.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <unistd.h>
  7. #define APOSTROFE '\''
  8. ssize_t getline (char * linea [],size_t* cantidad, FILE* archivo);
  9.  
  10. char opuesto(char caracter){
  11.     if (caracter == ')') return '(';
  12.     if (caracter == ']') return '[';
  13.     else return '{';
  14.    
  15. }
  16.  
  17. bool validar_linea(char* linea){   
  18.     bool resul = true;
  19.     pila_t* pila = pila_crear();
  20.     if (!pila) return false;
  21.     for (int i=0; linea[i] != '\0'; i++) {
  22.         if (linea[i] == APOSTROFE){
  23.             i++;
  24.             bool comilla_final= true;
  25.             while (comilla_final){
  26.                 if(linea[i] == '\0'){
  27.                     resul = false;
  28.                     comilla_final = false;
  29.                 }
  30.                 else if (linea[i] == APOSTROFE) comilla_final = false;                 
  31.                 else i++;
  32.             }
  33.         }else if (linea[i] == '(' || linea[i] == '{' || linea[i] == '[') {
  34.                 pila_apilar(pila, &linea[i]);
  35.         }else{
  36.             if (linea[i] == ')' || linea[i] == ']' || linea[i] == '}'){
  37.                 if (pila_esta_vacia(pila)) resul = false; //Por si tengo solo elementos que cierran(no puedo desapilar)
  38.                 else{
  39.                     void* desapilado = pila_desapilar(pila);
  40.                     if (*(char*)desapilado == opuesto(linea[i])) resul = true;
  41.                     else resul = false;
  42.                 }
  43.             }
  44.         }if (!resul) break;
  45.     }
  46.     if (! resul || ! pila_esta_vacia(pila)) resul = false;
  47.     else resul = true;
  48.     pila_destruir(pila);
  49.     return resul;
  50. }
  51.  
  52. void sintax_validation (){
  53.     char* linea = NULL;
  54.     size_t cant = 0;
  55.     ssize_t leidos;
  56.     while ((leidos = getline (&linea, &cant, stdin) > 0)){
  57.         if (validar_linea(linea)) fprintf (stdout, "OK\n");
  58.         else fprintf (stdout, "ERROR\n");
  59.         }
  60.     free (linea);
  61. }
  62.  
  63.  
  64. int main (int argc, char * argv []){
  65.     if (argc != 1) {
  66.         fprintf(stderr, "%s\n", "Cantidad de parametros erronea" );
  67.         return 1;
  68.     }
  69.     sintax_validation ();
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement