You are on page 1of 3

Gram�tica el analizador

<exp> --> <exp><op><exp>


<exp> --> (<exp>)
<exp> --> -<exp>
<exp> --> <num>|<var>
<num> --> 1|2|3|4|5|6|7|8|9|0
<var> --> <letra>|<letra><num>
<letra> --> a|b|�|z
<op> --> +|-|*|/|^|=

//EMPIEZA LA COMPILACION EN VISUAL BASIC//

Module Module1

Structure token
Dim expr As String
Dim op As String
Dim num As String
Dim par As String

End Structure

Sub Main()
Console.WriteLine("UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN")
Console.WriteLine("Analizador L�xico y Sint�ctico")

Console.WriteLine("Reglas para utilizar")


Console.WriteLine("1.- <expr>=<expr><op><expr>")
Console.WriteLine("2.- (<expr>)")
Console.WriteLine("3.- -<expr>")
Console.WriteLine("4.- <expr>=<num>")
Console.WriteLine("5.- <num>=1,2,3,4,5,6,7,8,9")
Console.WriteLine("6.- <expr>=<op>")
Console.WriteLine("7.- <op>=+,*,/,^,-")
Console.WriteLine("8.- <letra>=a|b|...|z ")
Console.WriteLine("Ingrese la expresi�n a Analizar :")

Dim k As Integer
Dim h As Integer
Dim myString As String = Console.ReadLine
Dim myChar As String
Dim TestLen As Integer = Len(myString)
Dim exp(TestLen) As token
Dim i As Integer

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 = "op"
Console.WriteLine("<" & exp(i).op & "," & 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" Or myChar = "m" Or myChar = "n" Or
myChar = "o" Or myChar = "p" Or myChar = "q" Or myChar = "r" Or myChar = "s" Or
myChar = "t" Or myChar = "v" Or myChar = "w" Or myChar = "x" Or myChar = "y" Or
myChar = "z" Then

exp(i).expr = "expr"
Console.WriteLine("<" & exp(i).expr & "," & 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 = "num"
Console.WriteLine("<" & exp(i).num & "," & myChar & ">")

ElseIf myChar = "(" Then


exp(i).par = "pari"
Console.WriteLine("<" & exp(i).par & "," & myChar & ">")
ElseIf myChar = ")" Then
exp(i).par = "parf"
Console.WriteLine("<" & exp(i).par & "," & myChar & ">")
Else
Console.WriteLine(myChar & " token no reconocido ")
End If
Next

'sintactico

k = 0
h = TestLen + 1000
While k <= TestLen - 1
If exp(k).par = "pari" Then
While exp(k).par <> "parf"
k = k + 1
If exp(k).expr = "expr" Then
k = k + 1
If exp(k).par = "parf" Then

Else
If exp(k).op = "op" Then

Else
Console.WriteLine(" Error en la expresi�n, se
esperaba un <op>, no cumple con la regla 1 o 4")
k = h
End If
End If
Else
Console.WriteLine(" Error en la expresi�n, se esperaba una
<expr>, no cumple con al regla 1")
k = h
End If

End While
k = k + 1
Else
If exp(k).op = "op" Then
k = k + 1
If exp(k).par = "pari" Then
While exp(k).par <> "parf"
k = k + 1
If exp(k).expr = "expr" Then
k = k + 1
If exp(k).par = "parf" Then
Else
If exp(k).op = "op" Then
Else
Console.WriteLine(" Error en la expresi�n,
se esperaba un <op>, no cumple con la regla 1 o 4 ")
k = h
End If
End If
Else
Console.WriteLine(" Error en la expresi�n, se
esperaba una <expr>, no cumple con al regla 1")
k = h
End If
End While
k = k + 1
Else
If exp(k).expr = "expr" Then
k = k + 1
Else
Console.WriteLine(" Error en la expresi�n, se esperaba
una <expr>, no cumple con al regla 1 o 4 ")
k = h
End If
End If
Else
If exp(k).expr = "expr" Then
k = k + 1
Else
Console.WriteLine(" Error en la expresi�n, se esperaba una
<expr>, no cumple con al regla 1 o 4 ")
k = h
End If

End If
End If

End While
If k > TestLen - 1 And k <> h Then
Console.WriteLine(" Expresi�n ingresada correctamente ")
End If

Dim expresion As String = Console.ReadLine

End Sub

End Module

You might also like