• Domingo 19 de Mayo de 2024, 01:43

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - george-cr8

Páginas: [1]
1
Pascal / Compilador De Expresion Postfija
« en: Martes 13 de Junio de 2006, 22:27 »
:scream:
Espero su ayuda con este codigo, es mi proyecto final y es para mañana, lo necesito pasar a pascal, pero no tengo ni idea, espero su ayuda pronto gracias:

'Variables globales
Dim cad As String
Dim ensamblador As String
Dim op1 As String
Dim op2 As String
Dim cod_in As String
Dim salto As String
Dim pila(0 To 12) As String
Dim pila_aux(0 To 12) As String
Dim num_op As Integer
Dim tope As Integer
Dim dato As String
Dim hab As Byte

'Entrada de la expresión posfija
Private Sub Command1_Click()
cad = InputBox("expresion posfija")
ex_pos.Text = cad
End Sub

Private Sub Command2_Click()
Dim auxilia As String
Dim operando As String
Dim apuntador As Integer
salto = Chr(13) & Chr(10)
tope = 0
op1 = 0
op2 = 0
num_op = 1
dato = 0
apuntador = 1

While apuntador < Len(cad)

  For apuntador = 1 To Len(cad) + 1

  cod_int.Text = op1 & salto & op2 & salto & cod_in & salto

   auxilia = Mid(cad, apuntador, 1) 'obtiene el contenido dentro de la
cadena

   If auxilia <> "+" And auxilia <> "-" And auxilia <> "*" And auxilia <>
"/" Then
    dato = auxilia
    meter (dato)

   Else
    operando = auxilia
    op2 = sacar()
    op1 = sacar()

    If num_op = 1 Or num_op = 2 Then
     cod_in = "t" & num_op & "=" & op1 & operando & op2
     meter (cod_in)
     hab = 1
    Else

     If Len(op2) < 3 Then
      cod_in = "t" & num_op & "=" & "t" & num_op - 1 & operando & " " & op2
      meter (cod_in)

     Else
      cod_in = "t" & num_op & "=" & "t" & num_op - 2 & operando & " " & "t"
& num_op - 1 & salto
      meter (cod_in)

     End If
    hab = 2

    End If
   num_op = num_op + 1
    Print salto & salto & cod_in
    Print salto & ensamblador
   End If

  Next apuntador
Wend
End Sub

'Sacar los elementos contenidos en la pila
Public Function sacar() As String
If tope >= 1 Then
  tope = tope - 1
  sacar = pila(tope)
End If
End Function

Public Function meter(dato) As Integer
pila(tope) = dato
tope = tope + 1
End Function

Private Sub Command4_Click()
End
End Sub

Private Sub Command3_Click As String
Dim apunta As Integer
Dim caracter As String
Dim operacion As String
Dim signo As String
Dim cuenta As String
Dim apunta_aux As Integer
apunta_aux = 0
cuenta = 0
apunta = 1
For apunta = 1 To Len(cod_in)
  caracter = Mid(cod_in, apunta, 1)
  If caracter = "=" Then
   If hab = 1 Then
    cuenta = Mid(cod_in, apunta + 1, 1)
   Else
    cuenta = Mid(cod_in, apunta + 1, 2)
   End If
   For apunta_aux = apuntador To Len(cod_in)
    operacion = Mid(cod_in, apunta_aux + 1, 1)
    If operacion = "+" Then
     signo = "ADD"
    ElseIf operacion = "-" Then
     signo = "SUB"
    ElseIf operacion = "*" Then
     signo = "MUL"
    ElseIf operacion = "/" Then
     signo = "DIV"
    End If
   Next apunta_aux
   If hab = 1 Then
    ensamblador = "LDA" & " " & op1 & salto & signo & " " & op2 & salto &
"STA" & " " & "t" & num_op - 1 & salto
   Else
    ensamblador = "LDA" & " " & op1 & signo & " " & op2 & salto & "STA" & "
" & "t" & num_op - 1 & salto
   End If
   ensam.Text = ensamblador
  End If
End Sub

ESPERO SU AYUDA GRACIAS
Este es mi correo:
george_rf8@hotmail.com
 B)  :rolleyes:  :alien:

2
Pascal / Ayuda-compilador De Expresion Postfija
« en: Martes 13 de Junio de 2006, 22:20 »
Espero que me ayuden con este programa es lo que he podido hacer.
hola, necesito un programa que dada una expresion posfija me genere el codigo intermedio, es decir, que sea un "compilador de expresion posfija"
Por ejemplo, que al dar la notacion en modo posfije la evalue mediante una pila y despues genere el codigo intermedio y la pase a la notacion original. Y despues pasarlo a codigo en ensamblador, si es posible que me puedan ayudar en lo primero, esto es lo que tengo.Ojala me puedan ayudar, puede ser en pascal o en c++ (Borland C++)
Esto es lo que he hecho:

While posfija[apuntador]<> " do
Begin
if(posfija[apuntador]<>'*')and
(posfija[apuntador]<>'-')and
( <>'+')then
meter(posfija[apuntador])

else
op2:=sacar;
op1:=sacar;
numoper:=numoper+1;
str(numoper,cad1);
codInt [numoper]:='t'+cad1+':='op1+posfija[apuntador]+op2+';';
end;
apunatdor:=apuntador+1;
end;

ESPERO SU AYUDA GRACIAS
Este es mi correo:
jorge_rfcruzeiro8@hotmail.com

Páginas: [1]