Вы находитесь на странице: 1из 21

INSTITUTO TECNOLGICO

SUPERIOR DE ALVARADO

INGENIERA EN SISTEMAS COMPUTACIONALES

Materia:
AUTOMATA 2

Semestre-Grupo:
7 GRUPO UNICO

Producto Acadmico:
REPORTE DE PRACTICA

Temas:
ANALIZADOR LEXICO Y SINTANCTICO

Presenta:
MANUEL DE JESUS CRUZ PORTELA

Docente:
ISC. MARIA GUADALUPE GARCIA

ALVARADO, VER. AGOSTO-DICIEMBRE 2017


5-11-2017
COMPILADORES Y TEORA
DEL LENGUAJE
ANALIZADOR LEXICO Y SEMANTICO DE
EXPRESIONES

MANUEL DE JESUS CRUZ PORTELA


146Z0093
COMPILADORES Y TEORA DEL LENGUAJE

INDICE
ANALIZADOR LEXICO Y SEMANTICO .........................................................................2

I. INTRODUCCIN ..................................................................................................2

II. CAPTULO I: COMPILADORES .........................................................................4


1. QU ES UN COMPILADOR? .............................................................................4
2. CLASIFICACIN DE COMPILADORES ............................................................5
3. FUNCIONES DE UN COMPILADOR..................................................................6
4. PARTES DE UN COMPILADOR .........................................................................8

III. CAPTULO 2: APLICACIN ANALISIS LEXICO Y SINTACTICO DE UNA


EXPRESION....................................................................................................................11
CDIGO ......................................................................................................................11
DEMOSTRACIN ......................................................................................................16

CONCLUSIONES ...........................................................................................................18

RECOMENDACIONES ..................................................................................................18

BIBLIOGRAFA .............................................................................................................19

MANUEL DE JESUS CRUZ PORTELA 1


COMPILADORES Y TEORA DEL LENGUAJE

ANALIZADOR LEXICO Y SEMANTICO

I. INTRODUCCIN

En 1946 se desarroll el primer ordenador digital. En un principio, estas mquinas


ejecutaban instrucciones consistentes en cdigos numricos que sealan a los circuitos de
la mquina los estados correspondientes a cada operacin. Esta expresin mediante
cdigos numricos se llam Lenguaje Mquina, interpretado por un secuenciador
cableado o por un microprograma. Pero los cdigos numricos de las mquinas son
engorrosos. Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de
escribir sus programas mediante claves ms fciles de recordar que esos cdigos
numricos; al final, todas esas claves juntas se traducan manualmente a Lenguaje
Mquina. Estas claves constituyen los llamados lenguajes ensambladores, que se
generalizaron en cuanto se dio el paso decisivo de hacer que las propias mquinas
realizaran el proceso mecnico de la traduccin. A este trabajo se le llama ensamblar el
programa.

Dada su correspondencia estrecha con las operaciones elementales de las mquinas, las
instrucciones de los lenguajes ensambladores obligan a programar cualquier funcin de
una manera minuciosa e iterativa. De hecho, normalmente, cuanto menor es el nivel de
expresin de un lenguaje de programacin, mayor rendimiento se obtiene en el uso de los
recursos fsicos (hardware). A pesar de todo, el lenguaje ensamblador segua siendo el de
una mquina, pero ms fcil de manejar. Los trabajos de investigacin se orientaron
entonces hacia la creacin de un lenguaje que expresara las distintas acciones a realizar
de una manera lo ms sencilla posible para el hombre. As, en 1950, John Backus dirigi
una investigacin en I.B.M. en un lenguaje algebraico. En 1954 se empez a desarrollar
un lenguaje que permita escribir frmulas matemticas de manera traducible por un
ordenador. Le llamaron FORTRAN (FORmulae TRANslator). Fue el primer lenguaje
considerado de alto nivel. Se introdujo en 1957 para el uso de la computadora IBM
modelo 704. Permita una programacin ms cmoda y breve que lo existente hasta ese
momento, lo que supona un considerable ahorro de trabajo. Surgi as por primera vez
el concepto de un traductor, como un programa que traduca un lenguaje a otro lenguaje.

MANUEL DE JESUS CRUZ PORTELA 2


COMPILADORES Y TEORA DEL LENGUAJE

En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje


traducido de bajo nivel, se emplea el trmino compilador.

