COMPILADORES
Los compiladores son programas de computadoras que
traducen de un lenguaje a otro, un compilador como su entrada, un programa
escrito en lenguaje fuente y produce un programa equivalente escrito en
lenguaje objeto.
Un compilador se compone internamente de varias etapas:
Por fases que
realizan operaciones lógicas y estos son:
a) Analizador léxico –Lee la secuencia de caracteres de izquierda a
derecha del programa fuente y agrupa las secuencias de caracteres en unidades
con significado propio (componentes léxicos o tokens).
Las palabras claves, identificadores,
operadores, constantes numéricas, signos de puntuación como separadores de sentencias,
llaves, paréntesis, etc., son diversas clasificaciones de componentes léxicos.
ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO,
EJEMPLO Y REPRESENTACIÓN DE SUS COMPONENTES.
Analizador Léxico: lee la secuencia de caracteres del
programa fuente, carácter a carácter, y los agrupa para formar unidades con
significado propio, los componentes Léxicos. Estos componentes l representan:
palabras reservadas: if, while, do, . . . identificadores: asociados a
variables, nombres de funciones, tipos definidos por el usuario, etiquetas, ...
Bibliografía: Aho, A.V., Sethi, R., Ullman, J.D. (1990),
Compiladores: principios, técnicas y herramientas, Tema 3, páginas: 85-158.
Analizador Léxico:
Divide palabras con significado propio y después las convierte a una
secuencia de terminales desde el punto de vista del analizador sintatico. Dicha
secuencia es el punto de partida para que el analizador sintáctico construya
el árbol sintético que reconoce las sentencias de entrada.
Bibliografia :Compiladores,Traductores y Compiladores con
Lex/Yacc , Sergio Galvez Rojas y Miguel Angel Mora Mata (2005).
Este ejemplo tendrá que aceptar
cualquier fecha del año 2011, esta fecha tendrá que ser válida (que lleve
relación el mes con el día)
ANALIZADOR LÉXICO
TOKENS
|
|
LEXEMAS
|
Mes 1
|
|
ENERO
|
Mes 2
|
|
FEBRERO
|
Mes 3
|
|
MARZO
|
Mes 4
|
|
ABRIL
|
Mes 5
|
|
MAYO
|
Mes 6
|
|
JUNIO
|
Mes 7
|
|
JULIO
|
Mes 8
|
|
AGOSTO
|
Mes 9
|
|
SEPTIEMBRE
|
Mes 10
|
|
OCTUBRE
|
Mes 11
|
|
NOVIEMBRE
|
Mes 12
|
|
DICIEMBRE
|
Año
|
|
2011
|
Día 1
|
|
1
|
Día 2
|
|
2
|
Día 3
|
|
3
|
Día 4
|
|
4
|
Día 5
|
|
5
|
Día 6
|
|
6
|
Día 7
|
|
7
|
Día 8
|
|
8
|
Día 9
|
|
9
|
Día 10
|
|
10
|
Día 11
|
|
11
|
Día 12
|
|
12
|
Día 13
|
|
13
|
Día 14
|
|
14
|
Día 15
|
|
15
|
Día 16
|
|
16
|
Día 17
|
|
17
|
Día 18
|
|
18
|
Día 19
|
|
19
|
Día 20
|
|
20
|
Día 21
|
|
21
|
Día 22
|
|
22
|
Día 23
|
|
23
|
Día 24
|
|
24
|
Día 25
|
|
25
|
Día 26
|
|
26
|
Día 27
|
|
27
|
Día 28
|
|
28
|
Día 29
|
|
29
|
Día 30
|
|
30
|
Día 31
|
|
31
|
ANALIZADOR SINTÁCTICO
G = {Vt, Vn, S, R}
Vt={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,2011,ENERO,FEBRERO,MARZO,ABRIL,MAYO,JUNIO,JULIO,AGOSTO,SEPTIEMBRE,OCTUBRE,NOVIEMBRE,DICIEMBRE
}
Vn={Día, Mes, Año, M1, M2, M3,D1, D2, D3
}
Reglas
gramaticales
S = Día/Mes/Año | Año/Mes/Día
Mes
= M1|M2|M3
M1 = ENERO|MARZO|MAYO|JULIO|AGOSTO|OCTUBRE|DICIEMBRE
M2 = ABRIL|JUNIO|SEPTIEMBRE|NOVIEMBRE
M3 = FEBRERO
Día
= D1|D2|D3
D1=1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
D2=1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30
D3= 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Año
= 2011
Árbol
de derivación
Fecha de prueba
16/02/2011
Componentes
Léxicos, Patrones y Lexemas
Un token es un par que consiste en un nombre
de token y un valor de atributo opcional. El nombre del token es un símbolo
abstracto que representa un tipo de unidad léxica; por ejemplo, una palabra
clave específica o una secuencia de caracteres de entrada que denotan un
identificador.
Un patrón es una descripción de la forma que
pueden tomar los lexemas de un token. En el caso de una palabra clave como
token, elpatrón es sólo la secuencia de caracteres que forman la palabra
clave. Para los identificadores y algunos otros tokens, el patrón es una
estructura más compleja que se relaciona mediante muchas cadenas.
• Un lexema es una secuencia de caracteres en el
programa fuente, que coinciden con el patrón para un token y que el analizador
léxico identifica como una instancia de ese token.