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í.
Cuadruplos
Es una estructura tipo registro con cuatros campos que se llaman: op, arg1, arg2 yresultado. OP tiene un código intermedio. Los operadores unarios como x:=-y noutilizan arg2. Generalmente arg1, arg2 y resultado son valores de tipo puntero yapuntan a una entrada en la tabla de símbolos.Por ejemplo, la proposición de tres direcciones x = y + z se podría representarmediante el cuádruplo (ADD, x,y, z). Las proposiciones con operadores unarios nousan el arg2. Los campos que no seusan se dejan vacíos o un valor NULL. Como senecesitan cuatro campos se le llama representaciónmediante cuádruplos.

Es una estructura tipo registro con cuatros campos que se llaman:

Donde operando1, operando2 y resultado pueden ser constantes, identificadores y variables temporales definidos por el compilador mientras que operador representa una operación arbitraria.


EJEMPLO:
A := B + C * D
Esquemas de generación.
¿Que son?
• Los esquemas de generación son las estrategias o acciones que deberán realizarse y tomarse en cuenta en el momento de generar código intermedio.
Declaración de variables y constantes.
Las declaraciones de variables y constantes deben separarse de tal manera que queden las expresiones una por una de manera simple.

Por ejemplo int a,b,c;
se descompone a int a;
int b; intc; respectivamente.
Las variables utilizadas en los programas se clasifican en dos tipos:
variables locales y variables globales.
Variables locales:
Aquella que está declarada para el programa o algoritmo completo.
• Para definir variables locales, la definición debe hacerse inmediatamente después de una llave de inicio ({), y la variable deja de existir fuera de la llave de fin(}) que corresponde a la llave de inicio después del cuál fue definida la variable.
Ejemplo:


Variables globales:
Aquella que está declarada y definida dentro de una función y sólo es válida dentro de la misma función y no podrá utilizarse en otra parte del programa.
• Una variable global se declara fuera de cualquier función y primero que cualquier función que requiera de ella. Una variable se declara de la siguiente forma:
• tipo identificador1, identificador2..ident n;
Ejemplos:
• Algunos ejemplos de cómo definir variables son los siguientes:
• int alumnos, contador;
• float A,B,C;
• char Letra;
Declaracion de Constantes.
Para declarar constantes en el lenguaje C, sólo basta anteponer el calificador const seguido del tipo de dato que manejará esa constante (int,char,etc), y por último el valor que tomará esa variable.
Ejemplo:

Estatuto de asignación.
Las operaciones de asignación deben quedar expresadas por una expresión sencilla, si está es compleja se debe reducir hasta quedar un operador sencillo.
Ejemplo:
Estatuto Condicional.
Las condiciones deben expresarse de manera lo más sencilla posible de tal forma que puedan evaluarse en cortocircuito. Por ejemplo una instrucción como:

Las instrucciones de decisión compleja como switch se reducen a una versión complejas de if’s

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

Entradas populares