La tarea de realizar un compilador no fue fcil. El primer compilador de FORTRAN tard


18 aos-persona en realizarse y era muy sencillo. Este desarrollo del FORTRAN estaba
muy influenciado por la mquina objeto en la que iba a ser implementado. Como un
ejemplo de ello tenemos el hecho de que los espacios en blanco fuesen ignorados, debido
a que el perifrico que se utilizaba como entrada de programas (una lectora de tarjetas
perforadas) no contaba correctamente los espacios en blanco. Paralelamente al desarrollo
de FORTRAN en Amrica, en Europa surgi una corriente ms universitaria, que
pretenda que la definicin de un lenguaje fuese independiente de la mquina y en

De todas formas, y en contra de lo que quiz pueda pensarse, todava se estn llevando a
cabo varias vas de investigacin en este fascinante campo de la compilacin. Por una
parte, se estn mejorando las diversas herramientas disponibles (por ejemplo, el
generador de analizadores lxicos Aardvark para el lenguaje PASCAL). Tambin la
aparicin de nuevas generaciones de lenguajes -ya se habla de la quinta generacin, como
de un lenguaje cercano al de los humanos-ha provocado la revisin y optimizacin de
cada una de las fases del compilador. El ltimo lenguaje de programacin de amplia
aceptacin que se ha diseado, el lenguaje Java, establece que el compilador no genera
cdigo para una mquina determinada sino para una virtual, la Java Virtual Machine
(JVM), que posteriormente ser ejecutado por un intrprete, normalmente incluido en un
navegador de Internet. El gran objetivo de esta exigencia es conseguir la mxima
portabilidad de los programas escritos y compilados en Java, pues es nicamente la
segunda fase del proceso la que depende de la mquina concreta en la que se ejecuta el
intrprete.

MANUEL DE JESUS CRUZ PORTELA 3


COMPILADORES Y TEORA DEL LENGUAJE

II. CAPTULO I: COMPILADORES


1. QU ES UN COMPILADOR?
Un traductor es cualquier programa que toma como entrada un texto escrito en un
lenguaje, llamado fuente y da como salida otro texto en un lenguaje, denominado objeto.

Ilustracin 1: funcin de un compilador

En el caso de que el lenguaje fuente sea un lenguaje de programacin de alto nivel y el


objeto sea un lenguaje de bajo nivel (ensamblador o cdigo de mquina), a dicho traductor
se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje fuente es el
lenguaje ensamblador. Un intrprete no genera un programa equivalente, sino que toma
una sentencia del programa fuente en un lenguaje de alto nivel y la traduce al cdigo
equivalente y al mismo tiempo lo ejecuta. Histricamente, con la escasez de memoria de
los primeros ordenadores, se puso de moda el uso de intrpretes frente a los compiladores,
pues el programa fuente sin traducir y el intrprete juntos daban una ocupacin de
memoria menor que la resultante de los compiladores. Por ello los primeros ordenadores
personales iban siempre acompaados de un intrprete de BASIC (Spectrum,
Commodore VIC-20, PC XT de IBM, etc.). La mejor informacin sobre los errores por
parte del compilador, as como una mayor velocidad de ejecucin del cdigo resultante
hizo que poco a poco se impusieran los compiladores. Hoy en da, y con el problema de
la memoria prcticamente resuelto, se puede hablar de un gran predominio de los
compiladores frente a los intrpretes, aunque intrpretes como los incluidos en los
navegadores de Internet para interpretar el cdigo JVM de Java son la gran excepcin.

Ventajas de compilar frente a interpretar:

Se compila una vez, se ejecuta n veces.

En bucles, la compilacin genera cdigo equivalente al bucle, pero interpretndolo se


traduce tantas veces una lnea como veces se repite el bucle.

El compilador tiene una visin global del programa, por lo que la informacin de
mensajes de error es ms detallada.

Ventajas del intrprete frente al compilador:

MANUEL DE JESUS CRUZ PORTELA 4


COMPILADORES Y TEORA DEL LENGUAJE

Un intrprete necesita menos memoria que un compilador. En principio eran ms


abundantes dado que los ordenadores tenan poca memoria.

Permiten una mayor interactividad con el cdigo en tiempo de desarrollo.

Un compilador no es un programa que funciona de manera aislada, sino que necesita de


