nasciiboy

libreria de expresiones regulares en C

8 posts en este tema

hola buenas, he escrito una libreria de expresiones regulares en c, creo que es la mas pequeña jamas escrita y hasta puede que eficiente, aunque nadie ha respondido para replicar esta suposicion.

 

bueno por aca esta el codigo

 

https://github.com/nasciiboy/RecursiveRegexpRaptor

 

tiene un uso muy sencillo, y el codigo es extremadamente claro y evidente (o eso intenta).

se desarrollo como un compontente de un proyecto mas grande, aunque por si misma es mi mas grande orgullo como programador

 

si alguien desea colaborar con la traduccion del readme al ingles para difundirla se agradecera incluyendo un fichero CONTRIBUCIONES o algo asi. tambien se agradecerian nuevas ideas o caracteristicas.

Compartir este post


Enlace al post
Compartir en otros sitios

es marca de la casa. hasta arriba lo mas destacado del commit en un ingles de practica, luego ficheros manoseados, y al final en la seccion Sonic-Boom (tributo a Sonic Youth) la musica que escuchada durante la labor; a la izquierda el autor y a la derecha el album ':' para disco '::' continuacion de nombre de disco y '!' por es la primer vez que lo escucho.

 

 

la verdad si da pereza aprender a usar regexp aunque si manoseas texto (mucho o poco) es una herramienta asombrosa, ademas bien usada ahorra muchas lineas de codigo.

 

 

aqui una exprecion que no puedo resolver

 

 

la linea puede empezar por una combinacion de dos caracteres que pueden ser [<_^>] seguido por uno o varios espacios, luego algo de texto y nuevamente una combinacion de dos caracteres como la inicial, para finalizar en mas texto, el reto es capturar ambas combinaciones y ambos textos. un ejemplo:

 

<^ texto texto _coracter-envenenado <otro-caracter-envenenado ^^ texto texto texto

Editado por nasciiboy

Compartir este post


Enlace al post
Compartir en otros sitios

despues de una ligera remodelacion del codigo (que aumento el cruft) se pudo resolver la exprecion liosa de arriba con

 

 

"^\\s*<[\\<^_\\>]{2}>\\s+<!( [\\<^_\\>]{2} )+> <[\\<^_\\>]{2}> <.*>"

 

 

agregando el signo '!' para indicar *negacion de exprecion*. listo para usar en la version recien cocinada de la libreria.

Compartir este post


Enlace al post
Compartir en otros sitios

que tal, despues de unos meses trabajando en la libreria (reescribierdola de cero y modificando algunas cosas) hay una nueva vercion, esta ves incluye backreferences, ignorecase, y una peculiar forma de negar expreciones. y dos verciones de la liberira, puro ascii y utf8

 

lo he compilado con gcc 6.1.1 en freidora 24, creo que hay algun problema con gcc pues se producen dos errores especificamente en las pruebas 180 y 181. en cambio con clang 3.8.0 cero errores.. dejo un enlace para que me hagan el favor de probar con su compilador, el comando es

 

  $ compilador test_ascii.c regexp3_ASCII.c

  $ a.out

 

https://drive.google.com/open?id=0B_Zf17OIKOS9ZEE0bFY3NU9TMnc

 

me niego a agregar al repo codigo del cual conosco algun error.

 

gracias. por cierto, como creo que la libreria y su metodo merece tener un lugar en los libros de informatica por el resto del tiempo estoy escribiendo un libro con todo el proceso de construccion de esta pequeña maquinaria, con mucho codigo, explicando paso a paso, solicito colaboracion para escribir algo que paresca inteligente e iteresante, ademas de que pueda traducir al ingles, en principo por amor al arte, si sale algo digno divicion de 50-50 de donaciones y ventas en bibliotecas virtuales.

Editado por nasciiboy

Compartir este post


Enlace al post
Compartir en otros sitios

log para "la gente del futuro" : se retiran el enlace del anterior comentario, el error era provocado por no inicializar una varible. compilar con gcc o clang proporciona los mismos resultados.

 

adicionalmente se realizo una comparacion (se tomo la prueva de pcre elaborada por [dack100][sourceforge]) con las principales librerias.

los links

 

https://github.com/nasciiboy/RecursiveRegexpRaptor

https://github.com/nasciiboy/RecursiveRegexpRaptor-vs-Benchmarks

 

las siguientes metas

 

- explicacion de construccion detallada

- buscar un reemplazo elegante tanto en sintaxis como en codigo a la "negacion de expresion"

- mejorar el rendimiento.

 

el ultimo proposito escapa del plantamiento inicial de la libreria, el cual consite en ser el motor  mas sencillo tanto de uso como de codigo, por lo que seria un derivado con otro nombre... a menos que.. la nueva version "encaje armonicamente" con el codigo existente...

Compartir este post


Enlace al post
Compartir en otros sitios

que tal, despues de unos meses sin dar signos de vida retomo la escritura del manual raptor-book, esta vez intentando dejar las secciones en su forma definitiva.

de momento hay pocos capitulos, he revisado muchos errores dislexicos y hay una version en formato html pueden descargar una copia en

https://github.com/nasciiboy/raptor-book/archive/master.zip

o clonar el repositorio directamente

git clone https://github.com/nasciiboy/raptor-book.git

las actualizaciones seran constantes, se agradecera cualquier sugerencia o mejora que ayude a hacer mas comprensible el material

Compartir este post


Enlace al post
Compartir en otros sitios

haci casi un año que comence a programar esta cosa... y sigue incompleta (y extendiendose)!

 

recientemente hice un port de la version 3 (y 4) a go, por si quieren aportar y no sentirse intimidados con C... el codigo es un poco desastre y sin mucha orientacion a objetos

 

https://github.com/nasciiboy/regexp3/

 

queda pendiente varias cosas (readme (uuhh olvide borra el punto 4 del TODO)), en fin, estoy programando algo mas en go (cuantos recursos se pueden desperdiciar cuando el lenguaje te lo permite...) aver si sale pronto algo usable

 

pd: gracias por el "The Go Programming Language" de lo que llebo leido, no tengo ninguna queja, magnifico libro

Compartir este post


Enlace al post
Compartir en otros sitios

Registra una cuenta o conéctate para comentar

Debes ser un miembro de la comunidad para dejar un comentario

Crear una cuenta

Regístrate en nuestra comunidad. ¡Es fácil!

Registrar una cuenta nueva

Iniciar Sesión

¿Ya tienes cuenta? Conéctate aquí.

Iniciar Sesión