Este documento habla sobre los códigos intermedios en los compiladores. Explica que los códigos intermedios sirven como interfaz entre el código fuente y el código de máquina, y permiten que el compilador sea independiente de la máquina destino. Luego describe varias clases de códigos intermedios comunes como la notación posfija, código de tres direcciones y código de dos direcciones. Finalmente, explica cómo se pueden generar estos códigos intermedios usando reglas semánticas asociadas a la gramática durante el análisis
El documento trata sobre la generación de código intermedio en los compiladores. Explica que el código intermedio facilita la optimización, aumenta la portabilidad del compilador y divide el proceso de compilación en fases. Describe diferentes representaciones intermedias como RPN, código P y códigos de tres direcciones, y explica cómo se generan tercetos y tercetos indirectos a partir del análisis semántico.
El documento describe el uso de códigos intermedios en la generación de código de compiladores. Explica que el código intermedio facilita la optimización, la portabilidad entre máquinas y la división del proyecto en fases. Luego discute diferentes representaciones de código intermedio como códigos de tres direcciones, tercetos y tercetos indirectos, y cómo estos se pueden utilizar para representar expresiones y declaraciones.
Este documento presenta:
1) Diferentes funciones de conversión en MATLAB como int2str, num2str, str2double, entre otras. 2) El uso de operadores relacionales y lógicos. 3) Comandos para lectura y escritura interactiva como input, disp. 4) Introducción a la programación en MATLAB mediante funciones y diferentes estructuras de control de flujo.
Este documento describe los principales comandos y conceptos utilizados en Visual Basic, incluyendo variables, tipos de datos, matrices, procedimientos, funciones, estructuras de control y operadores. Explica cómo definir y utilizar variables, funciones y procedimientos, así como bucles y estructuras condicionales para controlar el flujo del programa. También cubre operadores aritméticos, de comparación, lógicos y de concatenación para realizar cálculos y comparaciones.
1) El documento describe un trabajo de investigación sobre funciones y operaciones de pseudocódigo realizado por Elizabeth López para la Escuela Superior Politécnica de Chimborazo.
2) Explica cuatro funciones principales de pseudocódigo: printf(), scanf(), getchar(), y putchar(). printf() y scanf() permiten la entrada y salida de datos, mientras que getchar() y putchar() se enfocan en caracteres individuales.
3) El objetivo general es conocer las diferentes funciones y operaciones del pseudocódigo para resolver ejercicios de manera
Este documento describe las funciones y operaciones del pseudocódigo. Explica las funciones print, scanf, getchar, putchar y getch, y cómo se usan para mostrar, ingresar y manipular datos. También discute las ventajas del pseudocódigo sobre los diagramas de flujo y concluye recomendando experimentar con los programas.
El documento presenta conceptos básicos de programación como programación modular y estructurada. Explica metodologías para resolver problemas mediante la creación de algoritmos, diagramas de flujo y pseudocódigo. Describe elementos clave de un programa como entrada, salida, variables, operadores, expresiones y estructuras de control como selección y repetición.
Presentación de matlab electromagnetismo ...SimonCaceres4
Este documento describe las funciones básicas de MATLAB. MATLAB es un lenguaje de programación diseñado para realizar cálculos numéricos con vectores y matrices. El documento explica los elementos básicos de la interfaz de MATLAB como la ventana de comandos y el espacio de trabajo. También describe funciones matemáticas comunes, sentencias de control de flujo y cómo crear gráficos.
El documento trata sobre la generación de código intermedio en los compiladores. Explica que el código intermedio facilita la optimización, aumenta la portabilidad del compilador y divide el proceso de compilación en fases. Describe diferentes representaciones intermedias como RPN, código P y códigos de tres direcciones, y explica cómo se generan tercetos y tercetos indirectos a partir del análisis semántico.
El documento describe el uso de códigos intermedios en la generación de código de compiladores. Explica que el código intermedio facilita la optimización, la portabilidad entre máquinas y la división del proyecto en fases. Luego discute diferentes representaciones de código intermedio como códigos de tres direcciones, tercetos y tercetos indirectos, y cómo estos se pueden utilizar para representar expresiones y declaraciones.
Este documento presenta:
1) Diferentes funciones de conversión en MATLAB como int2str, num2str, str2double, entre otras. 2) El uso de operadores relacionales y lógicos. 3) Comandos para lectura y escritura interactiva como input, disp. 4) Introducción a la programación en MATLAB mediante funciones y diferentes estructuras de control de flujo.
Este documento describe los principales comandos y conceptos utilizados en Visual Basic, incluyendo variables, tipos de datos, matrices, procedimientos, funciones, estructuras de control y operadores. Explica cómo definir y utilizar variables, funciones y procedimientos, así como bucles y estructuras condicionales para controlar el flujo del programa. También cubre operadores aritméticos, de comparación, lógicos y de concatenación para realizar cálculos y comparaciones.
1) El documento describe un trabajo de investigación sobre funciones y operaciones de pseudocódigo realizado por Elizabeth López para la Escuela Superior Politécnica de Chimborazo.
2) Explica cuatro funciones principales de pseudocódigo: printf(), scanf(), getchar(), y putchar(). printf() y scanf() permiten la entrada y salida de datos, mientras que getchar() y putchar() se enfocan en caracteres individuales.
3) El objetivo general es conocer las diferentes funciones y operaciones del pseudocódigo para resolver ejercicios de manera
Este documento describe las funciones y operaciones del pseudocódigo. Explica las funciones print, scanf, getchar, putchar y getch, y cómo se usan para mostrar, ingresar y manipular datos. También discute las ventajas del pseudocódigo sobre los diagramas de flujo y concluye recomendando experimentar con los programas.
El documento presenta conceptos básicos de programación como programación modular y estructurada. Explica metodologías para resolver problemas mediante la creación de algoritmos, diagramas de flujo y pseudocódigo. Describe elementos clave de un programa como entrada, salida, variables, operadores, expresiones y estructuras de control como selección y repetición.
Presentación de matlab electromagnetismo ...SimonCaceres4
Este documento describe las funciones básicas de MATLAB. MATLAB es un lenguaje de programación diseñado para realizar cálculos numéricos con vectores y matrices. El documento explica los elementos básicos de la interfaz de MATLAB como la ventana de comandos y el espacio de trabajo. También describe funciones matemáticas comunes, sentencias de control de flujo y cómo crear gráficos.
Este documento resume los conceptos básicos del lenguaje de programación Pascal, incluyendo su historia, estructura, tipos de datos, operadores, funciones predefinidas, constantes, variables y bibliografía de referencia. Explica los tipos de datos fundamentales en Pascal como enteros, reales, booleanos y caracteres, así como las operaciones y funciones asociadas a cada tipo. También describe la sintaxis básica de un programa Pascal y las secciones de declaraciones.
Este documento presenta una introducción al lenguaje de programación Pascal, incluyendo su historia, características y estructura. Explica los tipos de datos básicos en Pascal (enteros, reales, booleanos y caracteres), así como operaciones y funciones asociadas. También describe la sintaxis básica de un programa Pascal y conceptos clave como identificadores, declaraciones, constantes y secciones.
El documento describe las fases de un compilador, incluyendo el análisis léxico. El análisis léxico toma el programa fuente como entrada y produce tokens como salida. Identifica tokens mediante el uso de expresiones regulares que definen patrones de lexemas. El análisis léxico también elimina comentarios y espacios en blanco del programa fuente.
Este documento describe los conceptos matemáticos fundamentales para la computación, incluyendo tipos de datos, operadores, expresiones, fórmulas y aplicaciones. Explica que las aplicaciones de cómputo realizan cálculos matemáticos utilizando elementos de lógica matemática y sistemas matemáticos. También describe los principales tipos de datos que puede manejar una computadora, como numéricos, alfanuméricos, lógicos y de fecha, así como los diferentes operadores y conceptos matemáticos involucrados en los cál
Este documento proporciona una introducción a los fundamentos de la programación en Scilab. Explica conceptos básicos como variables, entrada y salida de datos, operadores lógicos y de comparación, estructuras de control condicionales e iterativas, arreglos, funciones y archivos. El documento también incluye ejemplos de código para ilustrar estos conceptos.
Este documento explica conceptos básicos de programación como funciones estándar, entrada y salida de datos, funciones definidas por el usuario, paso de parámetros y punteros. Define funciones como printf() y describe cómo se usan funciones estándar y definidas por el usuario, incluido cómo se pasan parámetros y se devuelven valores. También explica la diferencia entre paso por valor y paso por referencia.
Este documento presenta una introducción a la programación en C++. Explica la estructura básica de un programa en C++, incluyendo comentarios, directivas del preprocesador, espacios de nombres, la función main(), declaración de variables y constantes, enunciados de entrada y salida, y operadores aritméticos.
Este documento presenta información sobre el lenguaje de programación Pascal, incluyendo su historia, características y estructura. Describe los tipos de datos básicos en Pascal como enteros, reales, booleanos y caracteres, así como las operaciones y funciones asociadas. También explica conceptos como variables, constantes, identificadores y la estructura general de un programa en Pascal.
Este documento describe diferentes aspectos de los analizadores sintácticos LR y las tablas de símbolos utilizadas en los compiladores. Explica brevemente el análisis sintáctico LR, incluyendo la generación de un autómata LR(0). También describe los tipos de errores que pueden ocurrir y estrategias para la recuperación de errores sintácticos. Finalmente, detalla los atributos comunes almacenados en una tabla de símbolos y diferentes estructuras de datos que se pueden utilizar para implementarla,
El documento describe un lenguaje de programación simple llamado MUSIM/0 y su correspondiente lenguaje intermedio ENSAMPOCO/0. MUSIM/0 permite tres tipos de sentencias (lectura, asignación y escritura) y un solo tipo de datos (enteros). ENSAMPOCO/0 es un ensamblador que traduce programas de MUSIM/0 a instrucciones para una máquina abstracta de pila.
Este documento resume los fundamentos de programación en Octave, incluyendo características como variables, operadores lógicos, condicionales, bucles, vectores, matrices y funciones. Explica conceptos básicos como entrada y salida de datos, y proporciona ejemplos de código para ilustrar diferentes estructuras de control y datos.
Este documento presenta conceptos matemáticos y de programación básicos como identificadores, tipos de datos, operadores y expresiones. Explica que los identificadores representan datos y pueden ser variables o constantes, y que los tipos de datos incluyen números, lógicos, cadenas y símbolos. También describe operadores aritméticos, relacionales y lógicos, y la notación prefija usada en Scheme.
Este documento presenta conceptos matemáticos básicos necesarios para el desarrollo de programas, incluyendo identificadores, tipos de datos, operadores y expresiones. Explica los diferentes tipos de datos, operadores y su prioridad, y provee ejemplos para ilustrar los conceptos. También incluye un taller con ejercicios relacionados a los temas cubiertos.
Este documento presenta los conceptos básicos de la programación, incluyendo la definición de términos como algoritmo, programa, lenguaje de programación, variables, constantes, tipos de datos, operadores aritméticos, relacionales y lógicos. También describe la metodología para la solución de problemas mediante la programación en computadora, incluyendo las etapas de definición del problema, análisis, diseño del algoritmo, codificación, prueba y documentación.
El documento proporciona una introducción a los conceptos básicos de algoritmos y estructuras de datos. Explica que un algoritmo es una secuencia de pasos para resolver un problema, mientras que un programa es un algoritmo escrito en un lenguaje de programación. También describe los tipos básicos de datos como numéricos, caracteres y lógicos, así como estructuras de datos compuestas como arreglos y registros.
El documento describe las estructuras fundamentales de los algoritmos, incluyendo estructuras secuenciales, de decisión, repetitivas y de casos. Explica la estructura secuencial como la más simple, la cual consta de datos de entrada, proceso y datos de salida. Luego provee ejemplos de algoritmos secuenciales, incluyendo uno para calcular el doble de un número.
El documento presenta los conceptos y metodologías fundamentales de la programación. Explica que la programación se basa en dividir un problema en módulos, diseñar algoritmos y diagramas de flujo, y codificarlos usando un lenguaje de programación. También describe los elementos básicos de un programa como variables, operadores, expresiones, tipos de datos e instrucciones.
La etiqueta <html> define el documento HTML y es la raíz de cualquier página web. Indica al navegador que todo el contenido entre las etiquetas <html> y </html> es parte de un documento HTML.
PRESENTACION TEMA COMPUESTO AROMATICOS YWillyBernab
Acerca de esta unidad
La estructura característica de los compuestos aromáticos lleva a una reactividad única. Abordamos la nomenclatura de los derivados del benceno, la estabilidad de los compuestos aromáticos, la sustitución electrofílica aromática y la sustitución nucleofílica aromática
Este documento resume los conceptos básicos del lenguaje de programación Pascal, incluyendo su historia, estructura, tipos de datos, operadores, funciones predefinidas, constantes, variables y bibliografía de referencia. Explica los tipos de datos fundamentales en Pascal como enteros, reales, booleanos y caracteres, así como las operaciones y funciones asociadas a cada tipo. También describe la sintaxis básica de un programa Pascal y las secciones de declaraciones.
Este documento presenta una introducción al lenguaje de programación Pascal, incluyendo su historia, características y estructura. Explica los tipos de datos básicos en Pascal (enteros, reales, booleanos y caracteres), así como operaciones y funciones asociadas. También describe la sintaxis básica de un programa Pascal y conceptos clave como identificadores, declaraciones, constantes y secciones.
El documento describe las fases de un compilador, incluyendo el análisis léxico. El análisis léxico toma el programa fuente como entrada y produce tokens como salida. Identifica tokens mediante el uso de expresiones regulares que definen patrones de lexemas. El análisis léxico también elimina comentarios y espacios en blanco del programa fuente.
Este documento describe los conceptos matemáticos fundamentales para la computación, incluyendo tipos de datos, operadores, expresiones, fórmulas y aplicaciones. Explica que las aplicaciones de cómputo realizan cálculos matemáticos utilizando elementos de lógica matemática y sistemas matemáticos. También describe los principales tipos de datos que puede manejar una computadora, como numéricos, alfanuméricos, lógicos y de fecha, así como los diferentes operadores y conceptos matemáticos involucrados en los cál
Este documento proporciona una introducción a los fundamentos de la programación en Scilab. Explica conceptos básicos como variables, entrada y salida de datos, operadores lógicos y de comparación, estructuras de control condicionales e iterativas, arreglos, funciones y archivos. El documento también incluye ejemplos de código para ilustrar estos conceptos.
Este documento explica conceptos básicos de programación como funciones estándar, entrada y salida de datos, funciones definidas por el usuario, paso de parámetros y punteros. Define funciones como printf() y describe cómo se usan funciones estándar y definidas por el usuario, incluido cómo se pasan parámetros y se devuelven valores. También explica la diferencia entre paso por valor y paso por referencia.
Este documento presenta una introducción a la programación en C++. Explica la estructura básica de un programa en C++, incluyendo comentarios, directivas del preprocesador, espacios de nombres, la función main(), declaración de variables y constantes, enunciados de entrada y salida, y operadores aritméticos.
Este documento presenta información sobre el lenguaje de programación Pascal, incluyendo su historia, características y estructura. Describe los tipos de datos básicos en Pascal como enteros, reales, booleanos y caracteres, así como las operaciones y funciones asociadas. También explica conceptos como variables, constantes, identificadores y la estructura general de un programa en Pascal.
Este documento describe diferentes aspectos de los analizadores sintácticos LR y las tablas de símbolos utilizadas en los compiladores. Explica brevemente el análisis sintáctico LR, incluyendo la generación de un autómata LR(0). También describe los tipos de errores que pueden ocurrir y estrategias para la recuperación de errores sintácticos. Finalmente, detalla los atributos comunes almacenados en una tabla de símbolos y diferentes estructuras de datos que se pueden utilizar para implementarla,
El documento describe un lenguaje de programación simple llamado MUSIM/0 y su correspondiente lenguaje intermedio ENSAMPOCO/0. MUSIM/0 permite tres tipos de sentencias (lectura, asignación y escritura) y un solo tipo de datos (enteros). ENSAMPOCO/0 es un ensamblador que traduce programas de MUSIM/0 a instrucciones para una máquina abstracta de pila.
Este documento resume los fundamentos de programación en Octave, incluyendo características como variables, operadores lógicos, condicionales, bucles, vectores, matrices y funciones. Explica conceptos básicos como entrada y salida de datos, y proporciona ejemplos de código para ilustrar diferentes estructuras de control y datos.
Este documento presenta conceptos matemáticos y de programación básicos como identificadores, tipos de datos, operadores y expresiones. Explica que los identificadores representan datos y pueden ser variables o constantes, y que los tipos de datos incluyen números, lógicos, cadenas y símbolos. También describe operadores aritméticos, relacionales y lógicos, y la notación prefija usada en Scheme.
Este documento presenta conceptos matemáticos básicos necesarios para el desarrollo de programas, incluyendo identificadores, tipos de datos, operadores y expresiones. Explica los diferentes tipos de datos, operadores y su prioridad, y provee ejemplos para ilustrar los conceptos. También incluye un taller con ejercicios relacionados a los temas cubiertos.
Este documento presenta los conceptos básicos de la programación, incluyendo la definición de términos como algoritmo, programa, lenguaje de programación, variables, constantes, tipos de datos, operadores aritméticos, relacionales y lógicos. También describe la metodología para la solución de problemas mediante la programación en computadora, incluyendo las etapas de definición del problema, análisis, diseño del algoritmo, codificación, prueba y documentación.
El documento proporciona una introducción a los conceptos básicos de algoritmos y estructuras de datos. Explica que un algoritmo es una secuencia de pasos para resolver un problema, mientras que un programa es un algoritmo escrito en un lenguaje de programación. También describe los tipos básicos de datos como numéricos, caracteres y lógicos, así como estructuras de datos compuestas como arreglos y registros.
El documento describe las estructuras fundamentales de los algoritmos, incluyendo estructuras secuenciales, de decisión, repetitivas y de casos. Explica la estructura secuencial como la más simple, la cual consta de datos de entrada, proceso y datos de salida. Luego provee ejemplos de algoritmos secuenciales, incluyendo uno para calcular el doble de un número.
El documento presenta los conceptos y metodologías fundamentales de la programación. Explica que la programación se basa en dividir un problema en módulos, diseñar algoritmos y diagramas de flujo, y codificarlos usando un lenguaje de programación. También describe los elementos básicos de un programa como variables, operadores, expresiones, tipos de datos e instrucciones.
La etiqueta <html> define el documento HTML y es la raíz de cualquier página web. Indica al navegador que todo el contenido entre las etiquetas <html> y </html> es parte de un documento HTML.
PRESENTACION TEMA COMPUESTO AROMATICOS YWillyBernab
Acerca de esta unidad
La estructura característica de los compuestos aromáticos lleva a una reactividad única. Abordamos la nomenclatura de los derivados del benceno, la estabilidad de los compuestos aromáticos, la sustitución electrofílica aromática y la sustitución nucleofílica aromática
2. Definición
Definición
Código Intermedio: estructura de código que
posee una complejidad comprendida entre el
código fuente y el código de máquina.
Los códigos intermedios se consideran como una
interfaz entre el generador de código y las
Teoría Lenguajes
2
interfaz entre el generador de código y las
fases previas del compilador.
Se puede pensar en el código intermedio como el
código de máquina de una computadora hipotética
3. Código Intermedio
Código Intermedio
El uso de un código intermedio tiene como
principal ventaja la de permitir que el compilador
sea independiente de la máquina destino,
haciendolo mas transportable.
Sin embargo el código que podría generarse a
Teoría Lenguajes
3
Sin embargo el código que podría generarse a
partir del código intermedio será menos
eficiente que el código de máquina generado
directamente.
4. Clases de Codigos Intermedios
Clases de Codigos Intermedios
Los códigos intermedios más usados son
Notación Posfija
Código de tres direcciones
Código de dos direcciones
Arbol de sintaxis abstracta: Cada hoja representa
Teoría Lenguajes
4
Arbol de sintaxis abstracta: Cada hoja representa
un operando y los nodos intermedios representan
los operadores.
Notación Prefija: Similar a la notación posfija
5. Clases de Códigos Intermedios
Clases de Códigos Intermedios
Código P: Uno de los códigos más destacados. Se
denomina máquina P a una máquina abstracta que
implementa este código (una computadora
hipotética de pila con cinco registros y una
memoria).
Teoría Lenguajes
5
memoria).
Código ensartado: Establece una relación entre
cada operación y una llamada a rutina. Se genera
una serie de llamadas a las diferentes rutinas.
6. Notación Posfija
Notación Posfija
La notación posfija es una notación muy simple usada
para expresiones aritméticas que coloca el operador
al extremo derecho de la expresión (después de los
operandos y no entre ellos).
Ejemplo: para la expresión A + C * D
Teoría Lenguajes
6
Su correspondiente notación posfija es: ACD*+
La notación posfija se procesa usando una pila:
Se empilan los operandos
Cuando se encuentra un operador se desempilan sus
operandos se opera y se empila el resultado
7. Notación Posfija
Notación Posfija
Suponga que A 2, C sea 4 y D es 3.
La expresión se evalúa:
Empila 2
Empila 4
Empila 3
Teoría Lenguajes
7
Empila 3
* requiere dos operandos que se desempilan (3 y 4), se
multiplican y el resultado se empila
Empila 12
+ requiere dos operandos que se desempilan (12 y 2), se
suman y el resultado se empila
Empila 14
8. Notación Posfija
Notación Posfija
La notación posfija (NPF) de una expresión E es:
Si E es una variable o constante su NPF es E
Si E es una expresión E1 op E2 con op operador binario
cualquiera, la NPF de E es E’1 E’2 op, donde E’1 y E’2 son
las NPF de E1 y E2 respectivamente.
Si E es una expresión (E ), entonces la NPF de E es la
Teoría Lenguajes
8
Si E es una expresión (E1), entonces la NPF de E1 es la
NPF de E.
La notación posfija no necesita paréntesis
Ejemplos:
(10 + 12) * 5 10 12 + 5 *
5 + (15 - 4) 5 15 4-+
9. Código de tres direcciones
Código de tres direcciones
Las proposiciones constan por lo general de tres
direcciones:
res := arg1 op arg2
Donde res, arg1 y arg2 pueden ser constantes (sólo arg1
y arg2) o identificadores declarados por el usuario o
variables de trabajo creadas por el compilador.
Teoría Lenguajes
9
variables de trabajo creadas por el compilador.
Las variables de trabajo se crean cuando se trata
de expresiones con múltiples operadores, que se
dividen en una secuencia de operaciones con un solo
operador cada una.
op arg1 arg2 res
10. Código de tres direcciones
Código de tres direcciones
Para la expresión: A + C * D
Se tiene la siguiente secuencia de instrucciones de
tres códigos:
MUL C D Var1
ADD A Var1 Var2
Teoría Lenguajes
10
ADD A Var1 Var2
STO Var2 Res
Donde MUL, ADD y STO se suponen los códigos de
las operaciones de *, + y :=.
El manejo de las variables de trabajo es importante
11. Código de dos direcciones
Código de dos direcciones
Las variables de trabajo se usan para guardar
temporalmente resultados necesarios para
operaciones siguientes.
La idea es no usar el campo resultado:
Se usan apuntadores a la tabla de símbolos para los
Teoría Lenguajes
11
Se usan apuntadores a la tabla de símbolos para los
operandos
Se usan apuntadores a la instrucción que contiene un
resultado intermedio.
La forma de un código de dos direcciones es:
op arg1 arg2
12. Código de dos direcciones
Código de dos direcciones
Para la expresión: A + C * D
Se tiene la siguiente secuencia de instrucciones de
dos códigos:
(1) MUL C D
(2) ADD A (1)
Teoría Lenguajes
12
(2) ADD A (1)
(3) STO (2) Res
El código de dos direcciones no necesita generar
variables de trabajo
13. Análisis Semántico
Análisis Semántico
El análisis semántico puede ser realizado en
paralelo al análisis sintáctico asociando reglas
semánticas a cada producción.
Estas reglas pueden generar código cada vez que
se ejecutan, por tanto se dice que la estructura
Teoría Lenguajes
13
se ejecutan, por tanto se dice que la estructura
sintáctica dirige la traducción del código lo que
es conocido como Traducción Dirigida por la
Sintaxis (TDS).
14. Regla Semántica
Regla Semántica
Una regla semántica es un fragmento de código
(método) que se ejecuta cuando el analizador
sintáctico reconoce la producción asociada a la
regla.
Ejemplo:
Teoría Lenguajes
14
Ejemplo:
E → E + T // Regla Suma
Suma es la regla asociada a la producción y será
ejecutada al reducir E + T a E (análisis
ascendente) o al derivar E a E + T (análisis
descendente).
15. Ejemplo de Reglas Semánticas
Ejemplo de Reglas Semánticas
Definición de las reglas semánticas de una
gramática generando un código de tres
direcciones.
ApuntE es el apuntador a la tabla de símbolos
para E
Teoría Lenguajes
15
para E
k lleva el control de las variables temporales
generadas para guardar los resultados
intermedios de las operaciones.
varK es una referencia a la variable temporal K
16. Ejemplo de Reglas Semánticas
Ejemplo de Reglas Semánticas
E → T (ApuntE := ApuntT)
E1 → E2 + T ( Inc K
ApuntE1 := VarK
Genera(ADD,ApuntE2,ApuntT,VarK)
E → E - T ( Inc K
Teoría Lenguajes
16
E1 → E2 - T ( Inc K
ApuntE1 := VarK
Genera(SUB,ApuntE2,ApuntT,VarK)
T → F (ApuntT := ApuntF)
17. Ejemplo de Reglas Semánticas
Ejemplo de Reglas Semánticas
T1 → T2 * F ( Inc K
ApuntT1 := VarK
Genera(MUL,ApuntT2,ApuntF,VarK)
T1 → T2 / F ( Inc K
ApuntT := VarK
Teoría Lenguajes
17
ApuntT1 := VarK
Genera(DIV,ApuntT2,ApuntF,VarK)
F → x (ApuntF := Apuntx)
F → y (ApuntF := Apunty)
F →( E ) (ApuntF := ApuntE)
18. Reglas para generar Notación Posfija
Reglas para generar Notación Posfija
Para generar la notación posfija se usan las
operaciones clásicas ADD, SUB, MUL y DIV,
adicionalmente se usa el operador LOD que
permite empilar operandos en la pila.
A seguir se presenta las reglas semánticas
Teoría Lenguajes
18
A seguir se presenta las reglas semánticas
asociadas a la gramática para generar notación
posfija.
19. Reglas para generar Notación Posfija
Reglas para generar Notación Posfija
EXPR → TERM ( T )
EXPR → EXPR + TERM ( E T ADD)
EXPR → EXPR - TERM ( E T SUB)
TERM → FACTOR ( T )
TERM → TERM * FACTOR ( T F MUL)
Teoría Lenguajes
19
TERM → TERM * FACTOR ( T F MUL)
TERM → TERM / FACTOR ( T F DIV)
F → x (LOD x)
F → y (LOD y)
F →( EXPR ) ( E )
20. Generación de Notación Posfija
Generación de Notación Posfija
Para la frase x + y - x * y se realizará la traducción a
notación posfija.
EXPR →
→
→
→ EXPR - TERM ( E T SUB)
EXPR →
→
→
→ EXPR + TERM - TERM ( E T ADD T SUB)
Teoría Lenguajes
20
EXPR →
→
→
→ EXPR + TERM1 - TERM2 ( E T1 ADD T2 SUB)
EXPR →
→
→
→ TERM3 + TERM1 - TERM2 (T3 T1 ADD T2 SUB)
EXPR →
→
→
→ FACTOR + TERM1 - TERM2 ( F T1 ADD T2 SUB)
EXPR →
→
→
→ x + TERM1 - TERM2 ( LOD x T1 ADD T2 SUB)
EXPR →
→
→
→ x + FACTOR - TERM ( LOD x F ADD T SUB)
EXPR →
→
→
→ x + y - TERM ( LOD x LOD y ADD T SUB)
21. Generación de Notación Posfija
Generación de Notación Posfija
EXPR →
→
→
→ x + y - TERM * FACTOR
( LOD x LOD y ADD T F MUL SUB)
EXPR →
→
→
→ x + y - FACTOR1 * FACTOR2
( LOD x LOD y ADD F1 F2 MUL SUB)
EXPR →
→
→
→ x + y - x * FACTOR
Teoría Lenguajes
21
EXPR →
→
→
→ x + y - x1 * FACTOR2
( LOD x LOD y ADD LOD x F2 MUL SUB)
EXPR →
→
→
→ x + y - x1 * y
( LOD x LOD y ADD LOD x F2 MUL SUB)
22. Atributos Sintetizados
Atributos Sintetizados
El siguiente ejemplo muestra una definición dirigida
por la sintaxis para especificar una calculadora de
escritorio.
Producción Reglas Semánticas
L → E n Imprimir (E.val)
Teoría Lenguajes
22
L → E n Imprimir (E.val)
E → E1 + T E.val := E1.val + T.val
E → T E := T.val
T → T1 * F T.val := T1 .val * F.val
T → F T.val := F.val
F → ( E ) F.val := E.val
F → digito F.val := digito.valex
23. Definición con Atributos Sintetizados
Definición con Atributos Sintetizados
Se asocia un atributo sintetizado llamado val a cada
no terminal.
En cada regla se calcula el valor de val para el no
terminal del lado izquierdo a partir de los valores de
los no terminales del lado derecho.
Teoría Lenguajes
23
Se considera que valex es un valor proporcionado por
el léxico como parte del token digito.
La regla asociada al no terminal L simplemente
imprime el valor generado por la expresión E.
El árbol sintáctico con atributos sintetizados para la
expresión 3*5+4n, se muestra a seguir:
25. Generación de Proposiciones
Generación de Proposiciones
En el caso de proposiciones condicionales o
iterativas hay que tener especial cuidado con los
saltos.
Generalmente se tiene que realizar una segunda
pasada para generar la dirección de la
Teoría Lenguajes
25
pasada para generar la dirección de la
instrucción que repite la iteración (direcciones
abiertas)
Para generar código usará
JPC (salto condicional)
JMP (salto incondicional)
26. Ejemplo
Ejemplo
Generar código para el comando
MIENTRAS Condición HACER proposición
E1: Instrucciones para evaluar Condicion
JPC E2
Teoría Lenguajes
26
JPC E2
Instrucciones para proposición
JMP E1
E2: Siguiente instrucción
27. Ejemplo
Ejemplo
Generar código para :
IF Condicion THEN Proposicion
Instrucciones para evaluar Condición
JPC E1
Teoría Lenguajes
27
JPC E1
Instrucciones para ejecutar Proposicion
E1: Siguiente instrucción