Este documento presenta un resumen sobre el análisis semántico en procesadores de lenguaje. Introduce conceptos como gramáticas de atributos, definiciones dirigidas por la sintaxis, evaluación de atributos sintetizados y gramáticas S-atribuidas. El objetivo del análisis semántico es validar la corrección de un programa y mejorar su eficiencia mediante la comprobación de tipos, declaraciones y optimizaciones.
Este documento describe los conceptos fundamentales de los lenguajes de programación y el proceso de compilación. Explica que los compiladores traducen programas de lenguajes de alto nivel a lenguajes de bajo nivel para su ejecución, pasando por fases como el análisis léxico, sintáctico y semántico. También define conceptos como intérpretes, tokens y tablas de símbolos que son parte integral del proceso de traducción de lenguajes.
Este documento contiene preguntas y respuestas sobre conceptos básicos de programación como qué es un programa, lenguaje de programación, programador, problemas, algoritmos y fases para la resolución de problemas. También incluye tablas comparativas sobre tipos de lenguajes de programación como lenguajes de bajo, medio y alto nivel e imperativos, declarativos y orientados a objetos, así como una tabla sobre los tipos de datos en C++.
Este documento presenta un temario sobre programación estructurada. Incluye seis secciones que cubren elementos básicos de programación, estructuras de control, diseño de funciones, arreglos, tipos definidos por el usuario y archivos. También incluye una sección de evaluación y discute lenguajes de programación, fases de resolución de problemas, algoritmos, análisis de problemas y tipos de datos y operadores.
Este documento introduce los conceptos básicos de los lenguajes de programación. Explica que un lenguaje consta de un léxico, una sintaxis y una semántica. Distingue entre lenguajes de bajo y alto nivel, señalando que los lenguajes de bajo nivel son específicos de cada máquina mientras que los de alto nivel son independientes de la máquina. Finalmente, contrasta los procesos de interpretación y compilación para traducir programas de alto nivel a lenguaje de máquina.
Este documento trata sobre conceptos fundamentales de programación lógica y funcional. Explica los estilos de programación, la evaluación de expresiones, la definición de funciones, la disciplina de tipos y los tipos de datos básicos como booleano, entero, flotante y caracter.
Este documento presenta los conceptos fundamentales de la lógica computacional y la resolución de problemas mediante computadoras. Explica que un algoritmo es una serie ordenada de pasos para resolver un problema de manera precisa, definida y finita. Luego, describe las cinco fases para construir un algoritmo y resolver un problema: 1) definición del problema, 2) análisis del problema, 3) diseño de la solución, 4) implementación de la solución, y 5) prueba y depuración. Finalmente, introduce conceptos como instrucciones, oper
El documento contiene preguntas sobre el análisis semántico en compiladores. Se explica que el objetivo principal del análisis semántico es asegurar que el programa cumple las reglas del lenguaje para garantizar su correcta ejecución. También se mencionan ejemplos de comprobaciones realizadas por el análisis semántico como declaraciones de identificadores, comprobaciones de tipos y enlaces. Finalmente, se define el árbol de sintaxis abstracta y cómo este es decorado con información semántica durante el an
Este documento habla sobre los lenguajes de programación. Explica que un lenguaje de programación es un lenguaje formal diseñado para que las computadoras realicen procesos y creen programas. Describe elementos como la sintaxis, semántica, traducción y definiciones de los lenguajes de programación. También cubre temas como lenguajes de alto nivel, elementos sintácticos, palabras reservadas e identificadores.
Este documento describe los conceptos fundamentales de los lenguajes de programación y el proceso de compilación. Explica que los compiladores traducen programas de lenguajes de alto nivel a lenguajes de bajo nivel para su ejecución, pasando por fases como el análisis léxico, sintáctico y semántico. También define conceptos como intérpretes, tokens y tablas de símbolos que son parte integral del proceso de traducción de lenguajes.
Este documento contiene preguntas y respuestas sobre conceptos básicos de programación como qué es un programa, lenguaje de programación, programador, problemas, algoritmos y fases para la resolución de problemas. También incluye tablas comparativas sobre tipos de lenguajes de programación como lenguajes de bajo, medio y alto nivel e imperativos, declarativos y orientados a objetos, así como una tabla sobre los tipos de datos en C++.
Este documento presenta un temario sobre programación estructurada. Incluye seis secciones que cubren elementos básicos de programación, estructuras de control, diseño de funciones, arreglos, tipos definidos por el usuario y archivos. También incluye una sección de evaluación y discute lenguajes de programación, fases de resolución de problemas, algoritmos, análisis de problemas y tipos de datos y operadores.
Este documento introduce los conceptos básicos de los lenguajes de programación. Explica que un lenguaje consta de un léxico, una sintaxis y una semántica. Distingue entre lenguajes de bajo y alto nivel, señalando que los lenguajes de bajo nivel son específicos de cada máquina mientras que los de alto nivel son independientes de la máquina. Finalmente, contrasta los procesos de interpretación y compilación para traducir programas de alto nivel a lenguaje de máquina.
Este documento trata sobre conceptos fundamentales de programación lógica y funcional. Explica los estilos de programación, la evaluación de expresiones, la definición de funciones, la disciplina de tipos y los tipos de datos básicos como booleano, entero, flotante y caracter.
Este documento presenta los conceptos fundamentales de la lógica computacional y la resolución de problemas mediante computadoras. Explica que un algoritmo es una serie ordenada de pasos para resolver un problema de manera precisa, definida y finita. Luego, describe las cinco fases para construir un algoritmo y resolver un problema: 1) definición del problema, 2) análisis del problema, 3) diseño de la solución, 4) implementación de la solución, y 5) prueba y depuración. Finalmente, introduce conceptos como instrucciones, oper
El documento contiene preguntas sobre el análisis semántico en compiladores. Se explica que el objetivo principal del análisis semántico es asegurar que el programa cumple las reglas del lenguaje para garantizar su correcta ejecución. También se mencionan ejemplos de comprobaciones realizadas por el análisis semántico como declaraciones de identificadores, comprobaciones de tipos y enlaces. Finalmente, se define el árbol de sintaxis abstracta y cómo este es decorado con información semántica durante el an
Este documento habla sobre los lenguajes de programación. Explica que un lenguaje de programación es un lenguaje formal diseñado para que las computadoras realicen procesos y creen programas. Describe elementos como la sintaxis, semántica, traducción y definiciones de los lenguajes de programación. También cubre temas como lenguajes de alto nivel, elementos sintácticos, palabras reservadas e identificadores.
Este documento trata sobre teoría de autómatas y compiladores. Explica que los compiladores son programas que traducen un lenguaje fuente a un lenguaje objeto, y describe el proceso de traducción de un compilador incluyendo análisis léxico, sintáctico, semántico y generación de código. También cubre conceptos como tokens, árboles sintácticos, tablas de símbolos y código intermedio.
Este documento presenta un plan de evaluación para un curso de ingeniería de sistemas. El plan consta de 12 semanas divididas en unidades temáticas. Cada unidad incluye los contenidos programáticos a cubrir y el tipo y porcentaje de evaluación correspondiente, que incluyen talleres, evaluaciones escritas y prácticas. Las unidades abarcan temas como algoritmos, programación estructurada, funciones y procedimientos. El plan proporciona una visión general de los objetivos de aprendizaje y métodos de evaluación para el curso.
El pseudocódigo es una descripción informal y de alto nivel de un algoritmo que utiliza las convenciones estructurales de un lenguaje de programación real. Se utiliza para facilitar la comprensión de los algoritmos entre programadores independientemente del lenguaje de programación. El pseudocódigo define variables, tipos de datos, instrucciones y estructuras para representar de forma simple un programa antes de codificarlo en un lenguaje específico.
Unidad I. Introducción a la Programación 3.pptxDiegoAlvizo3
El documento introduce los conceptos básicos de la programación, incluyendo la definición de programación, lenguajes de programación, algoritmos y sus características, elementos clave como entrada, proceso y salida, así como otros componentes fundamentales como variables, constantes, operadores, expresiones y comentarios. Explica los diferentes tipos de algoritmos, lenguajes de programación y programas de computadora.
Este documento contiene preguntas y respuestas sobre análisis semántico. Se explica que el objetivo del análisis semántico es garantizar que el programa cumpla con las reglas del lenguaje para asegurar su ejecución correcta. También se describen diferentes puntos de vista de descripción semántica como semántica operacional y denotacional, y se da un ejemplo de cada una. Además, se explica la conexión entre el análisis semántico y las otras fases del compilador.
El documento describe los diferentes modelos de lenguajes de programación, incluyendo el modelo imperativo, funcional, orientado a objetos, lógico y concurrente. También explica los procesos de compilación, interpretación e híbrido para ejecutar programas escritos en lenguajes de alto nivel, así como las etapas de análisis, síntesis y optimización involucradas en la compilación.
El documento presenta los conceptos básicos de algoritmos y programación, incluyendo sistemas de procesamiento de información, conceptos de algoritmo, lenguajes de programación, tipos de datos, constantes y variables, expresiones, funciones internas y asignación. Explica los componentes de hardware y software de un sistema computacional, y define algoritmos, programas y lenguajes de programación de bajo y alto nivel.
El documento describe los elementos fundamentales de un lenguaje de programación como Visual .NET, incluyendo el editor de código, depurador, diseñador de formularios y clases. Explica el manejo de variables, constantes, tipos de datos y operadores, así como los diferentes tipos de errores que pueden ocurrir.
Este documento introduce conceptos básicos sobre algoritmos y lenguajes de programación. Explica que un algoritmo es una serie de pasos lógicos para resolver un problema específico y que los lenguajes de programación permiten comunicarse con las computadoras a través de instrucciones. También describe los tipos de lenguajes de programación, lenguajes algorítmicos y la metodología para resolver problemas utilizando una computadora.
Este documento presenta una introducción a los lenguajes de programación. Explica conceptos como paradigmas de programación, abstracciones de datos y control, y definición formal de lenguajes. También resume los objetivos y contenidos del curso, incluyendo los paradigmas funcional, lógico e imperativo, así como bibliografía y evaluación.
El documento trata sobre la programación informática. Explica que la programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales usando un lenguaje de programación. También describe los elementos básicos de la programación como variables, condicionales, bucles y funciones.
Las herramientas CASE tienen también algunas desventajas:
- Son caras de implementar y mantener. Requieren una inversión inicial importante.
- No sustituyen la creatividad y experiencia del analista/programador. Sólo asisten en tareas rutinarias.
- Pueden ralentizar el desarrollo si no se usan adecuadamente o no se adaptan bien a la organización.
- Están diseñadas para proyectos grandes y formales. Pueden ser excesivas para proyectos pequeños.
- No siempre están actualizadas con
Este documento presenta preguntas y respuestas sobre análisis semántico. Cubre objetivos del análisis semántico, descripciones formales de semántica como revelar ambigüedades, ser usadas para implementar compiladores y verificar propiedades. También discute puntos de vista semánticos como operacional, denotacional y axiomática, y ejemplos de comprobaciones del analizador semántico como declaraciones, tipos y enlaces.
El documento describe conceptos básicos de programación como el ciclo de vida del desarrollo de software, diseño de algoritmos, lenguajes de programación y estructuras secuenciales. Explica que el ciclo de vida incluye análisis del problema, diseño, codificación, pruebas y documentación. Describe los diagramas de flujo y pseudocódigo para el diseño de algoritmos y explica la evolución histórica, sintaxis y tipos de datos de los lenguajes de programación.
El documento describe el lenguaje de programación Java. Explica que Java es un lenguaje orientado a objetos, concurrente y portable. Luego detalla las características principales de Java como su interpretación dinámica, alto rendimiento y seguridad. También cubre temas como tipos de datos, declaración de variables, estructuras de control como condicionales y repetitivas, y conceptos básicos sobre clases en Java. Finalmente, presenta algunas aplicaciones sencillas utilizando sentencias de control para desarrollar la lógica de programación en Java.
Este documento introduce los lenguajes de programación. Explica que un lenguaje de programación es un conjunto de símbolos e instrucciones que permiten indicarle al computador cómo operar. Clasifica los lenguajes según su nivel de complejidad, tipo de ejecución, aplicaciones y paradigma. También describe propiedades como la sintaxis y semántica, y los paradigmas imperativo, orientado a objetos, funcional y lógico. Finalmente, cubre dominios de aplicación comunes y consideraciones para el estudio de los lenguajes.
Este documento presenta una introducción a los algoritmos y estructuras de datos. Explica conceptos clave como algoritmo, programa, lenguaje de programación, lenguaje de máquina y compilador. También describe los objetivos generales y específicos del curso, así como los contenidos que se abordarán organizados en siete unidades didácticas que incluyen temas como representación de algoritmos, tipos de datos, estructuras de control, estructuras de datos no estándar y archivos.
Este documento describe diferentes paradigmas de lenguajes de programación, incluyendo paradigmas imperativos, declarativos y criterios de lenguajes. Explica paradigmas imperativos como los basados en bloques y objetos, y paradigmas declarativos como la programación lógica y funcional. También cubre criterios como descripciones bien definidas, semántica, comprobabilidad, confiabilidad y eficiencia de código.
El documento describe los conceptos básicos de la programación, incluyendo sus fases (definición del problema, análisis, diseño, codificación, verificación, ejecución y evaluación), lenguajes de programación (de máquina, bajo nivel y alto nivel), algoritmos (partes, expresión y tipos), tipos de datos, variables y constantes.
Este documento presenta un tutorial básico sobre programación en Prolog. Explica los elementos fundamentales del lenguaje como variables, términos, comentarios y operadores. También introduce conceptos clave como la unificación de términos y el mecanismo de backtracking. El tutorial está dividido en secciones que cubren temas como ejecutar predicados, escribir cláusulas, usar el shell de Prolog y desarrollar un primer programa.
Este documento trata sobre teoría de autómatas y compiladores. Explica que los compiladores son programas que traducen un lenguaje fuente a un lenguaje objeto, y describe el proceso de traducción de un compilador incluyendo análisis léxico, sintáctico, semántico y generación de código. También cubre conceptos como tokens, árboles sintácticos, tablas de símbolos y código intermedio.
Este documento presenta un plan de evaluación para un curso de ingeniería de sistemas. El plan consta de 12 semanas divididas en unidades temáticas. Cada unidad incluye los contenidos programáticos a cubrir y el tipo y porcentaje de evaluación correspondiente, que incluyen talleres, evaluaciones escritas y prácticas. Las unidades abarcan temas como algoritmos, programación estructurada, funciones y procedimientos. El plan proporciona una visión general de los objetivos de aprendizaje y métodos de evaluación para el curso.
El pseudocódigo es una descripción informal y de alto nivel de un algoritmo que utiliza las convenciones estructurales de un lenguaje de programación real. Se utiliza para facilitar la comprensión de los algoritmos entre programadores independientemente del lenguaje de programación. El pseudocódigo define variables, tipos de datos, instrucciones y estructuras para representar de forma simple un programa antes de codificarlo en un lenguaje específico.
Unidad I. Introducción a la Programación 3.pptxDiegoAlvizo3
El documento introduce los conceptos básicos de la programación, incluyendo la definición de programación, lenguajes de programación, algoritmos y sus características, elementos clave como entrada, proceso y salida, así como otros componentes fundamentales como variables, constantes, operadores, expresiones y comentarios. Explica los diferentes tipos de algoritmos, lenguajes de programación y programas de computadora.
Este documento contiene preguntas y respuestas sobre análisis semántico. Se explica que el objetivo del análisis semántico es garantizar que el programa cumpla con las reglas del lenguaje para asegurar su ejecución correcta. También se describen diferentes puntos de vista de descripción semántica como semántica operacional y denotacional, y se da un ejemplo de cada una. Además, se explica la conexión entre el análisis semántico y las otras fases del compilador.
El documento describe los diferentes modelos de lenguajes de programación, incluyendo el modelo imperativo, funcional, orientado a objetos, lógico y concurrente. También explica los procesos de compilación, interpretación e híbrido para ejecutar programas escritos en lenguajes de alto nivel, así como las etapas de análisis, síntesis y optimización involucradas en la compilación.
El documento presenta los conceptos básicos de algoritmos y programación, incluyendo sistemas de procesamiento de información, conceptos de algoritmo, lenguajes de programación, tipos de datos, constantes y variables, expresiones, funciones internas y asignación. Explica los componentes de hardware y software de un sistema computacional, y define algoritmos, programas y lenguajes de programación de bajo y alto nivel.
El documento describe los elementos fundamentales de un lenguaje de programación como Visual .NET, incluyendo el editor de código, depurador, diseñador de formularios y clases. Explica el manejo de variables, constantes, tipos de datos y operadores, así como los diferentes tipos de errores que pueden ocurrir.
Este documento introduce conceptos básicos sobre algoritmos y lenguajes de programación. Explica que un algoritmo es una serie de pasos lógicos para resolver un problema específico y que los lenguajes de programación permiten comunicarse con las computadoras a través de instrucciones. También describe los tipos de lenguajes de programación, lenguajes algorítmicos y la metodología para resolver problemas utilizando una computadora.
Este documento presenta una introducción a los lenguajes de programación. Explica conceptos como paradigmas de programación, abstracciones de datos y control, y definición formal de lenguajes. También resume los objetivos y contenidos del curso, incluyendo los paradigmas funcional, lógico e imperativo, así como bibliografía y evaluación.
El documento trata sobre la programación informática. Explica que la programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales usando un lenguaje de programación. También describe los elementos básicos de la programación como variables, condicionales, bucles y funciones.
Las herramientas CASE tienen también algunas desventajas:
- Son caras de implementar y mantener. Requieren una inversión inicial importante.
- No sustituyen la creatividad y experiencia del analista/programador. Sólo asisten en tareas rutinarias.
- Pueden ralentizar el desarrollo si no se usan adecuadamente o no se adaptan bien a la organización.
- Están diseñadas para proyectos grandes y formales. Pueden ser excesivas para proyectos pequeños.
- No siempre están actualizadas con
Este documento presenta preguntas y respuestas sobre análisis semántico. Cubre objetivos del análisis semántico, descripciones formales de semántica como revelar ambigüedades, ser usadas para implementar compiladores y verificar propiedades. También discute puntos de vista semánticos como operacional, denotacional y axiomática, y ejemplos de comprobaciones del analizador semántico como declaraciones, tipos y enlaces.
El documento describe conceptos básicos de programación como el ciclo de vida del desarrollo de software, diseño de algoritmos, lenguajes de programación y estructuras secuenciales. Explica que el ciclo de vida incluye análisis del problema, diseño, codificación, pruebas y documentación. Describe los diagramas de flujo y pseudocódigo para el diseño de algoritmos y explica la evolución histórica, sintaxis y tipos de datos de los lenguajes de programación.
El documento describe el lenguaje de programación Java. Explica que Java es un lenguaje orientado a objetos, concurrente y portable. Luego detalla las características principales de Java como su interpretación dinámica, alto rendimiento y seguridad. También cubre temas como tipos de datos, declaración de variables, estructuras de control como condicionales y repetitivas, y conceptos básicos sobre clases en Java. Finalmente, presenta algunas aplicaciones sencillas utilizando sentencias de control para desarrollar la lógica de programación en Java.
Este documento introduce los lenguajes de programación. Explica que un lenguaje de programación es un conjunto de símbolos e instrucciones que permiten indicarle al computador cómo operar. Clasifica los lenguajes según su nivel de complejidad, tipo de ejecución, aplicaciones y paradigma. También describe propiedades como la sintaxis y semántica, y los paradigmas imperativo, orientado a objetos, funcional y lógico. Finalmente, cubre dominios de aplicación comunes y consideraciones para el estudio de los lenguajes.
Este documento presenta una introducción a los algoritmos y estructuras de datos. Explica conceptos clave como algoritmo, programa, lenguaje de programación, lenguaje de máquina y compilador. También describe los objetivos generales y específicos del curso, así como los contenidos que se abordarán organizados en siete unidades didácticas que incluyen temas como representación de algoritmos, tipos de datos, estructuras de control, estructuras de datos no estándar y archivos.
Este documento describe diferentes paradigmas de lenguajes de programación, incluyendo paradigmas imperativos, declarativos y criterios de lenguajes. Explica paradigmas imperativos como los basados en bloques y objetos, y paradigmas declarativos como la programación lógica y funcional. También cubre criterios como descripciones bien definidas, semántica, comprobabilidad, confiabilidad y eficiencia de código.
El documento describe los conceptos básicos de la programación, incluyendo sus fases (definición del problema, análisis, diseño, codificación, verificación, ejecución y evaluación), lenguajes de programación (de máquina, bajo nivel y alto nivel), algoritmos (partes, expresión y tipos), tipos de datos, variables y constantes.
Este documento presenta un tutorial básico sobre programación en Prolog. Explica los elementos fundamentales del lenguaje como variables, términos, comentarios y operadores. También introduce conceptos clave como la unificación de términos y el mecanismo de backtracking. El tutorial está dividido en secciones que cubren temas como ejecutar predicados, escribir cláusulas, usar el shell de Prolog y desarrollar un primer programa.
En la ciudad de Pasto, estamos revolucionando el acceso a microcréditos y la formalización de microempresarios informales con nuestra aplicación CrediAvanza. Nuestro objetivo es empoderar a los emprendedores locales proporcionándoles una plataforma integral que facilite el acceso a servicios financieros y asesoría profesional.
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Juan Martín Martín
Criterios de corrección y soluciones al examen de Geografía de Selectividad (EvAU) Junio de 2024 en Castilla La Mancha.
Soluciones al examen.
Convocatoria Ordinaria.
Examen resuelto de Geografía
conocer el examen de geografía de julio 2024 en:
https://blogdegeografiadejuan.blogspot.com/2024/06/soluciones-examen-de-selectividad.html
http://blogdegeografiadejuan.blogspot.com/
Business Plan -rAIces - Agro Business Techjohnyamg20
Innovación y transparencia se unen en un nuevo modelo de negocio para transformar la economia popular agraria en una agroindustria. Facilitamos el acceso a recursos crediticios, mejoramos la calidad de los productos y cultivamos un futuro agrícola eficiente y sostenible con tecnología inteligente.
1. Procesadores de lenguaje
Tema 4 – Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Departamento de Ciencias de la Computación
Universidad de Alcalá
2. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Resumen
• Introducción
• Gramáticas de atributos.
– Gramáticas S-atribuidas.
– Gramáticas L-atribuidas.
• Esquemas de traducción dirigidos por sintaxis.
• Grafo de dependencias.
• Evaluación de atributos.
3. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Introducción
• El lenguaje es un vehículo por el cual se transmiten instrucciones a
un procesador para que las ejecute y produzca ciertos resultados.
• Es tarea del compilador extraer el contenido semántico incluido en las
sentencias del programa.
• Ciertos aspectos relativos a la corrección de un programa no se
pueden expresar claramente mediante el lenguaje de programación.
• Es necesario dotar al compilador de rutinas auxiliares para captar
todo lo que no se ha expresado mediante la sintaxis del lenguaje
4. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Introducción
• Semántica: conjunto de reglas que especifican el
significado de cualquier sentencia sintácticamente
correcta y escrita en un determinado lenguaje.
• El análisis semántico, a diferencia de otras fases, no se
realiza claramente diferenciado del resto de las tareas del
compilador.
– Fase en la que se obtiene información necesaria para la compilación
tras conocer la estructura sintáctica del programa.
– Completa las fases de análisis léxico y sintáctico incorporando
comprobaciones que no pueden asimilarse al mero reconocimiento de
una cadena dentro de un lenguaje
5. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Introducción
• Errores semánticos de un programa:
– Conversiones de tipos no permitidas
int x;
x = 4.32;
Error: Ej1.java [6:1] possible loss of precision
– Variables usadas y no definidas
– Operandos de tipos no compatibles
if (x || 5) x = 0;
Error: Ej2.java [7:1] operator || cannot be applied to int,int
6. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Funciones del análisis semántico
• Las principales funciones son:
– Identificar cada tipo de instrucción y sus componentes.
– Completar la Tabla de Símbolos.
– Realizar comprobaciones estáticas:
• Se realizan durante la compilación del programa.
• Ejemplos: comp. de tipos, unicidad de etiquetas e identificadores,
etc.
• Realizar comprobaciones dinámicas:
• Aquellas que el compilador incorpora al programa traducido.
• Hacen referencia a aspectos que sólo pueden ser conocidos en
tiempo de ejecución
• Dependientes del estado de la máquina en la ejecución o del
propio programa.
– Validar las declaraciones de identificadores: en muchos lenguajes no se
puede usar una variable si no ha sido declarada con anterioridad.
7. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Introducción
• El análisis semántico se divide en dos categorías:
– Análisis de la exactitud del programa para garantizar una ejecución
adecuada.
• Algunos lenguajes (Lisp, Smalltallk) pueden no tener análisis
estático.
• Por ejemplo, ADA es un lenguaje con fuertes restricciones para
que un programa sea ejecutable.
– Análisis para mejorar la eficiencia (optimización del programa traducido)
8. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Especificación de la semántica
• No hay una notación estándar para especificar la
semántica estática de un lenguaje
– El análisis semántico varía mucho de unos lenguajes a otros
• Las especificaciones semánticas de un lenguaje pueden
hacerse de manera informal o formal:
– Especificación natural: basada en el lenguaje natural.
• Por ejemplo:
– “Los identificadores deben definirse antes de utilizarse”
– “Los operandos deben ser compatibles entre sí”
– Especificación formal: definición más precisa.
• Lenguajes formales: Z, B, VDM, etc.
• Gramáticas de atributos (Knuth, 1968)
9. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Una gramática de atributos es una gramática libre de contexto cuyos
símbolos pueden tener asociados atributos y las producciones pueden tener
asociadas reglas de evaluación de los atributos.
• En la creación de compiladores se utilizan ecuaciones de atributos o reglas
semánticas como método para expresar la relación entre el cálculo de los
atributos y las reglas del lenguaje.
• Cada producción (regla sintáctica) tiene asociada una acción semántica que
se aplica cuando se realiza una reducción en el análisis sintáctico
ascendente.
10. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Traducción dirigida por la sintaxis:
11. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Dos notaciones para asociar reglas semánticas con producciones:
– Definiciones dirigidas por la sintaxis (DDS) :
• Son especificaciones de alto nivel
• El usuario no necesita especificar el orden de la traducción
– Esquemas de traducción (EDT) :
• Indican el orden en que deben evaluarse las reglas semánticas
• Incluyen detalles de implementación
• Con ambas notaciones se analizan los componentes léxicos, se
construye el árbol sintáctico y finalmente se recorre el árbol para
evaluar las reglas semánticas de sus nodos.
12. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Atributo: propiedad de una construcción de un lenguaje.
– Pueden variar mucho en cuanto a información que contienen o tiempo
que tardan en determinarse durante la traducción/ejecución.
– Cada símbolo (terminal o no terminal) puede tener asociado un número
finito de atributos.
• Ejemplos de atributos:
– Tipo de una variable
– Valor de una expresión
– Ubicación en memoria de una variable
– Código objeto de un procedimiento
– Número de dígitos significativos en un número
13. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Fijación de un atributo: proceso de calcular el valor de un
atributo y asociarlo con una construcción del lenguaje.
• Tipos de Atributo por su fijación:
– Estático: puede fijarse antes de la ejecución del programa
• Ej.: número de dígitos significativos (puede tener un valor mínimo)
– Dinámico: sólo puede fijarse durante la ejecución del programa
• Ej.: valor de una expresión no constante
• Los valores de los atributos deben estar asociados con un
dominio de valores.
14. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Generalmente se denotan mediante un nombre precedido
por un punto y el nombre del símbolo al que están
asociados.
NombreSímbolo.NombreAtributo
• Ejemplo:
numeroÆ numero digito | digito
a) numeroÆ digito
numero.valor = digito.valor
b) numeroÆ numero digito
numero1.valor = numero2.valor * 10 + digito.valor
15. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Otra notación hace referencia a su posición en la regla de
producción:
– Se utiliza el símbolo ‘$’.
– $$ representa el no terminal en la parte izquierda de la producción
– Los símbolos de la parte derecha de la producción se identifican
consecutivamente: $1, $2, $3, ..., $n.
• Ejemplo:
numeroÆ numero digito | digito
a) numero Æ digito
$$.valor = $1.valor
b) numero Æ numero digito
$$.valor = $1.valor * 10 + $2.valor
16. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Ejemplo:
Exp Æ Exp op_arit Exp {
si ($1.tipo == $3.tipo) entonces
$$.tipo = $1.tipo
si no
$$.tipo = ERROR
Escribir(“error tipos incompatibles”)
fin_si
}
18. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Las gramáticas de atributos se escriben en forma
de tabla:
– Las reglas gramaticales, a la izquierda
– Las reglas semánticas asociadas, a la derecha
Ecuaciones de atributo
asociadas
Regla n
…
…
Ecuaciones de atributo
asociadas
Regla 1
Regla semántica
Regla gramatical
19. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas de atributos
• Ejemplo
E.val = T.val
E Æ T
E0.val = E1.val + T.val
E Æ E + T
print(E.val)
L Æ E n
F.val = E.val
F Æ (E)
T.val = F.val
T Æ F
T0.val = T1.val * F.val
T Æ T * F
F.val = digito.valor_lexico
F Æ digito
Regla semántica
Regla
gramatical
20. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Definiciones dirigidas por la sintaxis
• Cada símbolo gramatical tiene asociado un conjunto de atributos.
• El valor de un atributo en un árbol sintáctico se calcula mediante una
regla semántica asociada a la producción utilizada en el nodo.
• Tipos de atributos:
– Sintetizados: Su valor se calcula en función de atributos de nodos hijos
en el árbol de análisis sintáctico.
A Æ aB { A.atributo = a.atributo + B.atributo }
– Heredados: Para un hijo se calculan a través de los atributos del padre
y hermanos en el árbol de análisis sintáctico.
A Æ aB { B.atributo = a.atributo – A.atributo }
21. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Definiciones dirigidas por la sintaxis
• Las reglas semánticas establecen las dependencias entre
los atributos
– Estas dependencias se representan en un grafo.
• Del grafo de dependencias se obtiene el orden de
evaluación de las reglas semánticas.
• Árbol sintáctico con anotaciones: árbol sintáctico que
muestra información en cada nodo sobre los atributos.
22. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Definiciones dirigidas por la sintaxis
• Forma de una definición dirigida por la sintaxis:
– Cada producción AÆα tiene una o más reglas semánticas asociadas
– Cada regla tiene la forma b = f(c1,c2,..,cn)
– b, que depende de c1,c2,...,cn , puede ser:
• Un atributo sintetizado de A.
• Un atributo heredado de uno de los símbolos del lado derecho de
la producción.
– Las funciones f de las reglas se escriben como expresiones.
23. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Definiciones S-atribuidas
• Gramática S-atribuida: todos los atributos asociados con
los símbolos gramaticales son sintetizados.
• Las reglas de evaluación de los atributos sintetizados se
realizan cuando se aplican reducciones en el análisis
sintáctico.
• Las reglas de evaluación de los atributos deben definirse
en función de los atributos asociados con los símbolos
gramaticales “hijos”.
24. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos sintetizados
• Los valores de los atributos S se pueden calcular
fácilmente mediante un recorrido ascendente (post-
orden) del árbol sintáctico:
procedimiento EvaluarSintetizado(A:arbolSintactico){
Para cada hijo H de A hacer
EvaluarSintetizado(H);
Calcular atributos sintetizados de A
}
25. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas S-atribuidas
• Ejemplo de gramática S-Atribuida:
– Calculadora aritmética sencilla. Se desea evaluar expresiones a la
vez que las analizamos. Sea el conjunto de producciones y acciones
siguientes:
L Æ E n { print (E1.val) } (* n = salto línea *)
E Æ E + T { E0.val = E1.val + T3.val }
E Æ T { E0.val = T1.val }
T Æ T * F { T0.val = T1.val * F3.val }
T Æ F { T0.val = F1.val }
F Æ (E) { F0.val = E2.val }
F Æ digito { F0.val = digito }
26. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas S-atribuidas
• Evaluación de la
expresión “3 * 5 + 4”
• Resultado: se imprime
el resultado de calcular
3 * 5 + 4.
L Æ E n
E Æ E + T | T
T Æ T * F | F
F Æ (E) | digito
27. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas L-atribuidas
• Gramática L-atribuida: todos los atributos asociados con los símbolos
gramaticales son sintetizados o heredados pero cumpliendo que su
evaluación dependa de los atributos asociados con los símbolos
precedentes en la derivación:
– Heredan del nodo “padre”
• Ej: AÆXYZ { Y.valor = A.valor }
– Heredan de hermanos a su “izquierda”
• Ej: AÆXYZ { Y.valor = X.valor }
– Heredan de otros atributos del mismo símbolo
• Ej: AÆXYZ { Y.valor = float(Y.int_value)*2 }
28. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas L-atribuidas
• Los atributos heredados permiten expresar la
dependencia de una construcción del lenguaje con
respecto al contexto en que aparece.
• Ejemplos:
• Saber si un identificador está en la parte izquierda (dirección) o
derecha (valor) de una expresión.
• Conocer la posición de un argumento de función f(x,y,z) “¿Qué
posición ocupa dentro de la lista de argumentos el argumento y?”
• Para su evaluación el análisis óptimo es el descendente.
29. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos heredados
• Los valores de los atributos heredados se pueden
calcular mediante un recorrido descendente (pre-orden)
del árbol sintáctico:
procedimiento EvaluarHeredado(A:arbolSintactico){
Para cada hijo H de A hacer{
Calcular atributos heredados de H
EvaluarHeredado(H);
}
}
30. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos heredados
• Ejemplo:
D → T L { L.her = T.tipo; }
T → int { T.tipo = entero; }
T → real { T.tipo = real; }
L → L , id { L1.her = L0.her; añadetipo(id,L0.her); }
L → id { añadetipo(id, L.her); }
31. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Gramáticas L-atribuidas
• Evaluar la expresión:
“real id1,id2,id3”
D → T L
T → int
T → real
L → L , id
L → id
32. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Esquemas de traducción
• Esquema de Traducción: gramática con atributos cuyas acciones
semánticas se expresan entre llaves.
• Notación complementaria donde las acciones se encuentran o bien
intercaladas entre los símbolos de la parte derecha de las
producciones, o bien al final de las mismas.
– Inserción de acciones semánticas al final de cada producción.
S ::= B1 B2 { B1.atr = 1; B2.atr = 2; }
B ::= x { print(B.atr); }
– Acciones semánticas intercaladas
Proced ::= procedure {CrearAmbito();} id Args Decl Sentencias;
33. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Grafo de dependencias
• Grafo de Dependencias: para calcular el valor de un atributo es
necesario calcular en primer lugar los valores de los atributos de los
que depende, estableciendo una dependencia entre atributos.
• Cuando aparecen definidos atributos sintetizados y heredados, es
necesario establecer un orden de evaluación.
• Orden de evaluación:
– Para cualquier acción semántica de la forma:
X.atr = f(Y1.atr, ..., Yn.atr)
– Los valores de los atributos Y1.atr, ..., Yn.atr deben estar
disponibles antes de ejecutarla.
34. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Grafo de dependencias
• El grafo de dependencias es un grafo dirigido acíclico:
– Un nodo para cada atributo
– Un arco b → c si el atributo c depende del atributo b
• Se construye con el siguiente algoritmo:
– Nodos: Para cada nodo n del árbol sintáctico, hacer:
• Para cada atributo a asociado al símbolo gramatical del nodo n, construir
un nodo etiquetado con a en el grafo de dependencias.
– Arcos: Para cada nodo n del árbol sintáctico, hacer:
• Para cada regla semántica b = f (c1, c2, ..., cn) asociada con la producción
del nodo n, trazar arcos desde cada ci hasta b.
– Los atributos sintetizados se representan marcando el nodo así: ●
– El árbol sintáctico se representa en paralelo mediante líneas punteadas.
35. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Grafo de dependencias
E Æ E + E { E0.val = E1.val + E2.val }
36. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Grafo de dependencias
D → T L { L2.her = T1.tipo; }
T → int { T0.tipo = entero; }
T → real { T0.tipo = real; }
L → L , id { L1.her = L0.her; añadetipo(id, L0.her);}
L → id { añadetipo(id, L0.her); }
Entrada:
real id1,id2,id3;
37. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Orden de evaluación
• Clasificación topológica: orden de evaluación de las reglas
semánticas asociadas a cada nodo del árbol de análisis sintáctico.
– Se etiqueta cada nodo con un número
– Los atributos independientes se evalúan antes que los dependientes
– El grafo de dependencias debe ser acíclico
38. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Orden de evaluación
• Una clasificación topológica se utiliza para generar un programa con
el conjunto de reglas de evaluación ordenadas:
a4 = real;
a5 = a4;
añadetipo (id3.entrada,a5);
a7 = a5;
añadetipo (id2.entrada,a7);
a9 = a7;
añadetipo (id1.entrada,a9);
39. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Orden de evaluación
• Al método anterior se le conoce como Método de árbol de análisis
gramatical.
• Inconvenientes:
– La complejidad añadida que la construcción del grafo de dependencias supone para la
compilación (se realiza en tiempo de compilación).
– El método debe determinar si el grafo es acíclico (en tiempo de construcción).
• Alternativa: Método basado en reglas.
– El escritor del compilador analiza la gramática y fija un orden de evaluación de atributos (en
tiempo de construcción del compilador).
– Basado en reglas: analiza las reglas semánticas y depende de ellas.
– Sólo puede hacerse para gramáticas “completamente no circulares”.
– Prácticamente todos los compiladores lo utilizan.
40. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación ascendente
• Los principales métodos de análisis sintáctico procesan la entrada
de izquierda a derecha, lo que implica que los atributos no pueden
tener dependencias “hacia atrás”.
– Este problema se plantea sólo para atributos heredados.
• Los analizadores ascendentes (LR) son más adecuados para
manejar atributos sintetizados.
– Reducen cuando se conoce toda la parte derecha de una producción.
• Es posible implementar traductores ascendentes para atributos
heredados utilizando técnicas avanzadas.
41. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación ascendente
• La estructura de la pila se adecua para que cada símbolo de la
gramática disponga de sus atributos asociados.
• La evaluación de los atributos se realiza justo antes de cada
reducción.
• El analizador LR contiene una pila de valores adicional para
almacenar los valores de los atributos sintetizados.
– Si hay más de un atributo para un símbolo, se almacenan como estructuras.
• El Analizador es similar, pero ahora utiliza producciones compuestas
por símbolos más acciones semánticas:
– Al aplicar una reducción se realizan los cálculos indicados en las acciones
semánticas, utilizando generalmente los elementos de la pila de valores.
– Un desplazamiento consiste en la inserción de valores de token tanto en la pila
de valores como en la pila de análisis sintáctico.
42. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos
• Si una producción maneja un único atributo “val”, la pila contiene
tanto los estados como los valores del atributo para los símbolos que
ya han sido procesados (desplazados o reducidos anteriormente).
• Si un símbolo no tiene atributo “val” la entrada correspondiente en la
tabla está sin definir.
• Acciones sobre la pila de valores:
– Obtener un valor: Pila.pop(valor)
– Descartar un valor: Pila.pop()
– Insertar un valor: Pila.push(valor)
43. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos
• Ejemplo:
44. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos
• Es posible calcular con este método
(LR) atributos heredados de
hermanos previamente calculados.
• Es necesario introducir una
producción Є adicional.
• El valor del atributo se almacena en
una variable auxiliar y se calcula en
función del valor en la cima de la
pila antes del reconocimiento de C.
• En Yacc/CUP:
A : B { aux = 2 * B.atr } C
{ Calcular B.atr; }
B Æ …
{ C.her = 2 * B.atr }
A Æ BC
{/* utilizar C.her */}
C Æ …
Regla semántica
Regla
gramatical
{ aux = Pila.Cima() }
X Æ Є
{ Calcular B.atr; }
B Æ …
{ C.her = 2 * aux }
A Æ BXC
{/* C.her disponible */}
C Æ …
Regla semántica
Regla
gramatical
45. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Evaluación de atributos
• El cálculo de los atributos depende de la estructura de la
gramática.
• Es posible simplificar el cálculo mediante una
modificación de las reglas gramaticales.
• Teorema de Knuth: Dada una gramática con atributos,
todos los atributos heredados se pueden convertir en
sintetizados modificando adecuadamente la gramática,
sin cambiar el lenguaje.
– En la práctica no se utiliza demasiado, pues puede generar gramáticas
y reglas semánticas más complejas que las originales.
46. Procesadores de lenguaje – Tema 4: Análisis semántico
Salvador Sánchez, Daniel Rodríguez
Bibliografía
• Básica:
– Compiladores: principios, técnicas y herramientas. A.V. Aho, R.
Sethi, J.D. Ullman. Addison-Wesley Iberoamerica. 1990.
– Construcción de compiladores. Principios y práctica. Kenneth C.
Louden. Thomson-Paraninfo. 2004.