Lenguajes y autómatas 2
Integrantes
Avilés Zapata Gloria Dayan
Bravo Hernandez Luis Javier
Bernabe Mendoza Cinthia Guadalupe Horario:09-10
Brito Rayon Roberto Carlos
Cipriano García Daniel
Profesor
Honorio Candelario Emigdio
Unidad22
Unidad
Generación de código
intermedio
2.1 Notaciones
Notaciones: forma especial en la que se puede expresar una
expresión matemática, se puede decir que existen tres
formas principales: infija, prefija y posfija.
2.1 Notaciones
Operador/símbolo
Operando
Notación prefija: +AB
Notación infija: A+B
Notación posfija: AB+
2.1.1 prefija
La notación de prefijo fue
propuesta en 1924 por el
matemático, lógico y
filósofo polaco Jan
Łukasiewicz (1878-1956)
2.1.1 prefija
Nos indica que el operador va antes de los operando sus
características principales son:
• "Los operando conservan el mismo orden que la notación infija
equivalente.
• No requiere de paréntesis para indicar el orden de precedencia
de operadores ya que el es una operación
• Se evalúa de izquierda a derecha hasta que encontremos el
primer operador seguido inmediatamente de un par de operando
• Se evalúa la expresión binaria y el resultado se cambia como un
nuevo operando Se repite este hasta que nos quede un solo
resultado Notación prefija: El orden es operador, primer
operando, segundo.
2.1.1 prefija
Ejemplo resolución de las operaciones prefijas
Ejemplo notación prefija
(5+8) (9-3) *2
(8+6 – 6*4/2 )
Se pasa de izquierda a derecha R=2
Notación prefija: +AB
2*) 3-9 () 8+5 ( Notación infija: A+B
Notación posfija: AB+
2.1.1 prefija
Ejemplo notación prefija
(8+6 – 6*4/2 )
R=2
2.1.2 Infija
La expresión o notación infija es la forma más común que utilizamos
para escribir expresiones matemáticas, estas notaciones se refieren
a que el operador esta entre los operadores.
No existe una estructura simple para representar este tipo de
notación en la computadora, por esta razón se utilizan otras
notaciones.
Infija
(A+B), A – 1, E/F, A*C, A + B + C
2.2.3 Postfija
La notación postfija pone el operador al final de los dos operandos,
siendo el orden es primer operando, segundo operando, operador.
La notación postfija utiliza una estructura del tipo LIFO (Last In
First Out) que indica que el ultimo en entrar, es el primero en
salir.
Postfija
AB+5-
2.2 Representaciones
de código intermedio
Existen diversos tipos de códigos
intermedios que varían en cuanto a
su sencillez, otros tipos de
código intermedio que representan
los programas como árboles o
grafos y representaciones mixtas.
Estas notaciones simplifican la
traducción de nuestro código
fuente a nuestro código objeto, ya
que ahorran y acotan símbolos de
la tabla de símbolos.
2.2.1 Notación Polaca
La notación polaca, también conocida como
Infija Polaca notación de prefijo o notación prefija,
es una forma de notación para la lógica,
2*(3+5) *2+3 5 la aritmética, el álgebra y la
computación.
Su característica distintiva es que
coloca los operadores a la izquierda de
sus operandos.
2.2.2 Código P
• La notación postfija pone el operador al final de los dos
operandos, siendo el orden es primer operando, segundo operando,
operador.
• La notación postfija utiliza una estructura del tipo LIFO (Last In
First Out) que indica que el primero en entrar, es el primero en
salir.
• Como el código P fue diseñado para ser directamente ejecutable,
contiene una descripción implícita de un ambiente de ejecución
particular que incluye tamaños de datos, además de mucha
información específica para la maquina P, que debe conocer si se
desea que un programa de código P se comprensible.
2.2.3 Triplos
La principal diferencia entre
estas notaciones y la notación
• En la historia de los
postfija es que ellos incluyen
compiladores han sido
referencias explicitas para los
utilizadas una amplia variedad
resultados de los cálculos
de representaciones intermedias
intermedios, mientras que la
como lo es la siguiente clase
notación posfija los resultados
de representación de código
son implícitos al representarlos
intermedio de un árbol de 3
en una pila.
direcciones,2 para los
• La diferencia entre triples y
operandos y una para la
cuádruplos es que con los
ubicación del resultado. esta
triples es referenciado el
clase incluye un amplio número
valor intermedio hacia el
de representaciones diferentes
número del triple que lo creo,
entre las cuales encontramos
pero en los cuádruplos requiere
cuádruplos y triples.
que ellos tengan nombres
implícitos.
2.2.4 Cuádruplos
• Es una estructura tipo registro con cuatros campos que
se llaman: op, arg1, arg2 y resultado. OP tiene un
código intermedio.
Constituida por 4 elementos: un código de operación, dos operando
de entrada y otro de salida para almacenar el resultado.
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.
2.3.1 Variables y
constantes.
Variable Constante
Las variables y las constantes nos
permiten darle un nombre a un
valor y utilizar el nombre en
cualquier parte del programa donde
podríamos utilizar el valor.
Una constante es un dato numérico
o alfanumérico que no cambia
durante la ejecución del programa.
Muestra de la declaración de
una constante
Muestra de la
declaración de
una variable
Ejemplo de variable en código
void main() {
// Declaramos una variable para
Ruedas con un valor de guardar la altura
$150.00 mxn double altura = 2.5;
// Declaramos una variable para
guardar el número de ruedas
int ruedas = 4;
// Calculo el área de un rectángulo
de base 3 metros y altura 2.5 metros
println(altura * 3.0);
// Calculo lo que cuesta cambiar las
cuatro ruedas si una vale 150?
println(ruedas * 150); }
Ejemplo en código de constante
void main() {
// Declaramos una constante
final double GRAVEDAD = 9.8;
// Variable con la altura en metros a
la que está situado el objeto
double altura = 10;
// Cálculo del tiempo que tarda en
caer
Graveda double tiempo =
d sqrt(2.0*altura/GRAVEDAD);
println(tiempo); }
2.3.2 Expresiones.
En esta función recibe una cadena
que representa una línea de código
intermedio y toma las medidas
oportunas para que ese código se
utilice. Estas medidas pueden ser
escribir la línea en un fichero
adecuado, almacenar la instrucción
en una lista que después se pasará Operadores básicos
a otros módulos, o cualquier otra
que necesitemos en nuestro
compilador.
2.3.3 Instrucción 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.
Elementos de asignación Ejemplos:
edad% = 5
area! = 12.3
nombre$ = “Pedro”
Instrucciones de
asignación compuesta
Las instrucciones de asignación compuesta
realizan primero una operación en una
expresión antes de asignarla a un elemento
de programación.
Una instrucción de asignación asigna el
valor de una expresión a una variable. En
general, si la variable que se va a asignar
es una propiedad, la propiedad debe ser de
lectura y escritura o de sólo escritura; en
caso contrario, se produce un error de
compilación. Si la variable es una variable
de sólo lectura, la asignación debe
producirse en un constructor Shared o un
constructor de instancia apropiado para el
tipo de la variable; en caso contrario, se
producirá un error de compilación
2.3.4 Instrucciones de control
Ejemplo de estructuras de control de flujo:
El término “estructuras de control”, viene
del campo de la ciencia computacional.
Cuando se representan implementaciones de
Java para las estructuras de control.
REFIRIENDOSE A ELLAS CON LA TERMINOLOGIA DE
LA ESPECIFICACIÓN DEL LENGUAJE DE JAVA, COMO
INSTRUCCIONES.
Con las estructuras de control se puede:
De acuerdo a la condición, ejecutar un grupo
u otro de sentencias(If – Then – Else y
Select – Cast).
Ejecutar un grupo de sentencias mientras
exista una condición(Do-while).
Ejecutar un grupo de sentencias hasta que
exista una condición (Do – until).
Ejecutar un grupo de sentencias un número
determinado de veces (For – Next).
Tipos de estructuras de control:
Ejecución secuencial.
Transferencia de control.
Estructura de control.
If - simple.
If – Then – else.
Select - case.
Do – while Do – until
For – next
2.3.5 Funciones
En programación una función es un grupo de instrucciones con un objetivo
en particular y que se ejecuta al ser llamada desde otra función o
procedimiento. Una función puede llamarse así misma(función recurrente).
Estas pueden recibir:
Datos desde afuera al ser llamadas a través de los parámetros y deben
entregar un resultado.
Se diferencian de los procedimientos por que estos no devuelven
resultados.
Deben tener un nombre único en el ámbito para poder ser llamadas.
Deben tener un tipo de dato de resultado.
Deben de tener una lista de parámetros de entrada y su código.
Partes de una función
Prototipo de la función
Tipo de valor.
Identificador.
Parámetro.
Definición de la función
Encabezado de la función.
Cuerpo de la función.
Llamada a la función.
Representación de una función
2.3.6 Estructuras
Las estructuras de control se emplean para controlar la ejecución y flujo del
código, las cuales se dividen en:
Estructuras de selección:
Son aquellas que se utilizan para realizar operaciones basadas en el valor de
una expresión.
Estructuras de iteración:
Son aquellas que nos permiten ejecutar un bloque de código repetitivamente
mientras una condición específica sea verdadera.
Estructura If:
Al escribir uno o varios flujos de acción en el código contenido en estos se
ejecutara siempre y cuando la evaluación de la expresión de la sentencia if se
evalué como verdadera.
Estructuras switch:
La estructura de selección switch tiene
una expresión de control y los flujos de
código alternos son ejecutados
dependiendo del valor constante asociado Estructuras de selección:
con esta expresión. Los tipos de datos
permitidos para la expresión de control
son byte, sbyte, short, ushort, uint,
long, ulong, char, string o un tipo
enumeración.
Estructuras de iteración: La estructura for se Por ejemplo:
utiliza cuando se conoce previamente cuantas veces ha For
de repetirse un bloque de código. Este bloque se (inicializador;
repetirá mientras la condición evalue una expresión condición;
booleana verdadera, no será posible evaluar otro tipo iterador)
de expresión. {Acciones; }
Estructura while: Se utiliza cuando no se conoce
previamente cuantas veces ha de repetirse un bloque
de código, por lo que puede ejecutarse 0 o más veces.
Este bloque se repetirá ientras la condición evalue
una expresión booleana verdadera.
Bibliografias
• Gamez, D. M. (2022, 6 marzo). 2.1.2 Infija. Recuperado 16 de septiembre de
2022, de [Link]
• Gamez, D. M. (2022b, marzo 7). 2.1.3 PostFija. Recuperado 16 de septiembre de
2022, de [Link]
[Link]
• 2.2 Representaciones de código intermedio. (s. f.). Recuperado 16 de
septiembre de 2022, de [Link]
[Link]
• Velasco, G. (2019, 30 septiembre). 2.2.1 Notación Polaca. Blogger. Recuperado
16 de septiembre de 2022, de
[Link]
[Link]
•
Bibliografias
• Figueroa, A. B. L. (2022, 16 septiembre). 2.3.2 Expresiones. Recuperado 16 de
septiembre de 2022, de
[Link]
[Link]
• Anonimo, G. (2022, 16 septiembre). 2.3.1 Variables y constantes. Recuperado
16 de septiembre de 2022, de
[Link]
[Link]
• El lenguaje de programacioj. (s. f.). Descubre la programacion. Recuperado 16
de septiembre de 2022, de [Link]
[Link]#:~:text=Las%20variables%20y%20las%20constantes,ser%C3%A1n%20los
%20valores%20que%20guardar%C3%A1n
•