Guia Python

Páginas: 9 (2110 palabras) Publicado: 29 de septiembre de 2011
MiniLisp (un ejemplo de ply)Publicado el 2 de noviembre, 2007 por Juanjo
2011-09-28T01:49:13.entry-meta
PLYThe asteroid to kill this dinosaur is still in orbit.- Lex Manual Page
PLY o python-ply (cómo se llama su paquete en Debian) es una implementación de las herramientas lex y yacc para análisis léxico y sintáctico. Está enteramente escrito en Python y su primera versión fue desarrolladopor David Beazley en el año 2001 para ser usado en un curso de Introducción a los Compiladores.
LexLex es una creador de analizadores léxicos (lexers). La función principal de un lexer es tomar un flujo de caracteres entrada y devolver un flujo de tokens como salida. Ejemplos de tokens en un programa escrito en algún lenguaje de programación podrían ser: un número, un paréntesis, un identificadoro una palabra clave. Por ejemplo: 17, ), miVarible, if.
Para definir los tokens utilizamos expresiones regulares.
YaccYacc, Yet Another Compilers Compiler, nos permitirá crear un programa que tome un flujo de tokens como entrada y reconozca a partir de ellos un lenguaje. Notemos por ejemplo que si bien if { 555 ;; for printf i++[] es un flujo de tokens válidos de C, no es una sentencia válidadel lenguaje como si lo es for(i=0; i<5; i++){}.
Para definir la gramática de un lenguaje de programación vamos a usar una notación conocida como BNF (Backus–Naur form).
MiniLispIntérpretes de lenguajes de programación como Python o PHP son escritos en C por razones de eficiencia. ¿Vamos a usar Python para escribir uno? Bueno.. ¿por qué no? La filosofía de Python consiste en escribir rápido unasolución para un problema y poder probarla enseguida. En el tiempo en que implementás en C una idea podes escribir 3 soluciones diferentes en Python, probarlas y elegir con cual continuar. En caso de que en algún momento se detecte que el programa resultante corre lento (más lento de lo necesario), siempre podés:
realizar optimizaciones en el código Python
reescribir en C alguna partecritica del mismo.
El intérprete que voy a construir para aprender ply va a tener sabor a Lisp y va a ser muy sencillo. Va a ser un MiniLisp! En particular:
Usará notación prefija mediante paréntesis de la forma (fun-name arg [arg]). Esto significa que el intérprete podrá resolver expresiones como (+ 1 1) y responderá 2, (= 1 1) y responderá #t (la forma en que voy a representar el valor deverdad True), pero también (+ 1 2 3 4 5) que da como resultado 15 y (or #t #f #f) que da como resultado #t.
Permitirá resolver expresiones anidadas. Esto significa que además de las expresiones anteriores, podrá resolver expresiones como (+ 1 (+ 2 2) (- 5 4) 10) que da como resultado 16, (and (= 1 1) #t) que da como resultado #t y (and (or (= (+ 10 10) 20) #f (= #t #f)) (= 13 (+ 10 1 1 1 1 (- 21)))) cuyo resultado se deja a cargo del lector para que vaya entrando en clima :)
Contará con funciones de manejo de listas típicas en Lisp como car, cdr y cons:
(car '(1 2 3)) obtiene el primer elemento (o cabeza) de la lista '(1 2 3): 1
(cdr '(1 2 3)) obtiene la cola de la lista '(1 2 3): (2 3)
(cons 0 '(1 2 3)) crea una nueva lista con 0 como cabeza y '(1 2 3)como cola: (0 1 2 3)
Notar que (cons '(1 2) '(3 4)) da como resultado una lista cuya cabeza es la lista '(1 2) y su cola '(3 4): ((1 2) 3 4)
También se podrá usar (concat '(1 2) '(3 4)) para obtener una lista que sea la concatenación de ambas: (1 2 3 4)
y (list 1 2 3 4) para crear una lista de elementos: (1 2 3 4)
La implementación tiene solo fines didácticos así que solotrabajará con enteros aunque añadir soporte para números reales (floats) debería ser fácil.
No tendrá un manejo de errores muy completo.
Pensé varias formas de implementar la función define pero no conseguí que funcione del todo bien :( , así que quité la funcionalidad.
Otra función común en las implementaciones de Lisp con la que contará MiniLisp es cond, la cual evalúa su...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • python
  • Python
  • Por Qué Python?
  • PYTHON
  • python sonido
  • python
  • python
  • Python

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS