Capítulo 3: Análisis Léxico - Escuela de Ingeniería Informática

Anuncio
Capítulo 3: Análisis Léxico
Teoría de Autómatas y Compiladores [ICI-445]
Capítulo 3: Análisis Léxico
Dr. Ricardo Soto
[[email protected]]
[http://www.inf.ucv.cl/∼rsoto]
Escuela de Ingeniería Informática
Pontificia Universidad Católica de Valparaíso
Marzo, 2010
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
1/10
Capítulo 3: Análisis Léxico
1. Introducción
El analisis léxico corresponde a la primera fase de un compilador. Es la
encargada de recibir el programa fuente y reconocer los tokens.
Programa
Fuente
Analizador Léxico
Tokens
Analizador Sintáctico
Analizador Semántico
Generador Código
Intermedio
Optimizador Código
Intermedio
Generador Código
Objeto
Dr. Ricardo Soto
Programa
Objeto
Teoría de Autómatas y Compiladores
2/10
Capítulo 3: Análisis Léxico
2. Funciones del Analizador Léxico
Generar una lista ordenada de tokens a partir de los caracteres
de entrada
Interactuar con el analizador sintáctico, enviándole los tokens
generados
Token
Programa
Fuente
Analizador
Léxico
Analizador
Sintáctico
Nuevo Token?
Detección de errores léxicos
Guardar información de los tokens, necesaria para el proceso
de compilación.
Nota
El analizador léxico también se conoce como scanner, lexer o tokenizer.
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
3/10
Capítulo 3: Análisis Léxico
3. Herramientas para implementar analizadores
léxicos
Autómatas finitos...
Generadores de
analizadores léxicos:
a..z, A..Z, , −, 0..9
q1
a..z, A..Z
q2
0..9
(
q0
)
q3
:
q5
=
q6
Lex, Flex
(http://flex.sourceforge.net/)
JFlex
(http://jflex.de/)
Ragel
(http://www.complang.org/ragel/)
ANTLR
(http://www.antlr.org/)
...
q4
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
4/10
Capítulo 3: Análisis Léxico
4. Implementación de analizadores léxicos en ANTLR
Definición de Tokens
Palabras reservadas
tokens
{
INT_TYPE
REAL_TYPE
BOOL_TYPE
STRING_TYPE
...
BEGIN_RW
END_RW
IF_RW
ELSE_RW
WHILE_RW
...
TRUE_LITERAL
FALSE_LITERAL
...
}
=
=
=
=
"int"
"real"
"bool"
"string"
;
;
;
;
=
=
=
=
=
"begin"
"end"
"if"
"else"
"while"
;
;
;
;
;
= "true"
= "false"
;
;
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
5/10
Capítulo 3: Análisis Léxico
4. Implementación de analizadores léxicos en ANTLR
Definición de Reglas
Letras
LETTER : ’a’..’z’
| ’A’..’Z’
;
Dígitos
DIGIT : ’0’..’9’;
Identificadores
IDENT
options {testLiterals=true;} // Comprobar palabras reservadas
: (LETTER|’_’) (LETTER|DIGIT|’_’)*
;
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
6/10
Capítulo 3: Análisis Léxico
4. Implementación de analizadores léxicos en ANTLR
Definición de Reglas
Símbolos de puntuación
SEMICOLON
COMMA
DOT
COLON
...
:
:
:
:
’;’
’,’
’.’
’:’
;
;
;
;
Paréntesis
LEFT_PAREN
RIGHT_PAREN
LEFT_BRACE
RIGHT_BRACE
LEFT_BRACKET
:
:
:
:
:
’(’
’)’
’{’
’}’
’[’
;
;
;
;
;
RIGHT_BRACKET
//opción para mensajes de error
options { paraphrase="a right bracket (’]’)"; }
: ’]’
;
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
7/10
Capítulo 3: Análisis Léxico
4. Implementación de analizadores léxicos en ANTLR
Definición de Reglas
Operadores Matemáticos
PLUS
SUB
STAR
SLASH
...
:
:
:
:
’+’
’-’
’*’
’/’
;
;
;
;
Operadores Relacionales
EQUAL
NOT_EQUAL
GR_EQUAL
LE_EQUAL
...
:
:
:
:
’=’’=’
’!’’=’
’>’’=’
’<’’=’
;
;
;
;
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
8/10
Capítulo 3: Análisis Léxico
4. Implementación de analizadores léxicos en ANTLR
Definición de Reglas
Números
NUM_LITERAL : (( DIGIT )+ ’.’ ) =>
( DIGIT )+ ’.’ ( DIGIT )+ { $setType (REAL_LITERAL); }
| ( DIGIT )+
{ $setType (INT_LITERAL); }
;
Blancos
WS :
((’ ’ | ’\t’ | ’\f’)
| ( ’\n’ | ’\r’ ) { newline(); }
) { _ttype = Token.SKIP; }
;
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
9/10
Capítulo 3: Análisis Léxico
5. Ejercicios
Implemente el analizador léxico del lenguaje MiLe (Micro
Lenguaje)
Tokens
var
begin
end
numeric
string
if
else
for
in
or
and
Puntuación, paréntesis y operadores
. , ; { } [] () + - * / < > != == <= >= =
Números e identificadores
number ::= (digit)+ ("." (digit)+)?
ident ::= (letter|’_’) (letter|digit|’_’)*
Dr. Ricardo Soto
Teoría de Autómatas y Compiladores
10/10
Descargar