otros programas para conseguir su objetivo: obtener un programa ejecutable a partir de
un programa fuente en un lenguaje de alto nivel. Algunos de esos programas son el
preprocesador, el linker, el depurador y el ensamblador. El preprocesador se ocupa
(dependiendo del lenguaje) de incluir ficheros, expandir macros, eliminar comentarios, y
otras tareas similares. El linker se encarga de construir el fichero ejecutable aadiendo al
fichero objeto generado por el compilador las cabeceras necesarias y las funciones de
librera utilizadas por el programa fuente. El depurador permite, si el compilador ha
generado adecuadamente el programa objeto, seguir paso a paso la ejecucin de un
programa. Finalmente, muchos compiladores, en vez de generar cdigo objeto, generan
un programa en lenguaje ensamblador que debe despus convertirse en un ejecutable
mediante un programa ensamblador.

2. CLASIFICACIN DE COMPILADORES
El programa compilador traduce las instrucciones en un lenguaje de alto nivel a
instrucciones que la computadora puede interpretar y ejecutar. Para cada lenguaje de
programacin se requiere un compilador separado. El compilador traduce todo el
programa antes de ejecutarlo. Los compiladores son, pues, programas de traduccin
insertados en la memoria por el sistema operativo para convertir programas de cmputo
en pulsaciones electrnicas ejecutables (lenguaje de mquina). Los compiladores pueden
ser de:

Una sola pasada: examina el cdigo fuente una vez, generando el cdigo o programa
objeto.

Pasadas mltiples: requieren pasos intermedios para producir un cdigo en otro lenguaje,
y una pasada final para producir y optimizar el cdigo producido durante los pasos
anteriores.

Optimacin: lee un cdigo fuente, lo analiza y descubre errores potenciales sin ejecutar
el programa.

MANUEL DE JESUS CRUZ PORTELA 5


COMPILADORES Y TEORA DEL LENGUAJE

