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
End Sub
Private Sub
TextBox4_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub
TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Me.Hide()
Form4.Show()
End Sub
Private Sub
ReglasDelLenguajeToolStripMenuItem_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
ReglasDelLenguajeToolStripMenuItem.Click
Me.Hide()
Form4.Show()
End Sub
Private Sub
EjemploIfToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
EjemploIfToolStripMenuItem.Click
RichTextBox1.Text = "inicio" & Chr(10) &
"leer (x);" & Chr(10)
& "si x = 2 entonces"
& Chr(10) & "3
guardarlo_en z;" & Chr(10) &
"fin_si" & Chr(10)
& "fin"
End Sub
Private Sub
EjemploForToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
EjemploForToolStripMenuItem.Click
RichTextBox1.Text = "inicio" & Chr(10) &
"repetir n desde_aqui 2 hasta_aqui 5
hacer" & Chr(10) & "b + 2 guardarlo_en b;" & Chr(10)
& "fin_repetir"
& Chr(10) & "fin"
End Sub
Private Sub
EjemploVariableNoDeclaradaToolStripMenuItem_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
EjemploVariableNoDeclaradaToolStripMenuItem.Click
RichTextBox1.Text = "inicio" & Chr(10) &
"x + y guardarlo_en x;" &
Chr(10) & "fin"
End Sub
Private Sub
EjemploVariableMalDeclaradaToolStripMenuItem_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
EjemploVariableMalDeclaradaToolStripMenuItem.Click
RichTextBox1.Text = "inicio" & Chr(10) &
"leer (x);" & Chr(10)
& "leerl (x);"
& Chr(10) & "fin"
End Sub
Private Sub
EjemploSumaLetraYNúmeroToolStripMenuItem_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
EjemploSumaLetraYNúmeroToolStripMenuItem.Click
RichTextBox1.Text = "inicio" & Chr(10) &
"leer (numero);" & Chr(10)
& "leerl (letra);"
& Chr(10) & "letra +
numero guardarlo_en variable;" & Chr(10)
& "fin"
End Sub
Private Sub
EjemploLetraGuardaNúmerosToolStripMenuItem_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
EjemploLetraGuardaNúmerosToolStripMenuItem.Click
RichTextBox1.Text = "inicio" & Chr(10) &
"leerl (a);" & Chr(10)
& "leerl (b);"
& Chr(10) & "a + 3
guardarlo_en b;" & Chr(10) &
"fin"
End Sub
Private Sub
AutoresToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
AutoresToolStripMenuItem.Click
Form7.Show()
End Sub
Private Sub
RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
End Class
Jaime Oswaldo Montoya Guzmán
Santa Ana, 24 de noviembre de 2006
Página anterior | Volver al principio del trabajo | Página siguiente |