codigo p, triplos, cuadruplos
Codigo p
Prolog, proveniente del francés Programation et Logique, es un lenguaje de programación lógico e interpretado, bastante popular en el medio de investigación en Inteligencia Artificial. Se trata de un lenguaje de programación ideado a principios de los años 70 en la universidad de Aix-Marseille por los profesores Alain Colmerauer y Phillipe Roussel. Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, a mediados de los 70, David H.D. Warren desarrolló un compilador capaz detraducir Prolog en un conjunto de instrucciones de una máquina abstracta denominadaWarren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es unlenguaje semi-interpretado. Prolog se enmarca en el paradigma de los lenguajeslógicos, lo que lo diferencia enormemente de otros lenguajes más populares talescomo Fortran, Pascal, C, etc. En todos los mencionados, las instrucciones seejecutan normalmente en orden secuencial, es decir, una a continuación de otra, en elmismo orden en que están escritas, que sólo varía cuando se alcanza una instrucciónde control (un bucle, una instrucción condicional o una transferencia).
Los programas en Prolog se componen de cláusulas de Horn que constituyen reglasdel tipo “modus ponendo ponens”, es decir, “Si es verdad el antecedente, entonces esverdad el consecuente”. No obstante, la forma de escribir las cláusulas de Horn es alcontrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. Elantecedente puede ser una conjunción de condiciones que se denomina secuencia deobjetivos. Cada objetivo se separa con una coma y puede considerarse similar a unainstrucción o llamada a procedimiento de los lenguajes imperativos. En Prolog noexisten instrucciones de control. Su ejecución se basa en dos conceptos: la unificacióny el backtracking. Gracias a la unificación, cada objetivo determina un subconjunto decláusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina punto deelección. Prolog selecciona el primer punto de elección y sigue ejecutando elprograma hasta determinar si el objetivo es verdadero o falso. En caso de ser falsoentra en juego el ‘backtracking’, que consiste en deshacer todo lo ejecutado situandoel programa en el mismo estado en el que estaba justo antes de llegar al punto deelección.
Un tipo de lenguaje interpretado. idiomas P-código son una especie de híbrido, que caen entre lenguajes compilados y lenguajes interpretados de la manera que se ejecuten. Al igual que un lenguaje interpretado, la programación del P-código se convierte en una forma binaria de forma automática cuando se ejecuta, en lugar de tener que ser compilado. Sin embargo, a diferencia de un lenguaje compilado el archivo binario ejecutable se almacena en pseudo-código, no en lenguaje de máquina. Además, a diferencia de un lenguaje interpretado, el programa no tiene que ser convertida a binario cada vez que se ejecute. Después de que se convierte en P-código la primera vez, la versión pseudo-código se utiliza para cada ejecución adicionales.
Código P (y por tanto sus programas) tienden a ser más lento que los lenguajes compilados y programas, pero más rápido que lenguajes interpretados, y por lo general tienen autorización para algunas funciones del sistema operativo de bajo nivel, pero no el acceso directo al hardware. No requieren compiladores a veces costosos, a menudo se incluyen junto con los sistemas operativos, y algunos lenguajes de código p-son más fáciles de programar que lenguajes compilados. Ejemplos de lenguas Pcode son Java, Python y REXX / REXX objetos.
Triplos
En la historia de los compiladores han sido utilizadas una amplia variedad derepresentaciones intermedias como lo es la siguiente clase de representación decódigo intermedio de un árbol de 3 direcciones, 2 para los operandos y una para laubicación del resultado. Esta clase incluye un amplio número de representacionesdiferentes entre las cuales encontramos cuádruplos y triples. La principal diferenciaentre estas notaciones y la notación postfija es que ellos incluyen referenciasexplicitas para los resultados de los cálculos intermedios, mientras que la notaciónposfija los resultados son implícitos al representarlos en una pila.
- La diferencia entre triples y cuádruplos es que con los triples es referenciado el valor intermedio hacia el número del triple que lo creo, pero en los cuádruplosrequiere que ellos tengan nombre implícitos.
- Los triples tienen una ventaja obvia de ser más consistente, pero ellosdependen de su posición, y hacen que la optimización presente cambios decódigo mucho más compleja.
- Para evitar tener que introducir nombres temporales en la tabla de símbolos, sehace referencia a un valor temporal según la posición de la proposición que localcula. Las propias instrucciones representan el valor del nombre temporal. Laimplementación se hace mediante registros de solo tres campos (op, arg1,arg2).
- En la notación de tripletes se necesita menorespacio y el compilador nonecesita generar los nombres temporales. Sin embargo, en esta notación,trasladar una proposición que defina un valor temporal exige que se modifiquentodas las referencias a esa proposición.
- Una forma de solucionar esto consiste en listar las posiciones a las tripletas enlugar de listar las tripletas mismas. De esta manera, un optimizador podríamover una instrucción reordenando la lista, sin tener que mover las tripletas ensí.
Son por así decirlo las normas que regulan nuestras expresiones regulares, (if,then, else) donde una expresión condicional nos permite elegir que pautas deben ser encontradas, en base a una condición.
Comentarios
Publicar un comentario