Compiladores incrementales: generan un cdigo objeto instruccin por instruccin (en


vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El
otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen
conjuntamente.

Ensamblador: el lenguaje fuente es lenguaje ensamblador y posee una estructura sencilla.

Compilador cruzado: se genera cdigo en lenguaje objeto para una mquina diferente de
la que se est utilizando para compilar. Es perfectamente normal construir un compilador
de Pascal que genere cdigo para MS-DOS y que el compilador funcione en Linux y se
haya escrito en C++.

Compilador con montador: compilador que compila distintos mdulos de forma


independiente y despus es capaz de enlazarlos.

Autocompilador: compilador que est escrito en el mismo lenguaje que va a compilar.


Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al
lenguaje, mejorar el cdigo generado, etc.

Metacompilador: es sinnimo de compilador de compiladores y se refiere a un programa


que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un
compilador y genera como salida el compilador para ese lenguaje. El desarrollo de los
metacompiladores se encuentra con la dificultad de unir la generacin de cdigo con la
parte de anlisis. Lo que s se han desarrollado son generadores de analizadores lxicos y
sintcticos. Por ejemplo, los conocidos:

LEX: generador de analizadores lxicos


YACC: generador de analizadores sintcticos
desarrollados para UNIX. Los inconvenientes que tienen son que los analizadores que
generan no son muy eficientes.
Descompilador: es un programa que acepta como entrada cdigo mquina y lo
traduce a un lenguaje de alto nivel, realizando el proceso inverso a la compilacin.

3. FUNCIONES DE UN COMPILADOR
A grandes rasgos un compilador es un programa que lee un programa escrito es un
lenguaje, el lenguaje fuente, y lo traduce a un programa equivalente en otro lenguaje, el

MANUEL DE JESUS CRUZ PORTELA 6


COMPILADORES Y TEORA DEL LENGUAJE
lenguaje objeto. Como parte importante de este proceso de traduccin, el compilador
informa a su usuario de la presencia de errores en el programa fuente.

A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de


lenguajes fuente, desde los lenguajes de programacin tradicionales, como FORTRAN o
Pascal, hasta los lenguajes especializados que han surgido virtualmente en todas las reas
de aplicacin de la informtica. Los lenguajes objeto son igualmente variados; un
lenguaje objeto puede ser otro lenguaje de programacin o el lenguaje de mquina de
cualquier computador entre un microprocesador y un supercomputador. A pesar de existir
una aparente complejidad por la clasificacin de los compiladores, como se vio en el tema
anterior, las tareas bsicas que debe realizar cualquier compilador son esencialmente las
mismas. Al comprender tales tareas, se pueden construir compiladores para una gran
diversidad de lenguajes fuente y mquinas objeto utilizando las mismas tcnicas bsicas.

Nuestro conocimiento sobre cmo organizar y escribir compiladores ha aumentado


mucho desde que comenzaron a aparecer

los primeros compiladores a principios de los aos cincuenta. Es difcil dar una fecha
exacta de la aparicin del primer compilador, porque en un principio gran parte del trabajo
de experimentacin y aplicacin se realiz de manera independiente por varios grupos.
Gran parte de los primeros trabajos de compilacin estaba relacionada con la traduccin
de frmulas aritmticas a cdigo de mquina.

En la dcada de 1950, se consider a los compiladores como programas notablemente


difciles de escribir. EL primer compilador de FORTRAN, por ejemplo, necesit para su
implantacin de 18 aos de trabajo en grupo (Backus y otros [1975]). Desde entonces, se
han descubierto tcnicas sistemticas para manejar muchas de las importantes tareas que
surgen en la compilacin. Tambin se han desarrollado buenos lenguajes de implantacin,
entornos de programacin y herramientas de software. Con estos avances, puede hacerse
un compilador real incluso como proyecto de estudio en un curso de un semestre sobre
diseo sobre de compiladores.

MANUEL DE JESUS CRUZ PORTELA 7


COMPILADORES Y TEORA DEL LENGUAJE

4. PARTES DE UN COMPILADOR
Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el
programa fuente de una representacin en otra. En la figura 3 se muestra una
descomposicin tpica de un compilador. En la prctica se pueden agripar fases y las
representaciones intermedias entres las fases agrupadas no necesitan ser construidas
explcitamente.

Ilustracin 2: Partes de un compilador

Programa objeto

Las tres primeras fases, que forman la mayor parte de la porcin de anlisis de un
compilador se analizan en la seccin IX. Otras dos actividades, la administracin de la
tabla se smbolos y el manejo de errores, se muestran en interaccin con las seis fases de
anlisis lxico, anlisis sintctico, anlisis semntico, generacin de cdigo intermedio,

MANUEL DE JESUS CRUZ PORTELA 8


COMPILADORES Y TEORA DEL LENGUAJE

optimacin de cdigo y generacin de cdigo. De modo informal, tambin se llamarn


"fases" al administrador de la tabla de smbolos y al manejador de errores.

ADMINISTRADOR DE LA TABLA DE SMBOLOS

Una funcin esencial de un compilador es registrar los identificadores utilizados en el


programa fuente y reunir informacin sobre los distintos atributos de cada identificador.
Estos atributos pueden proporcionar informacin sobre la memoria asignada a un
identificador, su tipo, su mbito (la parte del programa donde tiene validez) y, en el caso
de nombres de procedimientos, cosas como el nmero y tipos de sus argumentos, el
mtodo de pasar cada argumento (por ejemplo, por referencia) y el tipo que devuelve, si
los hay.

Una tabla de smbolos es una estructura de datos que contiene un registro por cada
identificador, con los campos para los atributos del identificador. La estructura de datos
permite encontrar rpidamente el registro de cada identificador y almacenar o consultar
rpidamente datos en un registro

Cuando el analizador lxico detecta un identificador en el programa fuente, el


identificador se introduce en la tabla de smbolos. Sin embargo, normalmente los atributos
de un identificador no se pueden determinar durante el anlisis lxico. Por ejemplo, en
una declaracin en Pascal como var posicin, inicial, velocidad: real;

El tipo real no se conoce cuando el analizador lxico encuentra posicin, inicial y


velocidad.

Las fases restantes introducen informacin sobre los identificadores en la tabla de


smbolos y despus la utilizan de varias formas. Por ejemplo, cuando se est haciendo el
anlisis semntico y la generacin de cdigo intermedio, se necesita saber cules son los
tipos de los identificadores, para poder comprobar si el programa fuente los usa de una
forma vlida y as poder generar las operaciones apropiadas con ellos. El generador de
cdigo, por lo general, introduce y utiliza informacin detallada sobre la memoria
asignada a los identificadores.

MANUEL DE JESUS CRUZ PORTELA 9


COMPILADORES Y TEORA DEL LENGUAJE

DETECCIN E INFORMACIN DE ERRORES

Cada frase puede encontrar errores. Sin embargo, despus de detectar un error. Cada
fase debe tratar de alguna forma ese error, para poder continuar la compilacin,
permitiendo la deteccin de ms errores en el programa fuente. Un compilador que se
detiene cuando encuentra el primer error, no resulta tan til como debiera.

Las fases de anlisis sintctico y semntico por lo general manejan una gran proporcin
de los errores detectables por el compilador. La fase lxica puede detectar errores donde
los caracteres restantes de la entrada no forman ningn componente lxico del lenguaje.
Los errores donde la cadena de componentes lxicos violan las reglas de estructura
(sintaxis) del lenguaje son determinados por la fase del anlisis sintctico.

Durante el anlisis semntico el compilador intenta detectar construcciones que tengan


la estructura sintctica correcta, pero que no tengan significado para la operacin
implicada, por ejemplo, si se intenta sumar dos identificadores. Uno de los cuales es el
nombre de una matriz, y el otro, el nombre de un procedimiento.

MANUEL DE JESUS CRUZ PORTELA 10


COMPILADORES Y TEORA DEL LENGUAJE

III. CAPTULO 2: APLICACIN ANALISIS LEXICO Y


SINTACTICO DE UNA EXPRESION.
CDIGO
Cdigo de un analizador lxico y sintctico de una expresin, realizado en Visual
Studio 2015: VISUAL BASIC CONSOLA
Module Module1

Sub Main()
Console.WriteLine(" ")
Console.WriteLine("MATERIA: AUTOMATA 2
Console.WriteLine("TRABAJO: ANALIZADOR LEXICO Y SEMANTICO DE UNA
EXPRESION")
Console.WriteLine(" ")
Console.WriteLine("INTEGRANTE:")
Console.WriteLine("MANUEL DE JESUS CRUZ PORTELA")
Console.WriteLine(" ") Console.WriteLine("INGRESE UNA
EXPRESION ...") Console.WriteLine(" ")
Dim myString As String = Console.ReadLine
Console.WriteLine(" ")
Dim myChar As String
Dim TestLen As Integer = Len(myString) Dim
exp(TestLen) As String
Dim i As Integer
Dim J As Integer
Console.WriteLine("ANALIZADOR LEXICO: ")

Console.WriteLine(" TOKENS RECONOCIDOS: ")


Console.Write(" ")
For i = 0 To (TestLen - 1) myChar =

myString.Chars(i)

If myChar = "+" Or myChar = "-" Or myChar = "/" Or myChar = "*" Or myChar =


"=" Or myChar = "^" Then
exp(i) = "op"
Console.Write("<" & exp(i) & "," & myChar & ">")

ElseIf myChar = "a" Or myChar = "b" Or myChar = "c" Or myChar = "d" Or myChar =
"e" Or myChar = "f" Or myChar = "g" Or myChar = "h" Or myChar = "i"
Or myChar = "j" Or myChar = "k" Or myChar = "l" Then
exp(i) = "exp"
Console.Write("<" & exp(i) & "," & myChar & ">")

ElseIf myChar = "1" Or myChar = "2" Or myChar = "3" Or myChar = "4" Or myChar =
"5" Or myChar = "6" Or myChar = "7" Or myChar = "8" Or myChar = "9" Then

MANUEL DE JESUS CRUZ PORTELA 11


COMPILADORES Y TEORA DEL LENGUAJE

exp(i) = "num"
Console.Write("<" & exp(i) & "," & myChar & ">")

ElseIf myChar = "(" Then


exp(i) = "par_d"
Console.Write("<" & exp(i) & "," & myChar & ">")

ElseIf myChar = ")" Then


exp(i) = "par_iz"
Console.Write("<" & exp(i) & "," & myChar & ">")

Else
Console.WriteLine(myChar & " TOKEN NO RECONOCIDO ")
End If
Next
Console.WriteLine(" ") Dim
z As Integer
J = 0
z = 1
Console.WriteLine(" ") Console.WriteLine("
TABLA DE SIMBOLOS :")

For J = 0 To (TestLen - 1) myChar =

myString.Chars(J)

If myChar = "+" Or myChar = "-" Or myChar = "/" Or myChar = "*" Or myChar =


"=" Or myChar = "^" Then
' Console.Write("<" & myChar & ">")

ElseIf myChar = "a" Or myChar = "b" Or myChar = "c" Or myChar = "d" Or myChar =
"e" Or myChar = "f" Or myChar = "g" Or myChar = "h" Or myChar = "i" Or myChar = "j" Or myChar
= "k" Or myChar = "l" Then
Console.WriteLine(" <id," & z & "> = " & myChar) z
= z + 1

ElseIf myChar = "1" Or myChar = "2" Or myChar = "3" Or myChar = "4" Or


myChar = "5" Or myChar = "6" Or myChar = "7" Or myChar = "8" Or myChar = "9" Then
'Console.Write("<" & myChar & ">")

ElseIf myChar = "(" Then


' Console.Write(myChar)

ElseIf myChar = ")" Then


'Console.Write(myChar)

Else
Console.WriteLine(myChar & " ")
Console.WriteLine(myChar & " TOKEN NO RECONOCIDO")
End If
Next
J = 0
z = 1
Console.WriteLine(" ")
Console.WriteLine(" EXPRESION ANALIZADA LEXCAMENTE :")
Console.Write(" ")

For J = 0 To (TestLen - 1) myChar =

myString.Chars(J)

MANUEL DE JESUS CRUZ PORTELA 12


COMPILADORES Y TEORA DEL LENGUAJE

If myChar = "+" Or myChar = "-" Or myChar = "/" Or myChar = "*" Or myChar =


"=" Or myChar = "^" Then
Console.Write("<" & myChar & ">")

ElseIf myChar = "a" Or myChar = "b" Or myChar = "c" Or myChar = "d" Or myChar =
"e" Or myChar = "f" Or myChar = "g" Or myChar = "h" Or myChar = "i" Or myChar = "j" Or myChar
= "k" Or myChar = "l" Then
Console.Write("<id," & z & ">") z = z
+ 1
ElseIf myChar = "1" Or myChar = "2" Or myChar = "3" Or myChar = "4" Or myChar =
"5" Or myChar = "6" Or myChar = "7" Or myChar = "8" Or myChar = "9" Then
Console.Write("<" & myChar & ">")

ElseIf myChar = "(" Then


Console.Write(myChar)

ElseIf myChar = ")" Then


Console.Write(myChar)

Else
Console.WriteLine(myChar & " TOKEN NO RECONOCIDO")
End If
Next

Console.WriteLine(" ") Dim


g As Integer
Dim h As Integer
Dim e As Integer

i = 0
h = 1
e = 0
g = 0
Console.WriteLine(" ") Console.WriteLine("ANALIZADOR
SINTACTICO: ")

'Console.WriteLine(":::::TOKENS:::::") For i =

0 To TestLen - 1

If i = 0 Then
If myString.Chars(i) = "(" Then g = g
+ 1

Else
If exp(i) = "exp" Or exp(i) = "num" Then

Else
If myString.Chars(i) = "-" Then

Else
If myString.Chars(i) = "+" Or myString.Chars(i) = "*" Or
myString.Chars(i) = "/" Or myString.Chars(i) = "^" Or myString.Chars(i) = "=" Then
Console.WriteLine(" ERROR EN EL CARACTER " &
i & " :")
Console.WriteLine(" no se puede escribir un
operador " & myString.Chars(i) & " al comienzo de una expresion")
h = 0

End If

MANUEL DE JESUS CRUZ PORTELA 13


COMPILADORES Y TEORA DEL LENGUAJE

End If
End If
End If

Else
Select Case exp(i)

Case "exp"

If myString.Chars(i - 1) = "(" Then

Else
If exp(i - 1) = "op" Then

Else
i & " :") Console.WriteLine(" ERROR EN EL CARACTER " &

Console.WriteLine(" no se puede poner una


expresion despues de una expresion")
h = 0
End If
End If

Case "num"
If myString.Chars(i - 1) = "(" Then

Else
If exp(i - 1) = "op" Then

Else
Console.WriteLine(" ERROR EN EL CARACTER " &
i & " :")
Console.WriteLine(" no se puede poner una
expresion despues de una expresion")
h = 0
End If
End If

Case "op"

If exp(i - 1) = "par_d" Or myString.Chars(i - 1) = "="


Then

If myString.Chars(i) = "-" Then

Else
Console.WriteLine(" ERROR EN EL CARACTER " &
i & " :")
Console.WriteLine(" no se puede escribir el
operador " & myString.Chars(i) & " despues de un " & myString.Chars(i - 1))
h = 0
End If
Else
If exp(i - 1) = "exp" Or exp(i - 1) = "num" Then

Else
If myString.Chars(i - 1) = ")" Then

Else
Console.WriteLine(" ERROR EN EL CARACTER
" & i & " :")

MANUEL DE JESUS CRUZ PORTELA 14


COMPILADORES Y TEORA DEL LENGUAJE

Console.WriteLine(" no se puede poner un h


operador depues de un operador")
= 0

End If
End If
End If

Case "par_d"
g = g + 1

If myString.Chars(i - 1) = "(" Then Else


If exp(i - 1) = "op" Then

Else
Console.WriteLine(" ERROR EN EL CARACTER " &
i & " :")
Console.WriteLine(" no se puede poner una
parentesis cerrado despues de una parentesis abierto")
h = 0

End If

End If
Case "par_iz"

e = e + 1
If exp(i - 1) = "exp" Or exp(i - 1) = "num" Then

Else
If exp(i - 1) = "par_iz" Then

Else
If exp(i - 1) = "op" Then
" & i & " :") Console.WriteLine(" ERROR EN EL CARACTER

Console.WriteLine(" no se puede poner un


parentesis abierto luego de un operador")
Else
Console.WriteLine(" ERROR EN EL CARACTER
" & i & " :")
Console.WriteLine(" no se puede poner dos
parentesis juntos sin ninguna expresion")
End If
h = 0

End If

End If
End Select

End If
Next

If h = 1 Then
Console.WriteLine(" NO MUESTRA ERRORES")
End If
Console.WriteLine(" ")

MANUEL DE JESUS CRUZ PORTELA 15


COMPILADORES Y TEORA DEL LENGUAJE

Console.WriteLine(" RESULTADO DEL ANALIZADOR SINTACTICO:")


If h = 1 Then
If e = g Then
Console.WriteLine(" ::LA EXPRESION ESTA BIEN ESCRITA")
Else
Console.WriteLine(" ::LE FALTA UNA PARENTESIS")
End If
Else
Console.WriteLine(" ::ERROR EN LA EXPRESION")
End If

Dim expresion As String = Console.ReadLine End Sub


End Module

DEMOSTRACIN

EJEMPLO 1: a=b+c
Este ejemplo demuestra cmo se analiza una expresin bien escrita la cual muestra que
no tiene errores. Y el analizador sintctico nos dice que: LA EXPRESION ESTA BIEN
ESCRITA

Ilustracin 1: ejemplo 1: a=b+c

MANUEL DE JESUS CRUZ PORTELA 16


COMPILADORES Y TEORA DEL LENGUAJE

EJEMPLO 2: *(a+b)=c
En este ejemplo se puede observar como el analizador lxico analiza los tokens y como
el analizador sintctico nos muestra que la expresin tiene un error uno de sus
caracteres, y te dice que el resultado en el analizador sintctico presenta un error.

Ilustracin 1: ejemplo 2 *(a+b)=c

MANUEL DE JESUS CRUZ PORTELA 17


COMPILADORES Y TEORA DEL LENGUAJE

CONCLUSIONES

El analizador lxico nos sirve para declarar los tokens que puede recibir nuestra

expresin, y nos muestra cada uno de los tokens de la expresin

El analizador sintctico nos muestra los errores que puede tener la expresin, nos da

las reglas a la cual la expresin se debe de acogerse para que esta sea correcta.

RECOMENDACIONES

Al momento de hacer un cdigo para un analizador lxico y sintctico se deben


de tener en cuenta todos los posibles casos que la expresin pueda aceptar, as
como saber que variables, expresiones y operadores aceptara nuestro analizador.

MANUEL DE JESUS CRUZ PORTELA 18


COMPILADORES Y TEORA DEL LENGUAJE

BIBLIOGRAFA

Compiladores, Principios, tcnicas y herramientas, Alfred V. Aho, Ravi Sethi,


Jeffrey D. Ullman. Addison Wesley iberoamericana.
http://www.dlsi.ua.es/docencia/asignaturas/comp1/comp1.html
http://www.cps.unizar.es/~ezpeleta/COMPI
http://www.ii.uam.es/~alfonsec
Compiladores: Conceptos Fundamentales. B. Teufel, S. Schmidt, T. Teufel.
Addison Wesley Iberoamericana.

MANUEL DE JESUS CRUZ PORTELA 19

Вам также может понравиться