Professional Documents
Culture Documents
Programación de Sistemas
Unidad 2
Analizador
Los compiladores son programas de
Léxico, computadora que traducen de un lenguaje a
otro un lenguaje escrito en lenguaje fuente y
Sintáctico y produce un programa equivalente escrito en
lenguaje objeto
Semántico
Un compilador se compone internamente de
varias etapas o faces que realizan operaciones
lógicas y estas son
• Es la primera fase de un compilador
• También llamad scanner tiene las funciones de leer el
programa fuente como un archivo de caracteres y dividirlo en
tokens.
• Los tokens son las palabras reservadas de un lenguaje,
secuencia de caracteres que representa una unidad de
información en el programa fuente
Analizador
léxico
Analizador
Lexico
• Eliminar los comentarios del programa.
• Eliminar espacios en blanco, tabuladores, retorno de
carro, etc, y en general, todo aquello que carezca de
significado según la sintaxis del lenguaje.
• Reconocer los identificadores de usuario, números,
Otras palabras reservadas del lenguaje, ..., y tratarlos
correctamente con respecto a la tabla de símbolos (solo
funciones que en los casos que debe de tratar con la tabla de símbolos).
• Llevar la cuenta del número de línea por la que va
realiza : leyendo, por si se produce algún error, dar información
sobre donde se ha producido.
• Avisar de errores léxicos. Por ejemplo, si @ no pertenece
al lenguaje, avisar de un error.
• Puede hacer funciones de preprocesador.
• Los componentes léxicos influyen en las decisiones del
análisis sintáctico y los atributos en la traducción de los
componentes léxicos
• En la práctica, los componentes léxicos suelen tener un
solo atributo -un apuntador a la entrada de la tabla de
símbolos donde se guarda la información sobre el
Atributos de componente léxico.
• Ejemplo 3.1. Los componentes léxicos y los valores de
los atributos asociados para la proposición de FORTRAN.
• E = M * e ** 2
Componentes •
•
Se escriben a continuación como una secuencia de parejas:
< id, apuntador a la entrada de la tabla de símbolos para E>
• < op_asign. >
Léxicos •
•
< id, apuntador a la entrada de la tabla de símbolos para M>
< op-mult,>
• < id. apuntador a la entrada de la tabla de si m bolos para e>
• < op_exp, >
• < núm. valor entero 2 >
Necesidad del analizador léxico
tablas de
Simbolos
Manejo de Errores
lexicos
• Son pocos los errores simplemente en el nivel léxico ya que tiene una visión muy
restringida de un programa fuente. El analizador léxico debe devolver el componente
léxico de un identificador y dejar a otra fase se ocupe de los errores.
•
Suponga que una situación en la cual el analizador léxico no puede continuar por que
ninguno de los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de
recuperación más sencilla sea recuperación “EN MODO PANICO” (este método de
recuperación es donde se borra caracteres sucesivos de la entrada hasta que el
analizador léxico pueda encontrar un componente léxico bien formado). ¡¡Los
programas no siempre son correctos!!
•
El compilador tiene que:
LEX: es un programa para generar analizadores léxicos (en inglés scanners o lexers).
Lex se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico. Lex, escrito
originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, y se incluye en el
estándar de POSIX. Lex toma como entrada una especificación de analizador léxico y devuelve como salida el
codigo fuente implementando el analizador léxico en C.
Aunque tradicionalmente se trata de software propietario, existen versiones libres de lex basadas en el código
originalde AT&T en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell. Otra versión popular de software
libre de lex es Flex.
Analizador Sintáctico
• Es la fase del analizador que se encarga
de chequear el texto de entrada en base
a una gramática dada.
• También conocidos como Parseadores
(parser)
• Y en caso de que el programa de entrada
sea válido, suministra el árbol sintáctico
que lo reconoce.
• En la práctica, el analizador sintáctico
también hace:
• Acceder a la tabla de símbolos
(para hacer parte del trabajo del
analizador semántico).
• Chequeo de tipos (del analizador
semántico).
• Generar código intermedio
• Generar errores cuando se
producen
Análisis Sintáctico Según su
tipo
• Top-Down Parsing
• Parte del axioma de la gramática.
• Procesa la entrada de izquierda a derecha.
• Bottom-Up Parsing
• Parte desde los tokens hacia el axioma
inicial.
• Disminuye la cantidad de reglas aplicadas
Análisis semántico: Componentes
Sintáctico:
Representación
de sus
componentes
• Los errores que puede detectar el analizador
sintáctico son aquellos que violan las reglas de una
gramática independiente del contexto. Ya hemos
mencionado que algunas de las características de un
lenguaje de programación no pueden enunciarse
con reglas independientes del contexto, ya que
dependen de él; por ejemplo, la restricción de que
Errores los identificadores deben declararse previamente.
Por lo tanto, los principales errores semánticos son:
• Conversiones de tipos no permitidas
• int x;
• x = 4.32;
• Si el lenguaje Li generado por la gramática i entonces se
cumple que
Gramáticas
• Especificación para la estructura sintáctica de un lenguaje de
programación, muy similar a la estructura léxica.
• Se define a través de Reglas Gramaticales RG
Gramática
Libre de
Contexto
• RG
exp → exp op exp | (exp) | número
Derivación op → + | - | *
• EJEMPLO:
(34-3) * 42
Árbol de
Análisis
Sintáctico
• 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 sean compatibles o que
los parámetros reales de una función sean coherentes con
los parámetros formales
Analizador • Funciones principales
Concepto de expresado mediante la sintaxis del lenguaje y todo aquello que hace
descender a nuestro lenguaje de programación de las alturas de una
máquina abstracta hasta el nivel de un computador real.
analizador
El análisis semántico completa las dos fases anteriores de análisis
semántico lexicográfico y sintáctico incorporando ciertas comprobaciones que no
pueden asimilarse al mero reconocimiento de una cadena dentro de un
lenguaje.
• Un componente
importante del análisis
semántico es la
Verificación de Tipos.
• Aquí, el compilador verifica
si cada operador tiene
operandos permitidos por
la especificación del
lenguaje fuente
Representación
de sus
componentes
Ejemplo:
• Se está compilando el
siguiente programa,
escrito en un lenguaje de
programación ficticio,
cuya sintaxis resultará fácil
de comprender para
cualquier programador:
Análisis semántico y generación de código
• Compiladores de un solo paso: integran la
generación de código con el análisis semántico.
Estos compiladores generan directamente el
código a partir del árbol de la derivación. En este
caso, las llamadas a las rutinas que escriben el
código ensamblador suelen entremezclarse con
el análisis semántico.
• Compiladores de dos o más pasos: en el primer
paso de la compilación, el analizador semántico
genera un código abstracto denominado código
intermedio. En un segundo paso se realiza la
generación del código definitivo a partir del
código intermedio. A veces se separa también la
optimización de código, la cual se realiza en un
tercer paso independiente.
Sintaxis/Semántica
• Sintaxis
• Conjunto de reglas formales que
especifican la estructura de los
programas pertenecientes a dicho
lenguaje
• Semántica
• Conjunto de reglas que especifican el
significado de cualquier sentencia
sintácticamente válida
• Ejemplos de comprobación semántica
Int z
Char j
z=1+2*j+4
Ejemplos de • ERROR:
semántica J = 1+ verdadero
• ERROR:
Se esperaba un valor de tipo numérico o
cadena tras el operador: + en la línea 2
Columna 7
Bilbiografia.
• Daniel-C Yañez. (2017). Compiladores. 19/01/2019, de Blogger. Blog Personal Sitio web:
http://estructuradec0ntrol.blogspot.com/2017/02/analizador-lexico-sintactico-y-semantico.html
• Germania Rodriguez. (2011). Automatas y compiladores analisis sintactico. 19/01/2019, de LinkedIn
Corporation Sitio web: https://es.slideshare.net/grrodriguez/automatas-y-compiladores-analisis-sintactico
• Infomania pro. (2016). Aanalisis semantico. 19/01/2019, de LinkedIn Corporation Sitio web:
https://es.slideshare.net/Infomaniapro/unidad4-analisissemantico
• Alfonseca Moreno, M.; De la Cruz Echendia, M.; Ortega De la Fuente, A.;
Pulido Cañabate, E.. (2006). Compiladores e interpretes: teoría y práctica.
Madrid: Pearseon Education.