Automata en Visual Basic .Net

Tenemos el siguiente diagrama de estados:


El código Visual Basic Sería el siguiente:

Public Class Automata

    Dim contador As Integer = 0
    Dim caracter() As Char
    Dim cadena As String
    Dim aceptado As Boolean

    Public Sub New()

        Console.Write("Introduce la cadena a evaluar: ")
        cadena = Console.ReadLine()
        caracter = cadena.ToCharArray
        inicio()
        If (aceptado) Then
            Console.Write("Cadena aceptada")
        Else
            Console.Write("Cadena no aceptada")
        End If
        Console.ReadLine()

    End Sub

    Public Sub inicio()

        aceptado = False
        contador = 0
        q0()

    End Sub

    Public Sub q0()

        Console.WriteLine(String.Format("Estado: q0"))
        If (contador < cadena.Length) Then
            If (caracter(contador) = "a") Then
                contador += 1
                q0()
            ElseIf caracter(contador) = "b" Then
                contador += 1
                q1()
            End If
        End If

    End Sub

    Public Sub q1()
        Console.WriteLine(String.Format("Estado: q1"))
        If (contador < cadena.Length) Then
            If (caracter(contador) = "a") Then
                contador += 1
                q1()
            ElseIf caracter(contador) = "b" Then
                contador += 1
                q2()
            End If
        End If
    End Sub

    Public Sub q2()
        Console.WriteLine(String.Format("Estado: q2"))
        If (contador < cadena.Length) Then
            If (caracter(contador) = "a") Then
                contador += 1
                q2()
            ElseIf caracter(contador) = "b" Then
                contador += 1
                q3()
            End If
        End If
    End Sub

    Public Sub q3()
        Console.WriteLine(String.Format("Estado: q3 - Aceptado"))
        aceptado = True
        If (contador < cadena.Length) Then
            If (caracter(contador) = "a") Then
                contador += 1
                q3()
            ElseIf caracter(contador) = "b" Then
                contador += 1
                qError()
            End If
        End If
    End Sub

    Public Sub qError()
        Console.WriteLine(String.Format("Error"))
        aceptado = False
        Return
    End Sub

End Class

1 comentario: