Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pila.h"
- #include <stddef.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #define APOSTROFE '\''
- ssize_t getline (char * linea [],size_t* cantidad, FILE* archivo);
- char opuesto(char caracter){
- if (caracter == ')') return '(';
- if (caracter == ']') return '[';
- else return '{';
- }
- bool validar_linea(char* linea){
- bool resul = true;
- pila_t* pila = pila_crear();
- if (!pila) return false;
- for (int i=0; linea[i] != '\0'; i++) {
- if (linea[i] == APOSTROFE){
- i++;
- bool comilla_final= true;
- while (comilla_final){
- if(linea[i] == '\0'){
- resul = false;
- comilla_final = false;
- }
- else if (linea[i] == APOSTROFE) comilla_final = false;
- else i++;
- }
- }else if (linea[i] == '(' || linea[i] == '{' || linea[i] == '[') {
- pila_apilar(pila, &linea[i]);
- }else{
- if (linea[i] == ')' || linea[i] == ']' || linea[i] == '}'){
- if (pila_esta_vacia(pila)) resul = false; //Por si tengo solo elementos que cierran(no puedo desapilar)
- else{
- void* desapilado = pila_desapilar(pila);
- if (*(char*)desapilado == opuesto(linea[i])) resul = true;
- else resul = false;
- }
- }
- }if (!resul) break;
- }
- if (! resul || ! pila_esta_vacia(pila)) resul = false;
- else resul = true;
- pila_destruir(pila);
- return resul;
- }
- void sintax_validation (){
- char* linea = NULL;
- size_t cant = 0;
- ssize_t leidos;
- while ((leidos = getline (&linea, &cant, stdin) > 0)){
- if (validar_linea(linea)) fprintf (stdout, "OK\n");
- else fprintf (stdout, "ERROR\n");
- }
- free (linea);
- }
- int main (int argc, char * argv []){
- if (argc != 1) {
- fprintf(stderr, "%s\n", "Cantidad de parametros erronea" );
- return 1;
- }
- sintax_validation ();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement