2012-04-23 13 views
6

Permítanme decir primero que NO estoy buscando soluciones automáticas aquí. Quiero traducir el código de Python para Smalltalk porque me he dado cuenta de algunas frases muy sencillas se pueden traducir de forma automática, ejemplos:Traducir el código de Python a Smalltalk

Asignación de una variable a un valor

Python

i = 1 

Smalltalk

i := 1. 

Creación de una nueva instancia de una clase

Python

instance = module.ClassName() 

Smalltalk

instance := ClassName new. 

Un bucle for

Python

for a in [0,1,2]: 
    print (str(a)+str(a)) 

Smalltalk

#(0 1 2) do: [: a | Transcript show: a + a; cr ] 

y así sucesivamente (mientras bucles, condicionales, etc.). Mi idea es tener una herramienta que traduzca todos estos casos extremadamente "simples", y luego puedo completar o enseñar un sistema de reglas a mano.

¿Conoces alguna herramienta de traducción de programación o biblioteca que pueda ayudarme?

En caso de que no haya oído hablar de ninguna herramienta, ¿qué técnica/patrón usará para implementar dicha traducción? ¿Puedes proporcionar un enlace a un ejemplo?

Gracias

+0

necesita escribir un transcompilador. wikipedia enumera al menos dos que se traducen de python -> (C, javascript) que puedes usar como base https://en.wikipedia.org/wiki/Source-to-source_compiler – gcb

Respuesta

1

No conozco ninguna herramienta de este tipo, y en general puede ser complicado y/o ineficaz. De modo que su ruta dependería de su necesidad más precisa: portar una biblioteca de python existente, simplemente usarla de smalltalk, o hacer un buen código de Smalltalk que haga lo mismo que python one.

Rutas yo consideraría:

  • dejando biblioteca de Python como es, y decir que es de Smalltalk a través de la interfaz c
  • implementación de analizador de pitón en analizador Pettit una continuación:
    • aplicar generador de Smalltalk quizá asistido por humanos a través de la interfaz de usuario
    • intérprete de Python en smalltalk

Tenga en cuenta que la variante del generador podría enfrentar algunos problemas difíciles en casos generales, por ejemplo, smalltalk tiene un número fijo de variables de instancia, mientras que en python puede adjuntarlo sobre la marcha. Podría solucionarlo, pero el código smalltalk resultante podría no ser bonito.

En cuanto a la implementación de python dentro de smalltalk, eche un vistazo a la presentación helvetia de Lukas Renggli, se trata de incluir otros idiomas dentro de smalltalk IDE.

+1

También podría (si no le importa su licencia GPL) utilizar el puente Python-Smalltalk de OpenQwaq: http://squeakingalong.wordpress.com/2011/05/04/openqwaq-python-integration/ –

+0

No tenía conocimiento de ¡Es un gran consejo! –

3

Se necesitan analizar el código Python, recorrer el árbol de sintaxis abstracta que se genera por el analizador y la salida de su Smalltalk. Hay un buen artículo sobre Python ASTs por Eli Bendersky y uno un poco más antiguo here. Python lo hace relativamente sencillo ya que la biblioteca estándar de Python expone muchas de las herramientas internas del intérprete y el documentation es razonablemente completo.

0

Eche un vistazo a ply, que es una implementación de Lex-Yacc Python. Lo he usado principalmente para traducir otro idioma al código de byte de Python construyendo un Python AST con él, pero también debería ser todo lo contrario.

+0

Este es un buen punto, y la capa es una impresionante pieza de kit, pero significa escribir un analizador desde cero. Usar el 'ast' de la biblioteca estándar significa que OP puede aprovechar el trabajo que se ha realizado en el analizador CPython. – snim2

+0

Buen punto, pero ply tiene una implementación de ejemplo con la mayor parte de la gramática de Python. –

+0

¡Gracias, no sabía eso! – snim2

Cuestiones relacionadas