Dim lineade5palabras As Integer 'Para evaluar si hubo línea de asignación y ver si se ha utilizado variable sin que antes haya sido declarada.
Dim ambiguedaddeoperadores As Integer
Dim variableenteraencontradaenlaasignacion As Integer 'Se le pondrá el valor de 1 a esta variable cuando en una asignación se estén utilizando variables de tipo entero, es decir variables que se hayan declarado como enteras.
Dim variablecadenaencontradaenlaasignacion As Integer 'Se le pondrá el valor de 1 a esta variable cuando en una asignación se estén utilizando variables de tipo cadena, es decir variables que se hayan declarado como cadena.
Dim cadenavariabledeclaradasiono1 As Integer
Dim cadenavariabledeclaradasiono2 As Integer
Randomize() 'Inicializa el generador de números random.
Dim value As Integer = CInt(Int((6 * Rnd()) + 1)) 'Genera un número random entre 1 y 6. Esto se ocupará más adelante para darle colores aleatorios al RichTextBox1.Text y al RichTextBox2.Text.
concatenardeclaraciondevariablesenteras = "var "
concatenardeclaraciondevariablescadena = ""
numeroarreglovariablesenteras = 1
numeroarreglovariablescadena = 1
enternumero = 1
palabra = ""
numero = 1
cadena = LCase(Trim(RichTextBox1.Text))
longituddecadena = Len(RichTextBox1.Text)
For i As Integer = 1 To longituddecadena
caracter = Mid(cadena, i, 1) 'La variable caracter evalúa caracter por caracter desde el primero hasta el último.
If caracter = " " Or caracter = Chr(10) Then 'Si el caracter que se está evaluando es un espacio en blanco o un enter, entonces tomamos eso como parámetro para evaluar si lo que sigue es otro espacio en blanco, y si no fuera así, se concluye que ya hay una palabra.
caractersiguiente = Mid(cadena, i + 1, 1) 'variable que evalúa lo que hay después del carácter evaluado por el for, para saber si hay dos o más espacios juntos y no tomarlos en cuenta como palabra.
If caractersiguiente <> " " And caractersiguiente <> Chr(10) And caractersiguiente <> Chr(13) Then 'Osea que NO hay dos o más espacios en blanco juntos.
contador = contador + 1 'El CONTADOR DE PALABRAS incrementa en uno hasta que lo que hay después de un espacio en blanco ya no es otro espacio en blanco, sino que una letra.
otrocontador = otrocontador + 1 'No se está trabajando con esto.
End If
End If
If caracter <> " " And caracter <> Chr(10) Then
palabra = palabra + caracter 'La variable palabra almacena palabras completas.
arreglo(numero) = palabra 'AQUI SE METEN PALABRAS A CADA ELEMENTO DEL ARREGLO DE PALABRAS. La variable numero es el número de elemento del arreglo.
Else
If caractersiguiente <> " " And caractersiguiente <> Chr(10) And caractersiguiente <> "" Then
palabra = "" 'Palabra vuelve a valer nada porque terminó una palabra, y hay que comenzar de cero para almacenar otra nueva palabra.
numero = numero + 1 'Aumenta para que el elemento del arreglo cambie de número porque se quiere almacenar una siguiente o una nueva palabra.
End If
End If
Next
numerodepalabras = contador + 1 'Almacena el número total de palabras que hay en el RichTextBox.Text
For i As Integer = 1 To numerodepalabras 'Este For sirve exclusivamente para capturar las variables de tipo entero, pero no sirve para cambiar palabras, sino que eso lo hace el For que viene después.
If arreglo(i) = "leer" Or arreglo(i) = "leers" Then
arreglovariablesenteras(numeroarreglovariablesenteras) = Strings.Right(Strings.Left(arreglo(i + 1), Strings.Len(arreglo(i + 1)) – 2), Strings.Len(arreglo(i + 1)) – 3)
contadordevariablesenteras = contadordevariablesenteras + 1
numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1
Else
If arreglo(i) = "leerl" Or arreglo(i) = "leerls" Then
arreglovariablescadena(numeroarreglovariablescadena) = Strings.Right(Strings.Left(arreglo(i + 1), Strings.Len(arreglo(i + 1)) – 2), Strings.Len(arreglo(i + 1)) – 3) 'Tomando la variable sin incluir el punto y coma final ni el paréntesis de apertura ni de cierre.
contadordevariablescadena = contadordevariablescadena + 1
numeroarreglovariablescadena = numeroarreglovariablescadena + 1
End If
End If
Next
For i As Integer = 1 To numero 'Todo lo que se hace dentro de este For es para cambiar el orden de asignación, pues el niño pone x + 3 guardarlo_en x; y el programa debe generar x = x + 3;.
contadordepalabrasporlinea = contadordepalabrasporlinea + 1
If arreglo(i) = "inicio" Or arreglo(i) = "entonces" Or arreglo(i) = "hacer" Or arreglo(i) = "de_lo_contrario" Or Strings.Right(arreglo(i), 1) = ";" Then 'Cualquiera de estos casos se daría con una palabra que marca el final de una línea.
If Strings.Right(arreglo(i), 1) = ";" Then
If contadordepalabrasporlinea = 5 Then 'Porque en x + 3 guardarlo_en x; hay 5 palabras, y se cambiará mediante lo que hay dentro del if a x = x + 3;
lineade5palabras = 1 'Para evaluar si hubo línea de asignación y ver si se ha utilizado variable sin que antes haya sido declarada.
provisional1 = arreglo(i – 4)
provisional2 = arreglo(i – 3)
provisional3 = arreglo(i – 2)
arreglo(i – 4) = Strings.Right(Strings.Left(arreglo(i), Strings.Len(arreglo(i)) – 1), Strings.Len(arreglo(i)) – 1) 'Con esto se cambia de x + 3 guardarlo_en x; a x = x + 3, cambiando el elemento x; por x en otra posición del arreglo.
arreglo(i – 3) = arreglo(i – 1)
arreglo(i – 2) = provisional1
arreglo(i – 1) = provisional2
arreglo(i) = provisional3 & ";" 'Como se ha cambiado de la forma x + 3 guardarlo_en x; a la forma x = x + 3;, entonces ya con los arreglos modificados hay que poner un punto y coma al final del 3 para tener x = x + 3; y ya queda todo listo.
For a As Integer = 1 To contadordevariablesenteras
If arreglo(i – 2) = arreglovariablesenteras(a) Then 'La a irá cambiando valor desde 1 hasta contadordevariablescadena, que contiene el número de elemento de la última variable de tipo entero almacenada en el arreglo de variables enteras.
variableenteraencontradaenlaasignacion = 1 'Con darle el valor de 1 se sabrá que efectivamente en la asignación hay una variable entera.
End If
If provisional3 = arreglovariablesenteras(a) Then 'No se le pone arreglo(i) sino que provisional3, porque a estas alturas ya llevaría concatenado un punto y coma al final.
variableenteraencontradaenlaasignacion = 1
End If
Next
For b As Integer = 1 To contadordevariablescadena
If arreglo(i – 2) = arreglovariablescadena(b) Then 'arreglo(i-2) es lo mismo que provisional1
variablecadenaencontradaenlaasignacion = 1
End If
If provisional3 = arreglovariablescadena(b) Then 'No se le pone arreglo(i) sino que provisional3, porque a estas alturas ya llevaría concatenado un punto y coma al final.
variablecadenaencontradaenlaasignacion = 1
End If
Next
If variableenteraencontradaenlaasignacion = 1 And variablecadenaencontradaenlaasignacion <> 1 Then
arreglovariablesenteras(numeroarreglovariablesenteras) = arreglo(i – 4)
contadordevariablesenteras = contadordevariablesenteras + 1
numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1
End If
If variablecadenaencontradaenlaasignacion = 1 And variableenteraencontradaenlaasignacion <> 1 Then
If (Val(provisional1) <> 0) Or (Val(provisional3) <> 0) Then
variableenteraencontradaenlaasignacion = 1
variablecadenaencontradaenlaasignacion = 1
Else
arreglovariablescadena(numeroarreglovariablescadena) = arreglo(i – 4)
contadordevariablescadena = contadordevariablescadena + 1
numeroarreglovariablescadena = numeroarreglovariablescadena + 1
End If
End If
'El For que aparece a continuación se usa también dentro del If que aparece justo después del Next que corresponde a este For. Esto debido a que este proceso debe realizarse cuando no se han inicializado variables con leer (variable), así como también cuando sí se ha hecho.
For ii As Integer = 1 To numeroarreglovariablesenteras 'Ciclo para determinar si las variables utilizadas dentro de una asignación ya han sido inicializadas o se están utilizando sin haberlas antes declarado o sin haberles dado valores.
If (provisional1 = arreglovariablesenteras(ii)) Or (Val(provisional1) <> 0) Then 'De x + y guardarlo_en a; provisional1 almacenaría x. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.
variabledeclaradasiono1 = 1 'Cuando variabledeclaradasiono1 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.
End If
If provisional3 = arreglovariablesenteras(ii) Or (Val(provisional3) <> 0) Then 'val(provisional3) <> 0 es para que si está poniendo un número, entonces el val(provisional3) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. 'De x + y guardarlo_en a; provisional3 almacenaría y. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.
variabledeclaradasiono2 = 1 'Cuando variabledeclaradasiono2 valga 1, entonces las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.
End If
Next
'El For que aparece a continuación se usa también dentro del If que aparece justo después del Next que corresponde a este For. Esto debido a que este proceso debe realizarse cuando no se han inicializado variables con leer (variable), así como también cuando sí se ha hecho.
For ii As Integer = 1 To numeroarreglovariablescadena
If (provisional1 = arreglovariablescadena(ii)) Then 'val(provisional1) <> 0 es para que si está poniendo un número, entonces el val(provisional1) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. 'De x + y guardarlo_en a; provisional1 almacenaría x. Con esto se está comparando con cada una de las variables cadena almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.
cadenavariabledeclaradasiono1 = 1 'Cuando cadenavariabledeclaradasiono1 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.
End If
If provisional3 = arreglovariablescadena(ii) Then 'De x + y guardarlo_en a; provisional3 almacenaría y. Con esto se está comparando con cada una de las variables cadena almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.
cadenavariabledeclaradasiono2 = 1 'Cuando cadenavariabledeclaradasiono2 valga 1 , entonces las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.
End If
Next
If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then
arreglovariablesenteras(numeroarreglovariablesenteras) = arreglo(i – 4)
contadordevariablesenteras = contadordevariablesenteras + 1
For ii As Integer = 1 To numeroarreglovariablesenteras 'Ciclo para determinar si las variables utilizadas dentro de una asignación ya han sido inicializadas o se están utilizando sin haberlas antes declarado o sin haberles dado valores.
If (provisional1 = arreglovariablesenteras(ii)) Or (Val(provisional1) <> 0) Then 'val(provisional1) <> 0 es para que si está poniendo un número, entonces el val(provisional1) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. De x + y guardarlo_en a; provisional1 almacenaría x. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.
variabledeclaradasiono1 = 1 'Cuando variabledeclaradasiono1 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.
End If
If (provisional3 = arreglovariablesenteras(ii)) Or (Val(provisional3) <> 0) Then 'val(provisional3) <> 0 es para que si está poniendo un número, entonces el val(provisional3) dará el número, pero si es una letra o una cadena, el val(provisional1) dará cero. Esto para que un número no lo interprete como una variable no declarada. De x + y guardarlo_en a; provisional3 almacenaría y. Con esto se está comparando con cada una de las variables enteras almacenadas en el arreglo para ver si ya se ha inicializado con leer (variable) ó dándole valores.
variabledeclaradasiono2 = 1 'Cuando variabledeclaradasiono2 valga 1, entoncees las variables utilizadas en la asignación ya han sido declaradas. De lo contrario no han sido declaradas y se mandará un mensaje más adelante en el código donde se hará saber que se está utilizando una variable sin haberla declarado antes.
End If
Next
numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1
End If
End If
If (contadordepalabrasporlinea = 3) And (arreglo(i – 1) = "guardarlo_en") Then 'Porque en 3 guardarlo_en x; hay 5 palabras, y se cambiará mediante lo que hay dentro del if a x = 3;. Se le pone también And (arreglo(i – 2) = "guardarlo_en") porque de lo contrario aun en los if, cuando hayan líneas de 3 palabras, tomaría las condiciones como si fueran asignaciones.
provisional1 = arreglo(i – 2)
arreglo(i – 2) = Strings.Right(Strings.Left(arreglo(i), Strings.Len(arreglo(i)) – 1), Strings.Len(arreglo(i)) – 1) 'Con esto se cambia 3 guardarlo_en x; a x = 3;, cambiando el elemento x; por x en otra posición del arreglo.
arreglo(i – 1) = arreglo(i – 1)
arreglo(i) = provisional1 & ";" 'Como se ha cambiado de la forma 3 guardarlo_en x; a la forma x = 3;, entonces ya con los arreglos modificados hay que poner un punto y como al final del 3 para tener x = 3; y ya queda todo listo.
arreglovariablesenteras(numeroarreglovariablesenteras) = arreglo(i – 2)
contadordevariablesenteras = contadordevariablesenteras + 1
numeroarreglovariablesenteras = numeroarreglovariablesenteras + 1
End If
End If
If arreglo(i + 1) <> "" Then
contadordepalabrasporlinea = 0 'Porque ha terminado una línea y el contador de palabras por línea debe comenzar de cero nuevamente debido a que se comenzará con una nueva línea.
End If
End If
Next
For i As Integer = 1 To contadordevariablesenteras
If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then 'El if acá sirve para que imprima la sangría cuando es necesario.
concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras & arreglovariablesenteras(i) & " " & ":" & " " & "integer;" & Chr(10)
Else
If i <> contadordevariablesenteras Then 'Si no ha llegado a la última variable del arreglo, que imprima todavía espacios de sangría al final para la siguiente variable que aparecerá declarada.
concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras & arreglovariablesenteras(i) & " " & ":" & " " & "integer;" & Chr(10) & " "
Else
concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras & arreglovariablesenteras(i) & " " & ":" & " " & "integer;" & Chr(10) 'Aquí ya no imprime los espacios de sangría, pues de lo contrario el begin aparecería con sangría en la siguiente línea.
End If
End If
Next
If arreglovariablescadena(1) <> "" Then 'Para que le de la sangría a la primera variable string que se declare, pues de lo contrario aparecería sin sangría.
concatenardeclaraciondevariablesenteras = concatenardeclaraciondevariablesenteras + " "
End If
For i As Integer = 1 To contadordevariablescadena
If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then 'El if acá sirve para que imprima la sangría cuando es necesario.
concatenardeclaraciondevariablescadena = concatenardeclaraciondevariablescadena & arreglovariablescadena(i) & " " & ":" & " " & "string;" & Chr(10)
Else
If i <> contadordevariablescadena Then 'Si no ha llegado a la última variable del arreglo, que imprima todavía espacios de sangría al final para la siguiente variable que aparecerá declarada.
concatenardeclaraciondevariablescadena = concatenardeclaraciondevariablescadena & arreglovariablescadena(i) & " " & ":" & " " & "string;" & Chr(10) & " "
Else
concatenardeclaraciondevariablescadena = concatenardeclaraciondevariablescadena & arreglovariablescadena(i) & " " & ":" & " " & "string;" & Chr(10) 'Aquí ya no imprime los espacios de sangría, pues de lo contrario el begin aparecería con sangráa en la siguiente línea.
End If
End If
Next
programa = ""
programa = "program lenguaje_para_ninos (input, output);" & Chr(10)
programa = programa & concatenardeclaraciondevariablesenteras & concatenardeclaraciondevariablescadena
For i As Integer = 1 To numerodepalabras 'Teniendo ya el arreglo de palabras, comenzamos a analizar palabra por palabra para saber si se trata de palabras reservadas o no, e ir haciendo los cambios respectivos para transformar a código Pascal.
If arreglo(i) = "inicio" Then 'inicio es el nombre de una palabra reservada.
arreglo(i) = "begin" 'begin es el nombre de la palabra cambiada.
End If
If arreglo(i) = "fin" Then
arreglo(i) = "end"
End If
If arreglo(i) = "leer" Then
arreglo(i) = "read"
End If
If arreglo(i) = "mostrar" Then
arreglo(i) = "write"
End If
If arreglo(i) = "mostrars" Then
arreglo(i) = "writeln"
End If
If arreglo(i) = "leers" Then
arreglo(i) = "readln"
End If
If arreglo(i) = "si" Then
arreglo(i) = "if"
End If
If arreglo(i) = "entonces" Then
arreglo(i) = "then"
End If
If arreglo(i) = "guardarlo_en" Then
arreglo(i) = ":="
End If
If arreglo(i) = "repetir" Then
arreglo(i) = "for"
End If
If arreglo(i) = "desde_aqui" Then
arreglo(i) = ":="
End If
If arreglo(i) = "hasta_aqui" Then
arreglo(i) = "to"
End If
If arreglo(i) = "hacer" Then
arreglo(i) = "do"
End If
If arreglo(i) = "de_lo_contrario" Then
arreglo(i) = "else"
End If
If arreglo(i) = "y_si" Then
arreglo(i) = "and"
End If
If arreglo(i) = "o_si" Then
arreglo(i) = "or"
End If
If arreglo(i) = "fin_si" Then
arreglo(i) = ";"
End If
If arreglo(i) = "leerl" Then
arreglo(i) = "read"
End If
If arreglo(i) = "leerls" Then
arreglo(i) = "readln"
End If
If arreglo(i) = "mostrarl" Then
arreglo(i) = "write"
End If
If arreglo(i) = "mostrarls" Then
arreglo(i) = "writeln"
End If
If arreglo(i) = "=" Then
arreglo(i) = ":="
End If
If arreglo(i) = "fin_repetir" Then
arreglo(i) = "end;"
End If
If Strings.Right(arreglo(i), 1) = ";" Or arreglo(i) = "begin" Or arreglo(i) = "then" Or arreglo(i) = "do" Or arreglo(i) = "end" Then
programa = programa + arreglo(i) + Chr(10) 'La variable programa es la que contiene lo que se imprimirá al final de todo.
Else
programa = programa + arreglo(i) + " " 'La variable programa es la que contiene lo que se imprimirá al final de todo.
End If
Next
If value = 1 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 1 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.
RichTextBox1.ForeColor = Color.Green
RichTextBox2.ForeColor = Color.Blue
End If
If value = 2 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 2 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.
RichTextBox1.ForeColor = Color.Purple
RichTextBox2.ForeColor = Color.Green
End If
If value = 3 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 3 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.
RichTextBox1.ForeColor = Color.Blue
RichTextBox2.ForeColor = Color.Purple
End If
If value = 4 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 4 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.
RichTextBox1.ForeColor = Color.Purple
RichTextBox2.ForeColor = Color.Blue
End If
If value = 5 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 5 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.
RichTextBox1.ForeColor = Color.Red
RichTextBox2.ForeColor = Color.Blue
End If
If value = 6 Then 'value puede valer aleatoriamente entre 1 y 6. Si llega a valer 6 estos son los colores de la letra para el RichTextBox1 y para el RichTextBox2.
RichTextBox1.ForeColor = Color.Blue
RichTextBox2.ForeColor = Color.Red
End If
RichTextBox2.Text = programa
If arreglo(1) <> "begin" Then
RichTextBox2.Text = ""
MsgBox("Debe escribir 'inicio' para comenzar el programa", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
Else
If arreglo(numero) <> "end" Then 'arreglo(numero) sería la última palabra que escribió el niño, y se le pone también lo de arreglo(numero-1) por si el niño después de haber puesto 'fin' le da uno o más enter, independientemente de los espacios si le da o no.
RichTextBox2.Text = ""
MsgBox("Debe escribir 'fin' para terminar el programa", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
Else
If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then
RichTextBox2.Text = ""
MsgBox("No ha utilizado ninguna variable en el programa", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
Else
If arreglo(numero – 1) = arreglo(numero) Then 'Para que solamente se escriba 'fin' una vez para finalizar el programa.
If arreglo(numero) = "end" Then
RichTextBox2.Text = ""
MsgBox("Para terminar el programa debe escribir 'fin' solamente una vez", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
End If
End If
End If
End If
End If
If (cadenavariabledeclaradasiono1 <> 1 And cadenavariabledeclaradasiono2 <> 1) Then 'Significa que no se ha declarado ninguna variable tipo cadena, entonces se procede a evaluar si se han usado variables cadena no declaradas.
If (variabledeclaradasiono1 <> 1 Or variabledeclaradasiono2 <> 1) And lineade5palabras = 1 And (arreglo(2) <> "read") And (arreglo(2) <> "readln") Then 'Porque si no es igual a uno la variable lineadecincopalabras significa que no hubo ninguna asignación, entonces variabledeclaradasiono1 siempre sería diferente de uno y por lo tanto todo el tiempo se estaría diciendo que se ha utilizado una variable sin haberla declarado, incluso cuando ni siquiera se haya hecho una asignación. Por lo tanto hay dos condiciones en este if para que se llegue a decir que se ha utilizado una variable sin haberla asignado antes. Si arreglo(2) es diferente de "leer", se ve que no se ha declarado variable alguna.
'If arreglovariablesenteras(1) = "" And arreglovariablescadena(1) = "" Then
RichTextBox2.Text = ""
MsgBox("Está utilizando una variable que no ha sido inicializada", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
'End If
End If
End If
If (variabledeclaradasiono1 <> 1 And variabledeclaradasiono2 <> 1) Then 'Significa que no se ha declarado ninguna variable tipo entero, entonces se procede a evaluar si se han usado variables enteras no declarados.
If (cadenavariabledeclaradasiono1 <> 1 Or cadenavariabledeclaradasiono2 <> 1) And lineade5palabras = 1 And (arreglo(2) <> "read") And (arreglo(2) <> "readln") Then 'Porque si no es igual a uno la variable lineadecincopalabras significa que no hubo ninguna asignación, entonces variabledeclaradasiono1 siempre sería diferente de uno y por lo tanto todo el tiempo se estaría diciendo que se ha utilizado una variable sin haberla declarado, incluso cuando ni siquiera se haya hecho una asignación. Por lo tanto hay dos condiciones en este if para que se llegue a decir que se ha utilizado una variable sin haberla asignado antes.
RichTextBox2.Text = ""
MsgBox("Está utilizando una variable que no ha sido inicializada", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
End If
End If
If variableenteraencontradaenlaasignacion = 1 And variablecadenaencontradaenlaasignacion = 1 Then
MsgBox("No se puede operar una letra con un número", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
RichTextBox2.Text = ""
End If
For i As Integer = 1 To contadordevariablesenteras 'Este For sirve para comparar cada una de las variables de tipo entero con cada una de las variables de tipo cadena. Si hay una o más variables que aparecen tanto en el arreglo de variables enteras como también en el arreglo de variables cadena, significa que hay ambiguedad de operadores, es decir que se ha declarado o se ha usado una misma variable tanto como cadena como también como entero, y por eso se mandará mensaje para que se corrija esa cuestión.
For ii As Integer = 1 To contadordevariablescadena
If arreglovariablesenteras(i) = arreglovariablescadena(ii) Then
ambiguedaddeoperadores = 1 'Cuando ambiguedaddeoperadores valga uno, se está usando una misma variable como cadena y como entero a la vez. De lo contrario no.
End If
Next
Next
If ambiguedaddeoperadores = 1 Then
RichTextBox2.Text = ""
MsgBox("Una misma variable no puede ser usada como Número y como Letra al mismo tiempo", MsgBoxStyle.OkOnly, "Error")
RichTextBox1.Focus()
End If
Página anterior | Volver al principio del trabajo | Página siguiente |