• Publicidad

Interpretar Perl. Traducir scripts a lenguaje humano

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Interpretar Perl. Traducir scripts a lenguaje humano

Notapor laz3r1c0m » 2014-07-24 01:59 @124

Hola a todos.

Básicamente mi pregunta se remonta a intentar crear una herramienta que traduzca código Perl a código humano :o Es decir: poder leer el código Perl como si de un libro se tratase... Parece tonto, creo, pero leyendo por ahí, creo que sería un avance muy grande permitir traducir grandes códigos al lenguaje humano, y dada la capacidad de procesamiento de texto de Perl creo que sería el lenguaje perfecto para permitir una herramienta así...

Sin embargo me surge la gran duda. Leyendo por ahí y según lo que veo, Perl es imposible de interpretar porque su sintaxis, al ser increíblemente dinámica es casi imposible crear un analizador sintáctico y léxico que permita con total certeza identificar lo que una determinada porción de código realiza...

He leído sobre proyectos como Marpa::R2 pero no saco conclusiones sobre si se puede o no, por ejemplo, interpretar la sintaxis de Perl con la garantía de ser correcta la traducción al lenguaje humano que realizaría la herramienta.

Aquí viene mi duda, si Perl no tiene un analizador sintáctico y directamente ejecuta el código, existiría la posibilidad de capturar cada ejecución de código y traducirla al lenguaje humano. Por ejemplo: supongamos que defino un hash. Al no tener una estructura léxica rígida sobre cómo puedo definir un hash o desde qué parte de código puedo dar inicio a un hash, ¿puedo capturar el resultado de la ejecución y traducir el resultado como "Definición de un hash" independientemente de la estructura gramatical de la definición del hash o desde qué parte del código defino el hash?

Aunque eso ya no sería un intérprete por que en esencia yo ejecuto el código Perl para capturar la ejecución y saber qué acción realiza y luego yo traducir esa acción a un lenguaje comprensible, pero quiero saber si existe tal posibilidad o solo son delirios. ¡ja,ja,ja! xD

De todas formas hay algo que no entiendo. Por ejemplo al escribir una instrucción Perl y al escribirla mal o al no cumplimentar por ejemplo las comillas, Perl me tira un error relativo de dónde está el problema, del porqué no me ejecuta... ¿Eso en sí no es un intérprete que lleva Perl incorporado?

¡Saludos y muchas gracias!
laz3r1c0m
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2014-04-07 22:51 @994

Publicidad

Re: Interpretar Perl. Traducir scripts a lenguaje humano

Notapor explorer » 2014-07-24 09:59 @457

Lo primero que me vino a la mente, al leer tu comentario, es que estabas hablando de "Programación literaria" (introducción para Perl) pero me equivoqué: lo que buscas no es un lenguaje de programación sino una traducción.

El caso es que Perl tiene mucho del inglés. El propio Larry Wall lo ha explicado (Why Perl Is Like a Human Language) en algunas ocasiones e incluso tiene una página donde explica los principios del Lenguaje Natural en Perl. Su influencia cristiana y su formación como lingüista le sirvieron para crear un lenguaje informático ideal para procesar textos. El propio Larry Wall indica que Perl es prácticamente un lenguaje natural.

Y tú lo que quieres es justo lo contrario ;) Pasar de Perl a lenguaje humano.

Hay una ventaja: los lenguajes informáticos tiene una sintaxis y morfología sencilla, no porque así sea más fácil aprenderlos, sino porque así es más fácil crear intérpretes y compiladores para ellos. Y si es sencilla, pues debería ser sencillo hacer la traducción a lenguaje humano.

perl sí que se puede interpretar, pero es muy complicado. De hecho, existe el dicho "solo perl puede interpretar Perl" (nótese la diferencia entre "perl" -el programa intérprete- y "Perl" -el lenguaje-.

perl sí que tiene un intérprete, en su interior. Al arrancar un programa, perl inicia la fase de compilación, que transforma el código Perl a un Árbol de sintaxis abstracta (AST), que luego transforma a op-codes. Cuando termina la compilación, empieza la fase de ejecución, que lee los op-codes y los pasa a la máquina virtual Perl (razón por la cual Perl es tan rápido como Java). Tienes más información en la sección Compiled code del documento perldoc perlguts. Ahí te pone que si tienes un perl compilado con la opción '-DDEBUGGING' podrás añadir la opción '-Dx' para que perl muestre ese árbol.

De forma intermedia, puedes ejecutarlo con el módulo B::Deparse, que hace un volcado a Perl de otro programa, por lo que puedes ver la simplificación (o no) de dicho programa por parte de perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -MO=Deparse  -E '$a = $b + $c;'
  2. BEGIN {
  3.     $^H{'feature_unicode'} = q(1);
  4.     $^H{'feature_say'} = q(1);
  5.     $^H{'feature_state'} = q(1);
  6.     $^H{'feature_switch'} = q(1);
  7. }
  8. $a = $b + $c;
  9. -e syntax OK
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

En CPAN hay módulos que sí son capaces, más o menos, de interpretar el lenguaje, como es el caso de la rama PPI, que es por donde yo empezaría. Pero si necesitas acceso más directo a los op-codes, pues entonces hay que acceder al AST.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados