0% found this document useful (0 votes)
20 views5 pages

Codigo

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views5 pages

Codigo

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

Module Module1

Sub Main()

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

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
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
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 "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 & " :")
Console.WriteLine(" no se puede poner un
operador depues de un operador")
h = 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
Console.WriteLine(" ERROR EN EL CARACTER "
& i & " :")
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(" ")
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

You might also like