Tema: Análisis Semántico

Documentos relacionados
Tema: Tabla de Símbolos

Tema: Autómata de Pila

Elementos de un programa en C

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Tema: Herramientas UML, Análisis y diseño UML

Tema: Herramientas UML, Análisis y diseño UML

Procesadores de lenguaje Tema 6 La tabla de símbolos

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Toda copia en PAPEL es un "Documento No Controlado" a excepción del original.

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Procesos de Fabricación I. Guía 1 1 ESTUDIO DEL TRABAJO INDUSTRIAL

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Estructuras de Datos Declaraciones Tipos de Datos

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Unidad II: Análisis semántico

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Tema 4. Operadores y Expresiones

Tema: Punteros a Objetos. Puntero this.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Tema: Configuración de red AD-HOC

Procesos de Fabricación I. Guía 1 SISTEMAS DE CONTROL HIDRÁULICO Y NEUMÁTICO

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

Lenguaje de programación C. Introducción

: Algorítmica y Estructura de Datos I

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

Operadores y Expresiones

Principios de Computadoras II

Programación. Test Autoevaluación Tema 3

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Programación Estructurada

GUÍA BÁSICA DE SCHEME v.4

Expresiones y sentencias

Java para programadores

Lección 2 Introducción al lenguaje C

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Tema 2 Introducción a la Programación en C.

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Construcción de tablas de análisis sintáctico LL(1)

El lenguaje C. 1. Identificadores, constantes y variables

Tema: Materiales y equipos para la manipulación de fibra óptica.

Universidad Católica de Santiago del Estero Facultad de Matemática Aplicada Carrera de Ingeniería en Electrónica

Guía práctica de estudio 05: Diagramas de flujo

PLAN DE MATERIAS ACADEMUSOFT 3.2

Tema: Generación de código intermedio

LENGUAJE. Tema 2 Elementos de un programa

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Universidad Centroccidental Lisandro Alvarado. Decanato de Ciencias y Tecnología Departamento de Sistemas

Programación estructurada (Introducción a lenguaje C)

Curso de Programación Avanzada en C

Tema: INTÉRPRETE ENSAMPOCO/3

Tema: Fuente de Alimentación de Rayos X

2.2 Nombres, Ligado y Ámbito

Computación II. Introducción a Visual Basic

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Tema: Entorno a C# y Estructuras Secuenciales.

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Tema: Arreglos de Objetos en C++.

Procesos de Fabricación I. Guía 1 1 SISTEMAS HIDRÁULICOS Y NEUMÁTICOS.

TÉCNICO SUPERIOR UNIVERSITARIO EN MECATRÓNICA ÁREA AUTOMATIZACIÓN EN COMPETENCIAS PROFESIONALES ASIGNATURA DE LENGUAJE DE PROGRAMACIÓN

Procesos de Fabricación I. Guía 1 1 SISTEMAS DE CONTROL HIDRÁULICO Y NEUMÁTICO

PROGRAMACIÓN UNIDADES

OPERADORES Y EXPRESIONES

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

Java para no Programadores

Programación en java. Estructuras algorítmicas

Electrónica II. Guía 4

Manual de turbo pascal

P L A N I F I C A C I O N

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Tema 3.- Predicados y sentencias condicionales

Tema 7. Generación de código

Tema 2. El lenguaje JAVA

PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR FACULTAD DE INGENIERIA ESCUELA DE INGENIERIA DE SISTEMAS

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Tema: Repaso sobre uso de Funciones, Arreglos y Punteros en C++.

Tema: Excel Formulas, Funciones y Macros

Operadores. Javier Fernández Rivera -

Las Etapas de la Compilación

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA VICERRECTORADO ACADÉMICO COORDINACION DE PRE-GRADO PROYECTO DE CARRERA DE INGENIERIA INDUSTRIAL

SILABO DEL CURSO FUNDAMENTOS DE PROGRAMACIÓN

Planificaciones Algoritmos y Programación I. Docente responsable: AZCURRA DIEGO ANDRES. 1 de 5

ARQUITECTURA DE COMPUTADORAS II. Propósito del curso : Ingeniería Ingeniería en Sistemas. Hardware. Clave de la materia: 413

Tema: Perdidas en Cableado Coaxial

Transcripción:

Compiladores. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Semántico Contenido En esta guía se desarrollará una tabla de símbolos y se asociará al analizador sintáctico de manera que se pueda manejar varios tipos de datos en un compilador, tomando como ejemplo base el compilador del lenguaje MUSIM/3. Objetivos Específicos Conocer las fases del análisis semántico y su relación con la tabla de símbolos y el analizador sintáctico. Enseñar la especificación semántica de un lenguaje de programación. Material y Equipo Guía de Laboratorio Nº 7. Computadora con programa Dev C++. Archivos de recurso o AnalizadorLexico.h o AnalizadorSintacticoEBNF.h Introducción Teórica Semántica La semántica en lingüística es el estudio del significado de una palabra tanto a nivel individual como en el contexto de una frase. Semántica en los lenguajes de programación es el conjunto de reglas que especifican el significado de cualquier sentencia, sintácticamente correcta y escrita en un determinado lenguaje. Por ejemplo en el lenguaje Pascal la sentencia: suma := 27 / lado es sintácticamente correcta, ya que a la izquierda del símbolo de asignación hay un identificador, y a

2 Compiladores. Guía 7 la derecha una expresión. Pero para que sea semánticamente correcta hay que comprobar: lado debe ser compatible con el operador "/" y con el operando 27. suma debe ser un tipo compatible con el resultado de la operación. Análisis Semántico El analizador semántico detecta la validez semántica de las sentencias aceptadas por el analizador sintáctico. El analizador semántico suele trabajar simultáneamente al analizador sintáctico y en estrecha cooperación. Se entiende por semántica como el conjunto de reglas que especifican el significado de cualquier sentencia sintácticamente correcta y escrita en un determinado lenguaje. Las rutinas semánticas deben realizar la evaluación de los atributos de las gramáticas siguiendo las reglas semánticas asociadas a cada producción de la gramática. Por ejemplo para una expresión como: ( A + B ) * ( C + D ) El analizador semántico debe determinar que acciones pueden realizar los operadores aritméticos (+,*) sobre las variables A,B,C y D. Así cuando el analizador sintáctico reconoce un operador, tal como " + " o " * ", llama a una rutina semántica que especifica la acción que puede llevar a cabo. Esta rutina puede comprobar que los dos operandos han sido declarados, y que tienen el mismo tipo. También puede comprobar si a los operandos se les ha asignado previamente algún valor. Procedimiento Semántica de MUSIM/3 La definición léxica y sintáctica de MUSIM/3 no es suficiente es necesario especificar su semántica. La semántica de este lenguaje está basada en las operaciones con sus tipos de datos. Dada la especificación léxica y sintáctica de un lenguaje la especificación semántica se puede orientar por diferentes

Compiladores. Guía 7 3 caminos, aquí se ha elegido uno de ellos, una especificación semántica de comprobación estricta de tipos. Las promociones de tipo son muy restringidas en este caso se permite promocionar de entero a real. Los descensos de tipo están totalmente prohibidos, así por ejemplo está prohibido asignar directamente un real a un entero. La especificación semántica se puede resumir en: Sistema de tipos: Se permiten tres tipos de datos: CHAR (carácter), INTEGER (entero) y FLOAT (real). Por defecto todos los operadores aritméticos siguen las leyes de composición interna, es decir las operaciones que tienen operandos del mismo tipo de datos, devuelven como resultado dicho tipos de datos, un caso especial es el operador potenciación: <expresión>1.tipo OPERADOR <expresión>2.tipo-> <expresión>3.tipo La sentencia de asignación sigue la misma ley de composición interna, es decir el tipo de la variable de la parte izquierda debe ser igual al tipo de la expresión de la parte derecha. <variable>.tipo = <expresión>.tipo Conversiones de tipo por promoción: Tan solo se permite la promoción de tipo entero (INTEGER) a tipo real (FLOAT), es decir: <expresión>1.i OPERADOR <expresión>2.f <expresión>3.f <expresión>1.f OPERADOR <expresión>2.i <expresión>3.f También se permite sólo la promoción de entero (I) a real (F) en la sentencia de asignación: <variable>.f = <expresión>.i Conversiones de tipo por descenso: MUSIM/3 las prohíbe totalmente. Por ejemplo no se permite pasar directamente de real a entero. A continuación se muestra un método de la clase Semántico que realiza comprobaciones de tipo de operadores aritméticos y del operador de asignación. Los tipos de datos que comprueba son entero (I), real (F) y carácter (C), devuelve el tipo del resultado, esto corresponde a la semántica de MUSIM/3 descrita anteriormente.

4 Compiladores. Guía 7 char Semantico::operar(char tipo1, char tipo2, char operador) { cout<<"\t\tsemantico: "<<tipo1<<" "<<operador<<" "<<tipo2<<endl; if (tipo1 == 'I' && tipo2 == 'I') if (operador == '/') else return 'I'; if (tipo1 == 'C' && tipo2 == 'C') return 'C'; if (tipo1 == 'F' && tipo2 == 'F') if (operador == '%') return 'I'; else if ( (tipo1 == 'C' && tipo2!= 'C') (tipo2 == 'C' && tipo1!= 'C')) { cout<<"error semántico: Tipos incompatibles: "<<tipo1<<" "<<tipo2<<" "<<operador; if (tipo1 == 'I' && tipo2 == 'F') { switch (operador) { case '=': cout<<"error semántico: Tipos incompatibles: "<<tipo1<<" "<<tipo2<<" "<<operador; case '^': default: if (tipo1 == 'F' && tipo2 == 'I') { cout<<"error semántico: Tipos incompatibles: "<<tipo1<<" "<<tipo2<<" "<<operador; Un ejemplo de un programa con MUSIM/3 es: M{ I a; I b; F c; F d;

Compiladores. Guía 7 5 R a; R b; c=a+b; d=a-b; W c; W d;. Donde M=Main I=Integer F=Float C=Char R=Read W=Write Y los identificadores están formados de una sola letra. Tomando en cuenta, las consideraciones anteriores acerca del lenguaje MUSIM/3, implemente la clase Semántico asociada al lenguaje MUSIM/3, considerando el método presentado anteriormente para la comprobación estricta de tipos. Análisis de resultados Integre el analizador semántico con el analizador sintáctico del proyecto desarrollado en la guía 6 para el leguaje MUSIM/3. Utilice la definición sintáctica presentada en esa guía y tome en cuenta la definición semántica mostrada en el procedimiento. Investigación complementaria Investigue acerca de los bloques básicos de código, su relación con el código intermedio y el algoritmo de identificación de los bloques básicos de código dentro de una secuencia de instrucciones en lenguaje máquina. Bibliografía Construcción de Compiladores. Principios y practica, Kenneth C. Louden. Compiladores. Principios técnicas y Herramientas. Sethi Ullman. Pearson Education.

6 Compiladores. Guía 7 Guía 7: Análisis Semántico Hoja de cotejo: 7 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 Nota CONOCIMIENTO Del 20 al 30% Conocimie nto deficient e de los fundament os teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas. TOTAL 100%