Unidad 2

2.1 Notaciones

2.1.1 Prefija

La notación prefija, también conocida como notación de prefijo o notación prefija, esuna forma de notación para la lógica, la aritmética, y el álgebra. Su característicadistintiva es que coloca los operadores a la izquierda de sus operandos.

Si la aridad(es el número deargumentosnecesarios para que dicho operador o función se puedacalcular.) de los operadores es fija, el resultado es una sintaxis que carece deparéntesis u otros signos de agrupación, y todavía puede ser analizada sinambigüedad.

prefija

2.1.2 Infija

La notación de infijo es la notación común de fórmulas aritméticas y lógicas, en la cualse escriben los operadores entre los operandos en que están actuando (ej. 2 + 2) usando un estilo de infijo.


2.1.3 Postfija

La notación postfija pone el operador al final de los dos operandos, por lo que laexpresión queda: ab+5-La notación postfija utiliza una estructura del tipo LIFO (Last First Out) pila, la cual esla más utilizada para la implementación. Llamada también polaca inversa, se usa pararepresentar expresiones sin necesidad de paréntesis. La notación postfija pone el operador al final de los dos operando.

pos

Video ilustrativo


2.2 Representaciones de código intermedio


2.2.1 Notacion polaca


2.2.2 Código P

  • El código P hace referencia a máquinas que utilizan o se auxilian de pilas para generar código objeto.
  • En muchos caso la P se asociado a código portable el cual garantiza que el código compilado en una máquina se pueda ejecutar en otras.
  • Para garantizar la portabilidad del código se necesita que el lenguaje este estandarizado por algún instituto y que dicho código no tenga extensiones particulares.
pilas

2.2.3 Triplos

  • La notación de tres direcciones es una forma abstracta de código intermedio.
  • Esta notación se puede implementar como registros con campos para el operador y operadores.
  • Cuando se utilizan triples se ocupan punteros a la misma estructura de los triples.
  • Se debe tener en cuenta el proceso de asignación, de declaración, expresiones booleanas.
  • Las expresiones lógicas también pueden pasarse a código de tres direcciones, utilizando para ello expresiones en corto circuito.


2.2.4 Cuadruplos

  • Es una estructura tipo registro con cuatros campos que se llaman: op, arg1, arg2 y resultado. OP tiene un código intermedio.
  • Se representan X4 valores (Campos)
  • Estructura = record, union, etc.
  • Los operadores unarios como x:=-y no utilizan arg2. Generalmente arg1, arg2 y resultado son valores de tipo puntero y apuntan a una entrada en la tabla de símbolos.

2.3 Esquema de generación


2.3.1 Variables y constantes

  • Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Por ejemplo pi=3.1416
  • Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente un dato durante la ejecución de un proceso, su contenido puede cambiar durante la ejecución del programa. Por ejemplo: area=pi*radio^2
  • 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

2.3.2 Expresiones

  • Para generar expresiones estas deben representarse de manera más simple y más literal para que su conversión sea más rápida.

  • Por ejemplo la traducción de operaciones aritméticas debe especificarse una por una, de tal forma que una expresión sea lo más mínimo posible.

2.3.3 Instrucciones de asignación

La sintaxis general de la instrucción de asignación es:

  • nombre_de_la_variable = valor

El valor a la derecha del signo igual puede ser una constante, otra variable o una expresión que combine constantes y variables, pero siempre la variable y su valor deben ser del mismo tipo de dato. Por ejemplo:

  • edad% = 5
  • area! = 12.3
  • nombre$ = “Pedro”

2.3.4 Instrucciones de control

  • En los lenguajes de programación hay estructuras y operadores que permiten controlar el flujo de la ejecución, estos pueden ser ciclos, saltos, condiciones entre otros

  • Las instrucciones condicionales nos van a permitir representar éste tipo de comportamiento. Sentencias IF y SWITCH. En otros casos, nos encontraremos con la necesidad de repetir una instrucción o instrucciones un número determinado de veces. En éstos casos utilizaremos instrucciones de control iterativas o repetitivas (ciclos). Sentencias WHILE, DO-WHILE y FOR.

  • Las expresiones booleanas se componen de los operadores boleanos (and, or y not) aplicados a los elementos que son variables booleanas o expresiones relacionales.

Video demostrativo de estructuras de control en C++

2.3.5 Funciones

  • Las funciones pueden reducir a en línea, lo que se hace es expander el código original de la función.

  • Las funciones se descomponen simplificando los parámetros de manera individual al igual que el valor de retorno.

2.1.6 Estructuras

  • Las estructuras de datos se emplean con el objetivo principal de organizar los datos contenidos dentro de la memoria del ordenador.

  • La idea de ver la memoria como un serie de bytes es buena, sin embargo no es suficiente ya que en la misma podemos guardar números, cadenas de caracteres, funciones, objetos, etc. de tal manera que surge la necesidad de establecer los mecanismos adecuados para dar cuenta de la forma, tamaño y objetivo de los datos almacenados.

  • La estructura mínima de información manipulable en un sistema de computación es el BIT el cual se agrupa normalmente en bloques de 8 para formar un BYTE. Cabe mencionar que los BITS no son direccionables directamente, sino a través de compuertas AND, OR, NOT, XOR, las cuales en C y C++ se escriben como &, |, ~ y ^, conocidos como "Bitwise operators" u "Operadores de manipulación de bits".