Expresiones

585 días atrás

He expandido el “parser” de tuu para reconocer expresiones buaa ¿Cómo se traduce parser?. Sí, reconoce sumas, multiplicaciones, operaciones con bits, indexación (o sea a[ 1]=5) y varias cosas más, respetando la precedencia de operadores y toda la cosa.

Ya podría convertir tuu en una calculadora de escritorio, aunque deshabilité la generación de código para acelerar un poco el desarrollo de la gramática. Aún falta que acepte definiciones de funciones y, para que sea turing-completo, condiciones y ciclos.

También he comenzado con la documentación para desarrolladores, que es generada automáticamente desde el código fuente, utilizando Doxygen. Aún no he comenzado con la documentación para usuarios, pero al menos ya puse el sitio oficial para el lenguaje: http://tuu.mixtk.com. Sí, el sitio está en inglés, desafortunadamente todo el desarrollo tiene que hacerse en inglés para que sea relevante. No importa, ¡este blog siempre será en español!

Elio Cuevas Gómez

,

Comentarios

---

Parser y diversión con Autoconf

601 días atrás

Hace rato que no escribo y parece ser un buen momento para reportar mis avances. El Parser (analizador sintáctico) de “tuu” está tomando forma y se ve bien. Hice un analizador recursivo descendiente (descend recursive parser) LL(1) hecho a mano. Ahora sólo puede reconocer constantes y llamadas a función, pero es algo. Lo que sigue es que reconozca expresiones del tipo 1+1.

También hay algo del generador del código. Actualmente sólo puede generar código para:

puts(42)

Así que aún falta algo para un hola mundo. Bueno, sólo genera código intermedio, pero a partir de eso es trivial generar código verdadero usando LLVM.

También pasé todo el viernes luchando con Autoconf para crear una macro que detectara LLVM. Al final pude hacerlo, pero me frustró mucho y hasta me dio dolor de cabeza, estuve a punto de contratar un asesino para que diera un golpe contra los creadores de Autoconf, jejeje.

Elio Cuevas Gómez

,

Comentarios

---

Analizador léxico

611 días atrás

¡Feliz año!

El analizador léxico (lexer) para tuu está listo, reconoce casi todos los símbolos que el lenguaje soportará y es razonablemente fácil de extender.

Tuve que escribir el lexer completamente a mano, aún cuando ya lo había hecho en la herramienta “flex.” Hacer un analizador lexico en “lex” es bastante fácil en realidad mientras que hacerlo a mano resultó bastante complejo ¿Porque reinventar la rueda?

Quiero que tuu sea capaz de soportar unicode nativamente y que sea seguro para hilos, lo cual probablemente sea posible en lex, pero es mejor hacer bien esta parte tan crítica desde el comienzo.

El código está en ShareSource, aunque no hay mucho que mostrar ahora. Lo que sigue es crear el analizador sintáctico (parser) y creoq ue lo haré también a mano.

Elio Cuevas Gómez

,

Comentarios

---

Infraestructura para compiladores

659 días atrás

Leyendo Ars me enteré del proyecto LLVM que liberó una nueva versión recientemente. Aún no he avanzado mucho con mi compilador, pero ya se lo difícil que es así que aprender sobre este proyecto me ayudaría a crear tuu de manera más rápida.

Niños leer noticias a veces es bueno.

Elio Cuevas Gómez

,

Comentarios

---

El lenguaje para dominarlos a todos

759 días atrás

Durante mucho tiempo he querido crear un lenguaje de programación propio, y ahora que tengo más claro lo que me gustaría que este lenguaje tuviera, he decidido empezar.

tuu es un lenguaje de programación de alto nivel y de propósito general para la creación de aplicaciones gráficas y multimedia portátiles y de alto rendimiento.

“tuu” es una palabra en mixteco que significa “pluma”. Los objetivos de diseño de este lenguaje serán:

  1. Rápido
  2. Fácil de usar
  3. Sintaxis sencilla y elegante
  4. Independiente del dispositivo: para que funcione igual en una PC y en un celular
  5. Desplegable, quitarle la carga del despliegue al desarrollador, tanto como sea posible
  6. Seguro para hilos (thread safe)
  7. Internacionalizable (i18n): Soporte nativo para unicode
  8. Localizable (l10n)

Posible ejemplo:

#Hola mundo
forms.Label("¡Hola mundo!").show

Mostrará una ventana con el texto “¡Hola mundo!”. Trataré de copiar algunas de las mejores características de Python, Ruby y Java.

Elio Cuevas Gómez

,

Comentarios [2]

---