Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

Introducción a la compilación. Creación de un sencillo analizador léxico. Caso práctico

El analizador léxico es la primera fase de un compilador, lee caracteres de entrada para formar componentes e identificarlos o clasificarlos y pasar la información de los componentes al analizador sintáctico.

Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar.  Este proceso de traducción se conoce como compilación.

El analizador léxico que incorporan la mayoría de los compiladores de los lenguajes de programación realiza además funciones como eliminar espacios en blanco, saltos de línea, tabuladores, ignorar comentarios, detección y recuperación de errores. Los errores que un analizador léxico reconoce son símbolos no válidos o no reconocidos por el lexico del lenguaje o que no forman parte de ningún componente léxico.

Existen diversos métodos para construir una analizador léxico, un método es usar un AFD para describir el patrón de cada componente. Para este método se parte de una tabla descriptiva de los componentes léxicos que reconocerá el analizador, en donde se clasifican los diversos tipos de componentes.

Para cada componente se construye un AFD que permita identificar el patrón de simbolos que deberá recibir y donde deberá terminar ese patrón que señale que ahi se encontró un componente. Todos los AFD´s se integran en un solo diagrama.

Finalmente se determina la matriz de transición de estados, que no es más que transcripción del AFD integrado, en donde las columnas son los símbolos que acepta el analizador. Lo que resta es crear un algoritmo de reconocimiento de cadenas y añadir mediante una selección de casos para tomar la acción correspondiente según la cadena encontrada.

En este post analizaremos como crear uno sencillo, en VB.

He preferido crear un autómata programable personal, aplicando los conceptos de implementación del analizador léxico. Autómata.

Este autómata se encuentra realizado en VB.

La tabla de símbolos se encuentra en memoria y no en disco.

Tengo que procesar todos los elementos, creados en la tabla de símbolos.

Estos son los identificadores definidos (total 49 lexemas) para la tabla de símbolos.

 


Diagrama de transiciones.

Ventana del ejemplo aplicado.

Código cuando se pulsa una tecla.

Private Sub valor_KeyPress(KeyAscii As Integer)
 
If KeyAscii = 8 Then
Vtemporal = ""
Else
 
Error.Visible = False
aceptado.Visible = False
 
Vtemporal = Vtemporal & Chr(KeyAscii)
caracter = Chr(KeyAscii)
If Not IsNumeric(Chr(KeyAscii)) Then
 
Estado2.Value = 1
 
'Ahora comparamos si la entrada es correcta con la tabla de simbolos.
For x = 0 To Me.TablaSimbolos.ListCount - 1
   If Vtemporal = TablaSimbolos.List(x) Then
        Estado3.Value = 1
        aceptado.Visible = True
 
        TablaSimbolos.Selected(x) = True
 
        Contador = Contador + 1
   End If
 
Next x
 
Else
Estado1.Value = 1
Vtemporal = ""
Error.Visible = True
Contador = 0
 
End If
 
valor = ""
 
End If
End Sub

Tabla de simbolos

'Alta de elementos en la tabla de simbolos
 
TablaSimbolos.AddItem "Definevar", 0
TablaSimbolos.AddItem "Definecons", 1
TablaSimbolos.AddItem "Ent", 2
TablaSimbolos.AddItem "Carac", 3
TablaSimbolos.AddItem "Variable", 4
TablaSimbolos.AddItem "Decimal", 5
TablaSimbolos.AddItem "*/", 6
TablaSimbolos.AddItem "evalua", 7
TablaSimbolos.AddItem "vincula", 8
TablaSimbolos.AddItem "color", 9
TablaSimbolos.AddItem "arreglo", 10
TablaSimbolos.AddItem "=", 11
TablaSimbolos.AddItem "==", 12
TablaSimbolos.AddItem "!=", 13
TablaSimbolos.AddItem "", 15
TablaSimbolos.AddItem ">=", 16
TablaSimbolos.AddItem ">", 29
TablaSimbolos.AddItem "convierte", 30
TablaSimbolos.AddItem "si", 31
TablaSimbolos.AddItem "entonces", 32
TablaSimbolos.AddItem "encasocontrario", 33
TablaSimbolos.AddItem "{", 34
TablaSimbolos.AddItem "}", 35
TablaSimbolos.AddItem "caso", 36
TablaSimbolos.AddItem "sinocaso", 37
TablaSimbolos.AddItem "desde", 38
TablaSimbolos.AddItem "llamada", 39
TablaSimbolos.AddItem "hasta", 40
TablaSimbolos.AddItem "haz", 41
TablaSimbolos.AddItem "&&", 42
TablaSimbolos.AddItem "||", 43
TablaSimbolos.AddItem "no", 44
TablaSimbolos.AddItem "//", 45
TablaSimbolos.AddItem "/*", 46
TablaSimbolos.AddItem "funcion", 47

Adjunto código fuente del ejemplo en formato RAR

Automata-ejemplo

2 de respuestas

  1. muchas gracias amigo es de gran ayuda !

  2. […] código y pulsando sobre preparar cadena, generara los saltos adecuados ya que posee un analizador léxico dentro. Además se pueden emplear aceleradores de […]

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Home Formacion Introducción a la compilación. Creación de un sencillo analizador léxico. Caso práctico
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies