Codigo para buscar palabras reservadas de C en archivos

14 06 2008

Un algoritmo mas para este blog, espero que a alguien le sea de utilidad.

Todo empezo cuando nuestro maestro de “Teoria de la computacion” dejo como “tarea” hacer un algoritmo que fuese capas de identificar palabras reservedas del lenguaje c en archivos de texto plano, codificarlo y generar el ejecutable que hiciera el mencionado trabajo.

Usando la funcion read(), la cual lee un flujo de bytes, hace que este programa encuentre las palabras reservadas en cualquier secuencia de bytes que cumplan con el patron de alguna palabra reservada de el lenguaje C.

Como se podran dar cuenta haciendo unas pequeñas modificaciones, podremos encontrar cualquier secuencia de bytes que se especifique.

Bueno hay se los dejo, si hay algun comentario al respecto, solo comentalo, espero que sea constructivo.:)

/************************************************************
*
* ALUMNO: Fredy Ramirez Guzman
* MATERIA: Teoria de la computacion
* PROGRAMA: busc.c -> Encuentra palabras reservadas del
* -> lenguaje c en un archivo.
*
************************************************************/
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
main(int argc, char *argv[]){
<ul>char pal[37][10]={"auto", "break", "case", "char",
"const", "continue", "default", "do",
"double", "else", "enum", "extern",
"float", "for", "goto", "if",
"int", "long", "register", "return",
"short", "signed", "sizeof", "static",
"struct", "switch", "typedef", "union",
"unsigned", "void", "volatile", "while",
"include"};
char arr[15]={0};
char buffer[2]={0};
int df, x, i,contador=0;
df = open(argv[1], O_RDONLY);
if(df==-1){</ul>
printf("\nNo se encontro el archivo: %s\n", argv[1]);
}
else{
printf("\n\n -- Archivo: %s --\n", argv[1]);
printf(" -- Palabras reservadas que contiene --\n\n");
while((x = read(df, buffer, 1))!=0){
if(buffer[0]=='a' || buffer[0]=='b' || buffer[0]=='c' ||
buffer[0]=='d' || buffer[0]=='e' || buffer[0]=='f' ||
buffer[0]=='g' || buffer[0]=='h' || buffer[0]=='i' ||
buffer[0]=='k' || buffer[0]=='l' || buffer[0]=='m' ||
buffer[0]=='n' || buffer[0]=='o' || buffer[0]=='p' ||
buffer[0]=='r' || buffer[0]=='s' || buffer[0]=='t' ||
buffer[0]=='u' || buffer[0]=='v' || buffer[0]=='w' ||
buffer[0]=='x' || buffer[0]=='y' || buffer[0]=='z' ){
strcat(arr, buffer);
}
else{
if(strlen(arr)>=2 && strlen(arr)<=8){
for(i=0; i<37; i++){
if(strcmp(arr, pal[i])==0){
printf(" %s\n", arr);
contador++;
}
}
}
arr[0]='';//entre las comillas simples coloca el caracter de
}/*"fin de cadena" (diagonal invertida seguida de un cero) por alguna razon wordpress lo elimina.*/
}//De lo contrario el programa no funcionara...
printf("\n %d palabras reservadas escritas en el archivo.\n\n",
contador);
}
}//fin de programa busc.c

Por cierto, este programa lo llame “busc.c“; para compilarlo y ejecutarlo:
$ gcc busc.c -o busc
$ ./busc [nombre_de_archivo].[extencion]

Saludos…

Entradas de interes:

About these ads

Acciones

Información

3 respuestas

25 11 2008
Aztlanero

Una pregunta, en tu caso cuál es el caracter para fin de cadena, estaba haciendo algo similar pero no se si poner salto de línea o espacio o que onda. Muchas gracias.

25 11 2008
Aztlanero

Listo jeje, muchas gracias de cualquier manera, buen tutorial gracias…

7 12 2008
r4mfr3

Ya esta corregido el problema de las librerias.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: