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:


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

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.