Tema 5. Análisis semántico
|
|
|
- Cristina Castilla Valverde
- hace 9 años
- Vistas:
Transcripción
1 Departamento de Tecnologías de la Información Tema 5 Análisis semántico Ciencias de la Computación e Inteligencia Artificial
2 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 2
3 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 3
4 5.1 Características del análisis semántico Objetivos: Verificar la semántica de la cadena de entrada: Verificar que las variables han sido declaradas previamente Comprobación de tipos en las expresiones Comprobación de los parámetros de una función Elección de la función u operador en caso de sobrecarga o polimorfismo Emitir informes de errores semánticos Construir el Árbol de Sintaxis Abstracta 4
5 5.1 Características del análisis semántico Principio de la traducción dirigida por la sintaxis: El significado (semántica) de una frase está directamente relacionado con su estructura sintáctica Especificación semántica Se inserta en la especificación sintáctica Se amplían las gramáticas libres de contexto: Se asocia información a los símbolos (atributos) Se asocian acciones semánticas (código) a las producciones 5
6 5.1 Características del análisis semántico Árbol de Sintaxis Abstracta Recoge toda la información sintáctica y semántica Elimina los símbolos que no aportan significado Los nodos reflejan los datos asociados a cada símbolo El objetivo de las acciones semánticas es construir este árbol 6
7 5.1 Características del análisis semántico Ejemplo: a = b + c ; <Asignación> asignación id = <Expresión> ; <Expresión> + <Término> variable nombre: a tipo: entero suma tipo: entero <Término> <Factor> id <Factor> id variable nombre: b tipo: entero constante nombre: c tipo: entero valor: 5 7
8 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 8
9 5.2 Gramáticas atribuidas Atributos: Elementos de los símbolos del lenguaje que almacenan información semántica: Tipo de datos Referencia a las variables Etc. Acciones semánticas Expresiones que permiten calcular el valor de los atributos 9
10 5.2 Gramáticas atribuidas Tipos de atributos: Atributos sintetizados: Aquellos cuyo valor se calcula a partir de la información de los nodos hijos. Representan un flujo de información ascendente en el árbol. Ej.: <A> <B> <C> <D> { A.a = B.b + C.c + D.d } Atributos heredados: Aquellos cuyo valor se calcula a partir de la información del nodo padre o de los hermanos. Representan un flujo de información descendente. Ej.: <A> <B> <C> <D> { C.c = A.a + B.b } 10
11 5.2 Gramáticas atribuidas Los atributos sintetizados de un símbolo representan una información que se calcula después de reconocer sintácticamente ese símbolo. Los atributos heredados de un símbolo representan una información que es necesario conocer antes de reconocer sintácticamente el símbolo. Generalmente se considera que los atributos de los tokens (símbolos terminales) son siempre sintetizados. Estos atributos son los generados por el analizador léxico. 11
12 5.2 Gramáticas atribuidas Ejemplo (declaración de variables en C): Atributos Estructura D.s, L.s, Lp.s class L ista{ int tipo; String nombre; Lista sig; } T.s, L.h, Lp.h int Producción Regla semántica asociada <D> <T> <L> pyc { L.h = T.s; D.s = L.s } <T> float { T.s = REAL } <T> int { T.s = ENTERO } <L> id <Lp> {Lp.h = L.h; L.s.tipo = L.h; L.s.nombre = id.lexema; L.s.sig = Lp.s} <Lp> coma id <Lp 1 > { Lp 1.h = Lp.h; Lp.s.tipo = Lp.h; <Lp> l { Lp.s = null } Lp.s.nombre = id.lexema; Lp.s.sig = Lp 1.s } 12
13 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 13
14 5.3 Especificación de un traductor Gramáticas con atributos por la izquierda Son un subconjunto de las gramáticas con atributos. Los atributos heredados se calculan exclusivamente a partir de los símbolos a la izquierda del atributo. Cualquier información heredada está disponible en el momento de ejecutar la reglas de producción correspondiente. Los flujos de información en el árbol de sintaxis abstracta se producen de izquierda a derecha, de arriba hacia abajo o de abajo hacia arriba. Nunca de derecha a izquierda. Permiten definir traductores de una sola pasada. 14
15 5.3 Especificación de un traductor Esquemas de traducción dirigidos por la sintaxis (ETDS) Son un formalismo para construir traductores de una sola pasada Emplean gramáticas con atributos por la izquierda. Incluyen acciones semánticas encerradas entre llaves ( {... } ) en cualquier punto de las reglas de producción. Las acciones semánticas incluyen fragmentos de código en un lenguaje de programación. Las acciones semánticas pueden incluir instrucciones que no se refieran al cálculo de atributos. 15
16 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 16
17 5.4 Traductores descendentes Desarrollo de un ETDS basado en análisis descendente Los atributos sintetizados de cada símbolo S se almacenan en la estructura de datos (objeto) que devuelve la función asociada al símbolo S. Los atributos heredados de cada símbolo S se describen como parámetros de la función asociada al símbolo S. Las acciones semánticas incluidas en las reglas de producción de un símbolo S se añaden directamente al código de la función asociada al símbolo S. 17
18 5.4 Traductores descendentes Ejemplo de un ETDS basado en análisis descendente Reglas de producción <D> <T> <L> pyc <T> float <T> int <L> id <Lp> <Lp> coma id <Lp 1 > <Lp> l Atributos clase L { int tipo; String id; L siguiente; } T.s (int) (sintetizado), L.h (int) (heredado), Lp.h (int heredado) D.s (L) (sintetizado), L.s (L) (sintetizado), Lp.s (L) (sintetizado) 18
19 5.4 Traductores descendentes Ejemplo de un ETDS basado en análisis descendente Gramática atribuida <D> <T> { L.h = T.s } <L> pyc { D.s = L.s } <T> float { T.s = REAL } <T> int { T.s = ENTERO } <L> { L.s = new L(); } id { L..s.id = id; L.s.tipo = L.h; Lp.h = L.h } <Lp> { L..s.siguiente = Lp.s } <Lp> { Lp.s = new L(); } coma id { Lp.s.id = id; Lp.s.tipo = Lp.h; Lp 1.h = Lp.h } <Lp 1 > { Lp.s.siguiente = Lp 1.s } <Lp> l { Lp.s = null } 19
20 5.4 Traductores descendentes Ejemplo de un ETDS basado en análisis descendente Función asociada a <D> L parsed() { L D_s; switch(nexttoken.getkind()){ case FLOAT: case INT: int T_s = parset(); // las funciones devuelven objetos L L_s = parsel( T_s ); // los atributos heredados match(pyc); // se pasan como argumentos D_s = L_s; break; default: error(); } return D_s; } 20
21 5.4 Traductores descendentes Función asociada a <T> int parset() { int T_s; switch(nexttoken.getkind()) { case FLOAT: match(float); T_s = REAL; break; case INT: match(int); T_s = ENTERO; break; default: error(); } return T_s; } 21
22 5.4 Traductores descendentes Función asociada a <L> L parsel(int L_h) { L L_s; switch(nexttoken.getkind()) { case ID: L_s = new L(); Token tk = match(id); // El analizador léxico devuelve objetos L_s.tipo = L_h; L_s.id = tk.lexema; L Lp_s = parselp(l_h); L_s.siguiente = Lp_s; break; default: error(); } return L_s; } 22
23 5.4 Traductores descendentes Función asociada a <Lp> L parselp(int Lp_h) { L Lp_s; switch(nexttoken.getkind()) { case COMA: Lp_s = new L(); match(coma); Token tk = match(id); Lp_s.tipo = Lp_h; Lp_s.id = tk.lexema; L Lp1_s = parselp(lp_h); Lp_s.siguiente = Lp1_s; break; case PYC: Lp_s = null; break; default: error(); } return Lp_s; } 23
24 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 24
25 5.5 Traductores ascendentes Desarrollo de un ETDS basado en análisis ascendente A cada estado de la tabla se le puede asociar un símbolo (terminal o no terminal) que corresponde al símbolo que provoca la transición a ese estado. Los atributos sintetizados de cada símbolo S se almacenan en una estructura de datos (objeto). Se utiliza una pila de atributos, paralela a la pila de estados, para almacenar estas estructuras. Las acciones semánticas situadas al final de una regla se ejecutan al reducir la regla. 25
26 5.5 Traductores ascendentes Desarrollo de un ETDS basado en análisis ascendente Las acciones semánticas situadas en puntos intermedios se sustituyen por símbolos ficticios (marcadores) a los que se asocia una regla de producción l seguida de la acción semántica. Conocida la longitud de una regla, se puede saber la posición de cada estructura de datos tomando como base la cima de la pila. Los atributos heredados de un símbolo no se pueden tratar directamente, sino que se introducen como atributos sintetizados del símbolo anterior. 26
27 5.5 Traductores ascendentes Ejemplo de un ETDS basado en análisis ascendente Reglas de producción <E> <E> mas <T> <E> <T> <T> num <T> parab <E> parce Ejemplo 7 + ( ( ) ) 27
28 5.5 Traductores ascendentes Ejemplo de un ETDS basado en análisis ascendente Autómata Reconocedor de Prefijos Viables S0 <X> <E> <E> <E> mas <T> <E> <T> <T> num <T> parab <E> parce parab parab S4 <T> parab <E> parce <E> <E> mas <T> <E> <T> <T> num <T> parab <E> parce <E> <T> num num <T> <E> S1 <X> <E> <E> <E> mas <T> S2 <E> <T> S3 <T> num S2 mas S6 <T> parab <E> parce <E> <E> mas <T> mas S5 parce S5 <E> <E> mas <T> <T> num <T> parab <E> parce S7 <E> <E> mas <T> S8 <T> <T> parab <E> parce num parab S3 S4 28
29 5.5 Traductores ascendentes Ejemplo de un ETDS basado en análisis ascendente Tabla de análisis SLR Símbolo Estado mas num parab parce $ <E> <T> - 0 d3 d4 1 2 <E> 1 d5 aceptar <T> 2 r2 r2 r2 num 3 r3 r3 r3 parab 4 d3 d4 6 2 mas 5 d3 d4 7 <E> 6 d5 d8 <T> 7 r1 r1 r1 parce 8 r4 r4 r4 29
30 5.5 Traductores ascendentes Ejemplo de un ETDS basado en análisis ascendente Traza de la cadena 7+5 Pila de atributos - - num - <T> - <E> - <E> mas - <E> mas num - <E> mas <T> - <E> Pila de estados Entrada Acción num mas num $ d3 mas num $ r3 mas num $ r2 mas num $ d5 num $ d3 $ r3 $ r1 $ aceptar 30
31 5.5 Traductores ascendentes Ejemplo de un ETDS basado en análisis ascendente Gramática atribuida <E> <E> mas <T> { $$.op = SUMA; $$.izquierda = $1; SS.derecha = $3; } <E> <T> { $$.op = TERMINO; $$.izquierda = $1; $$.derecha = NULL; } Notación (utilizada en YACC) $$ es la estructura de datos de la parte izquierda de la regla. $1.. $N es la estructura de datos del símbolo 1.. N de la parte derecha. Para una regla de N símbolos, la estructura $M se encuentra en la posición N-M desde la cima de la pila. No admite atributos heredados. 31
32 5.5 Traductores ascendentes Ejemplo de un ETDS basado en análisis ascendente Notación Las acciones semánticas situadas al final de una regla se ejecutan al reducir esa regla Las acciones semánticas intermedias se sustituyen por nuevas reglas (marcadores). Por ejemplo: <E> <E> { $$.izq = $1; } mas { $$.op = SUMA; } <T> { $$.dcha = $3; } se transforma en: <E> <E> <M1> mas <M2> <T> { $$.dcha = $3; } <M1> l { $$.izq = $1; } <M1> l { $$.op = SUMA; } 32
33 Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas 5.3 Especificación de un traductor 5.4 Traductores descendentes 5.5 Traductores ascendentes 5.6 Estructuras básicas 33
34 5.6 Estructuras básicas Generación de una estructura de lista id next id next id next Gramática LL(1) BNF <Lista> id <SigueLista> <SigueLista> coma id <SigueLista> <SigueLista> l Gramática LL(1) EBNF <Lista> id ( coma id )* Gramática LR(1) <Lista> id <Lista> <Lista> coma id 34
35 5.6 Estructuras básicas Generación de una estructura de lista Gramática LL(1) BNF <Lista> id <SigueLista> { e = new Element(), e.id = id, e.next = SigueLista.s, Lista.s = e } <SigueLista> coma id <SigueLista 1 > { e = new Element(), e.id = id, e.next = SigueLista 1.s, SigueLista.s = e } <SigueLista> l { SigueLista.s = null } Gramática LL(1) EBNF <Lista> id { e = new Element(), e.id = id, e.next = null, Lista.s = e, last = e } ( coma id { e = new Element(), e.id = id, e.next = null, last.next = e, last = last.next } )* 35
36 5.6 Estructuras básicas Generación de una estructura de lista Gramática LR(1) <Lista> id { e = new Element(), e.id = id, e.next = null, Lista.s = e, Lista.last = e } <Lista> <Lista 1 > coma id { e = new Element(), e.id = id, e.next = null, Lista.s = Lista 1.s, Lista 1.last.next = e, Lista.last = e } Gramática LR(1) <Lista> id { e = new Element(), e.id = id, e.next = null, Lista.s = e } <Lista> id coma <Lista 1 > { e = new Element(), e.id = id, e.next = Lista 1.s, Lista.s = e } 36
37 5.6 Estructuras básicas Generación de una estructura de árbol binario suma suma num Gramática LL(1) BNF <Árbol> num <SigueÁrbol> <SigueÁrbol> más num < SigueÁrbol > < SigueÁrbol > l Gramática LL(1) EBNF <Árbol> num ( más num )* Gramática LR(1) <Árbol> num < Árbol > < Árbol 1 > más num num num 37
38 5.6 Estructuras básicas Generación de una estructura de árbol binario Gramática LL(1) BNF <Árbol> num { SigueÁrbol.h = num } <SigueÁrbol> {Árbol.s = SigueÁrbol.s } <SigueÁrbol> más num { SigueÁrbol 1.h = new Suma(SigueÁrbol.h,num) } <SigueÁrbol 1 > { SigueÁrbol.s = SigueÁrbol 1.s } <SigueÁrbol> l { SigueÁrbol.s = SigueÁrbol.h } Gramática LL(1) EBNF <Árbol> num { Árbol.s = num } ( más num { Árbol.s = new Suma(Árbol.s,num) } )* 38
39 5.6 Estructuras básicas Generación de una estructura de árbol binario Gramática LR(1) <Árbol> num { Árbol.s = num } <Árbol> <Árbol 1 > más num { Árbol.s = new Suma(Árbol 1.s, num) } 39
40 5.6 Estructuras básicas Generación de una estructura de vector class Vector { public Vector(); public add(element e); } Gramática LL(1) BNF <Lista> num <SigueLista> { v = new Vector(), v.add(num), SigueLista.h = v, Lista.s = v } <SigueLista> más num { SigueLista.h.add(num), SigueLista 1.h = SigueLista.h } <SigueLista 1 > <SigueLista> l { } Gramática LL(1) EBNF <Lista> { v = new Vector() } num { v.add(num) } ( más num { v.add(num) } )* { Lista.s = v } 40
41 5.6 Estructuras básicas Generación de una estructura de vector class Vector { public Vector(); public add(element e); } Gramática LR(1) <Lista> num { v = new Vector(), v.add(num), Lista.s = v } <Lista> <Lista 1 > más num { Lista.s = Lista 1.s, Lista.s.add(num) } 41
Tema 4: Análisis sintáctico ascendente. Análisis sintáctico ascendente: un ejemplo
Tema 4: Análisis sintáctico ascendente Procesamiento de enguajes Dept. de enguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de enguajes Tema 4: Análisis sintáctico ascendente 1 / 21
PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07
PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 1. En qué método de análisis sintáctico puede suceder que en la construcción del árbol de derivación de las posibles expansiones de un símbolo no terminal
Tema 3. Análisis sintáctico descendente
Departamento de Tecnologías de la Información Tema 3 Análisis sintáctico Ciencias de la Computación e Inteligencia Artificial Índice 3.1 Características del análisis sintáctico 3.2 Gramáticas libres de
Conceptos básicos sobre gramáticas
Procesamiento de Lenguajes (PL) Curso 2014/2015 Conceptos básicos sobre gramáticas Gramáticas y lenguajes Gramáticas Dado un alfabeto Σ, un lenguaje es un conjunto (finito o infinito) de cadenas de símbolos
16 Análisis sintáctico I
2 Contenido Recordando la estructura de un compilador Recordando el análisis léxico l análisis sintáctico Comparación con el análisis léxico l Rol del Parser Lenguajes de programación Gramáticas structura
UNIDAD V. Analisis Semantico. 5.1 Introduccion. Analizador Semántico. Verifica que el significado de las construcciones del lenguaje tengan sentido.
UNIDAD V Analisis Semantico 5.1 Introduccion Analizador Semántico. Ejemplo: Verifica que el significado de las construcciones del lenguaje tengan sentido. Tareas del analizador semántico: 1) Comprobación
PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4
PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 En esta práctica trabajaremos con ANTLR a nivel semántico utilizando gramáticas con atributos. ANTLR permite implementar con facilidad los dos modelos
Tema: Análisis Sintáctico
Compiladores. Guía 3 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Sintáctico Contenido En esta guía se abordarán los conceptos pertenecientes al componente de análisis
Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas
Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico
Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones
Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice
Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1
Facultad de Ingeniería de Sistemas Lenguajes y Compiladores Análisis Sintáctico Parte I 1 Introducción El analizador sintáctico recibe una secuencia de tokens y decide si la secuencia está correcta o no.
Generación de Código Intermedio
Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede
Elementos de un programa en C
Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución
LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison
LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el
Programación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Unidad I: Análisis semántico
Unidad I: Análisis semántico 1.1 Arboles de expresiones Los árboles de expresiones representan el código de nivel del lenguaje en forma de datos. Los datos se almacenan en una estructura con forma de árbol.
Capítulo 5: Traducción Dirigida por Sintaxis
Capítulo 5: Traducción Dirigida por Sintaxis Javier Carvajal Universidad de Costa Rica, Escuela de Ciencias de la Computación e Informática, San José, Costa Rica, [email protected] and
ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.
ANÁLISIS SEMÁNTICO El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones
Tema 7. Generación de código
Departamento de Tecnologías de la Información Tema 7 Generación de código Ciencias de la Computación e Inteligencia Artificial Índice 7.1 Visión general 7.2 Código de tres direcciones 2 Índice 7.1 Visión
Algoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE CIENCIAS PROGRAMA DE LABORATORIO CÓDIGO: 777 CRÉDITOS: 4 NOMBRE CURSO: ESCUELA: PRE-REQUISITO: Organización de Lenguajes y Compiladores
Procesadores de lenguaje Tema 4 Análisis semántico
Procesadores de lenguaje Tema 4 Análisis semántico Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Introducción Gramáticas de atributos. Gramáticas S-atribuidas. Gramáticas L-atribuidas.
GRAMATICAS LIBRES DEL CONTEXTO
GRMTICS LIBRES DEL CONTEXTO Estas gramáticas, conocidas también como gramáticas de tipo 2 o gramáticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto.
Tema: Autómatas de Estado Finitos
Compiladores. Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Autómatas de Estado Finitos Contenido En esta guía se aborda la aplicación de los autómatas en el campo de
Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta
Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...
Las Etapas de la Compilación
Las de la Compilación El en la Compilación Universidad de Cantabria Outline 1 El Problema 2 Las y el Qué pasos son necesarios dar para hallar la estructura de un programa? En qué pasos podemos dividirlos
CUP. Diseño de compiladores. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP 20/04/2014
CUP Diseño de compiladores CUP Cup es un generador de analizadores sintácticos LALR Recibe de entrada un archivo con la estructura de la gramática y su salida es un parser escrito en Java Manual oficial:
LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.
LEX Estructura de un programa en LEX { definiciones { reglas { subrutinas del usuario Las definiciones y subrutinas son opcionales. El segundo es opcional pero el primer indica el comienzo de las reglas.
Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55
Contenido Capítulo 1. Teoría de conjuntos. 1 1.1 Conjuntos.... 3 1.1.1 Definiciones básicas.... 3 1.1.2 Operaciones sobre conjuntos.... 6 1.1.3 Diagrama de Venn.... 7 1.1.4 Álgebra de conjuntos.... 7 1.2
Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación
COMPILADORES Unidad I: Introducción al proceso de compilación Flor Prof. Flor Narciso GIDyC-Departamento de Computación LABSIULA-Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de
1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos
1.1 Tipos de Datos Primitivos 1.2 Tipos de datos estructurados 1.2.1 Arreglos unidimensionales, bidimensionales y cadenas de caracteres 1.2.2 Registros o Estructuras (unión y estructura) 1.3 Definición
Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas
2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos
Tema 5 Tabla de Símbolos
Traductores, Compiladores e Intérpretes 1 Tema 5 También se la llama tabla de nombres o tabla de identificadores y tiene dos funciones principales: - Efectuar chequeos semánticos. - Generación de código.
Unidad II: Análisis semántico
Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico
Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I
Tema 4: Gramáticas independientes del contexto Teoría de autómatas y lenguajes formales I Bibliografía Hopcroft, J. E., Motwani, R., y Ullman, J. D. Introducción a la Teoría de Autómatas, Lenguajes y Computación.
Procesadores de Lenguaje
Procesadores de Lenguaje Repaso TALF Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 La Jerarquía de Chomsky Cuatro niveles de lenguajes formales
COMPILADORES E INTERPRETES
COMPILADORES E INTERPRETES Análisis semántico: Estudia el significado de la sentencia Procesadores de lenguaje: Convierte un programa fuente hecho en un lenguaje fuente a un programa objeto hecho en un
El lenguaje C. 1. Identificadores, constantes y variables
Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria
ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.
ÁRBOLES DE SINTAXIS ÁRBOL grafo dirigido acíclico. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales. Los nodos terminales (nodos hojas) están rotulados por los
Tema: Tabla de Símbolos
Compiladores. Guía 6 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Tabla de Símbolos Contenido En esta guía se desarrollará una tabla de símbolos y se asociará al analizador
COMPILADORES Teoría e implementación. Jacinto Ruiz Catalán
COMPILADORES Teoría e implementación Jacinto Ruiz Catalán COMPILADORES. Teoría e implementación Jacinto Ruiz Catalán ISBN: 978-84-937008-9-8 EAN: 9788493700898 Copyright 2010 RC Libros RC Libros es un
JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.
1 Compiladores / Guía VII / Ciclo 02-2016 Centro de Investigación y Transferencia de Tecnología JavaCC Parte I Contenido Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores En la presente
4. Operadores Operador asignación
Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre
SSL Guia de Ejercicios
1 SSL Guia de Ejercicios INTRODUCCIÓN A LENGUAJES FORMALES 1. Dado el alfabeto = {a, b, c}, escriba las palabras del lenguaje L = {x / x }. 2. Cuál es la cardinalidad del lenguaje L = {, a, aa, aaa}? 3.
Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez
PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Elementos de lenguaje: Identificadores Tipos de datos 2 Tipos de datos primitivos 3 Tipos de datos referenciados Clases Interfaces Arrays
Procesadores de Lenguaje
Procesadores de Lenguaje Analizadores sintácticos descendentes: LL(1) Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 Analizadores sintácticos
Operadores y Expresiones
Operadores y Expresiones Los programas Java constan de datos, sentencias de programas y expresiones. Una expresión es normalmente, una ecuación matemática, tal como 3 * x + 5 * z. En esta expresión, los
Tema 4. Operadores y Expresiones
Tema 4 Operadores y Expresiones Contenidos 1. Conceptos Básicos. 2. Operadores Aritméticos. 3. Operadores de Relación, de Igualdad y Lógicos. 4. Operadores de Incremento y Decremento. 5. Operadores y Expresiones
Construcción de tablas de análisis sintáctico LL(1)
Construcción de tablas de análisis sintáctico LL(1) Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática Diego Centeno Gerardo Cortés Juan Diego Alfaro Resumen. A la medida en
Introducción a ANTLR. Procesadores de Lenguaje. 1 de 25
Introducción a ANTLR Procesadores de Lenguaje 1 de 25 Introducción a ANTLR Qué es ANTLR? ANother Tool for Language Recognition Herramienta para construir traductores entre lenguajes informáticos Genera
Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales
Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Profesor Federico Peinado Elaboración del material José Luis Sia Federico Peinado Facultad de Informática Universidad Complutense
Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales
UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript Algoritmo
Tema 6 Organización y gestión de la memoria
Departamento de Tecnologías de la Información Tema 6 Organización y gestión de la memoria Ciencias de la Computación e Inteligencia Artificial Índice 6.1 Organización de la memoria en tiempo de ejecución
TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS
TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:
Procesadores de lenguaje Tema 6 La tabla de símbolos
Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de
Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas
Gramáticas Introducción Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas En algunos lenguajes, una sucesión de símbolos depende del
TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO
1 TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO OBJETIVO Dar respuesta a las siguientes preguntas: Qué es el análisis léxico-sintáctico de un lenguaje? Cómo se diseña y construye un analizador léxico-sintáctico?
Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.
Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Sintaxis Define la estructura del lenguaje Ejemplo: Jerarquía en
CONJUNTOS REGULARES. Orlando Arboleda Molina. 19 de Octubre de Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle
CONJUNTOS REGULARES Orlando Arboleda Molina Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle 19 de Octubre de 2008 Contenido Expresiones regulares Teorema de Kleene Autómatas
Elementos léxicos del lenguaje de programación Java
Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores
Hoja técnica sobre yacc 1 y lex 2. Introducción. lex PL, 2014/2015 1
PL, 2014/2015 1 Introducción Hoja técnica sobre yacc 1 y lex 2 Los programas yacc y lex son herramientas de gran utilidad para un diseñador de compiladores. Muchos compiladores se han construido utilizando
Construcciones del Lenguaje Java
Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.
Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo
Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten
Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros
Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros
Tema 2. El lenguaje JAVA
Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias
Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002
Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Ejercicios Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto
Unidad IV Análisis Sintáctico. M.C. Juan Carlos Olivares Rojas
Unidad IV Análisis Sintáctico M.C. Juan Carlos Olivares Rojas Agenda 4.1 Introducción a las Gramáticas libres de contexto y árboles de derivación. 4.2 Diagramas de sintaxis. 4.3 Precedencia de operadores.
Clase 14: Gramáticas libres de contexto
M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom [email protected] 1 Contenido Gramáticas libres de contexto Propiedades de los lenguajes libres de contexto
Guía práctica de estudio 05: Diagramas de flujo
Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de
Fundamentos de Programación 2017-I
Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis
Toda copia en PAPEL es un "Documento No Controlado" a excepción del original.
S U P E RIO R DE MISANTLA Apartado: 7.1 Copia No. Código:PD-SCD-1016 Versión No.: 02 Hoja : 2 de 12 4.- COMPETENCIAS A DESARROLLAR 4.1 Competencias Específicas: Diseña mediante el uso de reglas semánticas
Tema 3. Tipos de datos simples
Tema 3. Tipos de datos simples Contenido del tema: Concepto de tipo. Tipos simples. Operadores. Expresiones. Semántica. Tipos y expresiones en lenguaje C++ Francisco J. Veredas Dpto. Lenguajes y Ciencias
Compiladores: Parsing ascendente
Compiladores: Parsing ascendente Francisco J Ballesteros LSUB, URJC Page 1 of 64 Parsing ascendente Normalmente utilizaremos parsers descendentes para problemas pequeños cuando podemos escribir uno predictivo
Fundamentos de programación
Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador
El proceso del Análisis Léxico
El proceso del Análisis Léxico El proceso de análisis léxico se refiere al trabajo que realiza el scanner con relación al proceso de compilación. El scanner representa una interfaz entre el programa fuente
CONCEPTOS BASICOS DEL LENGUAJE JAVA
CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten
INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA
APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto
Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final
Trabajo Final 1 Objetivo Comprender (en gran parte) un programa desarrollado en: C++ (Core ) Generador de código / Ejecución de comandos Flex (Lex) Lexer Genera un Analizador Léxico en C http://en.wikipedia.org/wiki/lex_(software)
AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO
Autómatas de pila y lenguajes independientes del contexto -1- AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO AUTÓMATAS DE PILA - Son autómatas finitos con una memoria en forma de pila. - Símbolos
TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013
TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Ingeniería Técnica en Informática de Sistemas Segundo curso Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba
Programación: Estructuras de Control
Programación: 2 Estructuras de Control Contenido 2.1.- Introducción 2.2.- Estructuras de Selección 2.2.1.- Sentencia if 2.2.2.- Sentencia switch 2.3.- Estructuras de Iteración 2.3.1.- Sentencia while 2.3.2.-
S Qué es el analizador sintáctico?
Traductores, Compiladores e Intérpretes 1 Tema 3. Análisis Sintáctico. Todo lenguaje de programación tiene reglas que describen la estructura sintáctica de programas bien formados. En Pascal, por ejemplo,
Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas
Unidad I Introducción a la programación de Sistemas M.C. Juan Carlos Olivares Rojas Agenda 1.1 Qué es y que estudia la programación de sistemas? 1.2 Herramientas desarrolladas con la teoría de programación
Operaciones básicas con hojas de cálculo
Operaciones básicas con hojas de cálculo Insertar hojas de cálculo. Para insertar rápidamente una hoja de cálculo nueva al final de las hojas de cálculo existentes, haga clic en la ficha Insertar hoja
Estructuras en LabVIEW.
Estructuras en LabVIEW. Sumario: 1. Ejecución según el flujo de datos. 2. Estructuras básicas disponibles en LabVIEW. a) Estructura Sequence. b) Estructura Case. c) Estructura For Loop. d) Estructura While
TEMA 3.- El analizador sintáctico
PROCESADORES DEL LENGUAJE EL ANALIZADOR SINTÁCTICO - Diap. 1 TEMA 3.- El analizador sintáctico 1. Introducción. 2. Errores sintácticos. 3. Gramáticas independientes del contexto y autómatas con pila. 4.
Procesadores de lenguaje Tema Análisis sintáctico (Parte I)
Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte I) Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Introducción Conceptos básicos Tipos de analizadores Gramáticas independientes
Programación en Lenguaje C
Lenguaje de programación C Programación en Lenguaje C Introducción El Lenguaje de programación C fue implantado por primera vez en los años 70 por Dennis Ritchie para una computadora DEC PDP-11 corriendo
TEMA 5: Subprogramas, programación modular
TEMA 5: Subprogramas, programación modular 5.1.-Definición de módulo. Programación modular La programación modular está basada en la técnica de diseño descendente, que como ya vimos consiste en dividir
Estatutos de Control C# Estatutos de Decisión (Selección)
SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente
Tipos De Datos. Numéricos. Alfanuméricos (string) Arreglos (Vectores, Matrices) Estructurados Registros (Def. Por el Archivos Usuario) Apuntadores
Tipos De Datos Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de
