Você está na página 1de 8

ANALIZADOR LEXICO

Y SINTACTICO
MANUEL DE JESUS CRUZ PORTELA
CODIGO
Dim myString As String = Console.ReadLine
DONDE SE GUARDARA TODA LA EXPRESION ALMACENADA

Dim TestLen As Integer = Len(myString)


ESTA EXPRESIN NOS ALMACENARA LA LONGITUD

Dim exp(TestLen) As String


UNA CADENA DE CARACTERES Y TENDR EL TAMAO DE TESTLEN
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

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(" ")

Console.WriteLine(" EXPRESION ANALIZADA LEXCAMENTE :")


Console.Write(" ")

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.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(" ")

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
End If
End If
End If
If h = 1 Then
Console.WriteLine(" NO MUESTRA ERRORES")
End If
Console.WriteLine(" ")
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

Você também pode gostar