Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> // Guerra Esquivel Angel 1CM14
- #include <string.h>// Glaas2
- #include "Pila.h"
- int main(int argc, char *argv[])
- {
- //************DECLARACIONES E INICIALIZACIONES***************
- FILE *archivo; // Apuntador al ARCHIVO a leer
- char ruta[100]; // CADENA que guarda la ruta del ARCHIVO
- char c; // CARACTER donde se guardarán los caracteres del ARCHIVO
- int linea=1; // ENTERO que guardará el número de líneas del archivo
- pila stack=NULL; // Inicialización de la PILA a usar
- nodo aux;
- INIT(&stack);
- printf("\nIntroduzca nombre y ruta del archivo: "); // Se recibe la RUTA del ARCHIVO
- fflush(stdin);
- gets(ruta);
- archivo=fopen(ruta, "r+"); // Se abre el ARCHIVO en la RUTA especificada
- if((archivo=fopen(ruta, "r+"))==NULL)
- {
- fprintf(stderr, "\nError al abrir el archivo.\n");
- exit(1);
- }
- else
- printf("\nOK %s abierto correctamente.\n\n", ruta);
- c=fgetc(archivo); // c=primer caracter del archivo
- while (c != EOF) // Mientras el caracter sea distinto del fin del archivo
- {
- switch(c)
- {
- case '{':case '[':case '(': // Si encuentra una llave abierta asigna el valor de la llave al nodo asi como
- aux.ll=c; // la linea en la que se encuentra y la mente a la PILA
- aux.line=linea;
- PUSH(&stack, aux);
- break;
- case '}':case ']':case ')':// Si encuentra una llave cerrada
- if(EMPTY(stack)) // Si la PILA está vacia en este momento, significa que no están balanceadas las llaves
- {
- printf("\nERROR en linea %d: %c jamas abierto.", linea, c); // Indica que falta el complemento del caracter, como "{[("
- break;
- }
- aux=POP(&stack); // Se recupera el valor del primer elemento en la PILA y se asigna a "aux"
- if(c==')' && aux.ll== '(')// Se compara que el elemento sacado de la PILA sea igual al caracter leído en el momento, si no es
- printf("\r"); // igual, vuelve a meter al elemento en la PILA
- else
- if(c==']' && aux.ll== '[')
- printf("\r");
- else
- if(c=='}' && aux.ll== '{')
- printf("\r");
- else
- { // Si no se cumplen las condiciones significa error
- aux.line=linea;
- PUSH(&stack, aux);
- printf("\nERROR en linea %d: %c jamas abierto.", linea, c);
- }
- break;
- case '\n': // Aumenta el numero de linea cada que encuentra un salto en el archivo
- linea=linea+1;
- }
- c=fgetc(archivo);
- }
- if(EMPTY(stack))// Si en este momento, despues de leer el archivo, la PILA está vacía todo está correcto
- printf("\nLos parentesis, corchetes y las llaves estan balanceados.\n");
- while(!EMPTY(stack)) // En caso contrario, mientras la PILA no esté vacía imprime los NODOS guardados en la PILA, ya que no están balanceados
- {
- aux=POP(&stack);
- printf("\nERROR en linea %d: %c jamas cerrado.", aux.line, aux.ll);
- }
- printf("\n\nNumero de lineas = %d.\n\n", linea--); // Número de lineas totales
- fclose(archivo); // Cierre del ARCHIVO
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment