Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 03-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Pedron,

Cita:
Empezado por Pedron
...no le he cambiado ningún dato a tu código que me mandaste y pues al momento de poner AX me da ese error (List Index Out of Bounds)...
Es correcto , es un error de frontera.

Revisa esta código:
Código Delphi [-]
 procedure TForm1.Button3Click(Sender: TObject);
 const
    RegAsm : Array[1..30] of string = ('AX','BX','CX','DX','AH','AL',
                                       'BH','BL','BP','CH','CL','CS',
                                       'DH','DL','DI','DS', 'GS', 'IP',
                                       'SI','SP','SS', 'ES',
                                       'EAX','EBP','EBX','ECX',
                                       'EDI','EDX','EIP','ESIFE');
                                       
 var
  SL: TStringList;
    i, j, k : Integer;
    Token : String;
    AuxStr : String;
 
 begin
 
   SL := TStringList.Create;
 
   Memo2.Clear;
 
    for i := 0 to Memo1.Lines.Count - 1 do
    begin
 
       AuxStr := Memo1.Lines[i];
 
       for j := 1 to Length(AuxStr) do
       begin
          if (AuxStr[j] <> ' ') and (AuxStr[j] <> ',') then
             Token := Token + AuxStr[j]
          else
          begin
             SL.Add(Token);
             Token := EmptyStr;
          end
       end;
 
       SL.Add(Token);
       Token := EmptyStr;
 
       for j := SL.Count - 1 downto 0 do
          for k := High(RegAsm) downto Low(RegAsm) do
             if SL[j] = RegAsm[k] then
             begin
                SL.Delete(j);
                Break;
             end;   
 
       for j := 0 to SL.Count - 1 do
          Token := Token + SL[j] + ' ';
 
       Memo2.Lines.Add(Token);
       Token := EmptyStr;
 
       SL.Clear;
 
    end;
 
    SL.Free;
 
 end;
El código anterior en Delphi 7 bajo Windows 7 Professional x32, es la versión 2 del código propuesto en el Msg #16 que resuelve errores de frontera, funcionando correctamente según lo esperado con datos de prueba como se puede ver en la siguiente imagen:



Espero sea útil

Nelson.
Responder Con Cita
  #22  
Antiguo 03-05-2014
Pedron Pedron is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 10
Poder: 0
Pedron Va por buen camino
Clarooo que me fue util ahora si ya salio muchas gracias nlsgarcia

Ahora una ultima cosa ya para dejar esto por la paz habra una forma en la que pueda comparar varios arreglos a la vez con ese mismo codigo comparar 2 o mas arreglos y los datos que sean diferentes a esos arreglos pues mandarlos al memo2 no se si me de a entender jeje

si por ejemplo tengo 2 arreglos

Código Delphi [-]
RegAsm : Array[1..30] of string = ('AX','BX','CX','DX','AH','AL',
                                       'BH','BL','BP','CH','CL','CS',
                                       'DH','DL','DI','DS', 'GS', 'IP',
                                       'SI','SP','SS', 'ES',
                                       'EAX','EBP','EBX','ECX',
                                       'EDI','EDX','EIP','ESIFE');


 OpAsm : Array[1..36] of string = ('AND','BYTE','COMMENT','CON','DUP',
                                   'EQ','FAR','GE','GT','HIGH','LE',
                                   'LENGTH','LINE','LOW','LT','MASK',
                                   'MOD','NE','NEAR','NOT','NOTHING',
                                   'OFFSET','OR','PTR','SEG','SHL','SHORT',
                                   'SHR','SIZE','STACK','THIS','TYPE',
                                   'WHILE','WIDTH','WORD','XOR');

y pues que al poner este texto en el memo1

Código:
AX AND HOLA
solo me mande

Código:
HOLA
al memo2


saludos y muchas gracias!
Responder Con Cita
  #23  
Antiguo 04-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Pedron,

Cita:
Empezado por Pedron
...habrá una forma en la que pueda comparar varios arreglos a la vez con ese mismo código comparar 2 o mas arreglos y los datos que sean diferentes a esos arreglos pues mandarlos al Memo2...
Si es posible

Pregunto: ¿Cual es la finalidad de este trabajo?

Nelson.
Responder Con Cita
  #24  
Antiguo 04-05-2014
Pedron Pedron is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 10
Poder: 0
Pedron Va por buen camino
Es un analizador lexico y tengo que comprobar los errores lexicos de un lenguaje y en este caso lo estoy haciendo en lenguaje ensamblador.

el objetivo de tanta comparacion es hacer que me compare todos los arreglos osea todos los componentes del lenguaje ensamblador que esten en un memo1 y pues los valla separando por diferentes secciones mira te muestro una imagen para mejor entendimiento



y pues la separacion de datos ya la tengo lo que no puedo hacer es lo de los errores lexicos que te digo por ejemplo que si en vez de AX
escribo 'XA' en ninguna arreglo que yo tengo viene esa palabra 'XA' por lo tanto quiero que me la mande a la seccion de errores lexicos
pero tengo otro problema si yo creo una VARIABLE esas tampoco vienen en ningun arreglo porque esas tu les pones el nombre que gustes por lo tanto esas tambien las marcaria como error.

y pues lo que intento hacer al comparar todos los arreglos a la vez es eso mismo hacer que busque en el memoo1 y encuentre las palabras que no vienen en los arreglos y las mande al memo2 que serian los errores lexicos.

no se si me de a entender jeje
Imágenes Adjuntas
Tipo de Archivo: jpg Captura1.jpg (15,0 KB, 2 visitas)
Responder Con Cita
  #25  
Antiguo 04-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Pedron,

Cita:
Empezado por Pedron
...Es un analizador léxico...en lenguaje ensamblador...
Eso lo entiendo , la pregunta se refiere a si es un trabajo de universidad (Que universidad, Que cátedra, Que país) o de otro tipo.

Nota: La imagen es demasiado pequeña, ¿Puedes mejorarla?

Nelson.
Responder Con Cita
  #26  
Antiguo 04-05-2014
Pedron Pedron is offline
Miembro
NULL
 
Registrado: may 2014
Posts: 10
Poder: 0
Pedron Va por buen camino
Es un trabajo universitario soy de mexico estuido ing. en sistemas computacionales en el Instituto Tecnologico de Tepic para la materia de Programacion de Sistemas y claro aqui esta la imagen un poco mas grande

Archivos Adjuntos
Tipo de Archivo: rar cale1.rar (49,9 KB, 3 visitas)

Última edición por Casimiro Noteví fecha: 04-05-2014 a las 01:35:17.
Responder Con Cita
  #27  
Antiguo 04-05-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Pedron,

Cita:
Empezado por Pedron
...habrá una forma en la que pueda comparar varios arreglos a la vez con ese mismo código comparar 2 o mas arreglos y los datos que sean diferentes a esos arreglos pues mandarlos al Memo2...
Revisa este código
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const

  A1: Array[1..74] of String =  ('db','ALIGN','.ALPHA','ASSUME','.CODE','COMM','COMMENT',
                                 '.CONST','.CREF','.DATA','DB','DD','DF','DOSSEG','DQ',
                                 'DT','DW','ELSE','END','ENDIF','ENDM','ENDP','ENDS','EQU',
                                 '.ERRnn','EVEN','EXITM','EXTRN','.FARDATA','.FARDATA?',
                                 'GROUP','IF','IF1','IF2','IFB','IFDEF','IFDIF','IFE','IFIDN',
                                 'IFNB','IFNDEF','INCLUDE','INCLUDELIB','IRP','IRPC','LABEL',
                                 '.LALL','.LFCOND','.LIST','LOCAL','MACRO','.MODEL','NAME',
                                 'ORG','OUT','PAGE','PROC','PUBLIC','PURGE','.RADIX','RECORD',
                                 'REPT','.SALL','SEGMENT','.SEQ','.SFCOND','.STACK','STRUC',
                                 'SUBTTL','.TFCOND','TITLE','.XALL','.XCREF','.XLIST');

  A2 : Array[1..30] of String = ('AX','BX','CX','DX','AH','AL',
                                 'BH','BL','BP','CH','CL','CS',
                                 'DH','DL','DI','DS', 'GS', 'IP',
                                 'SI','SP','SS', 'ES',
                                 'EAX','EBP','EBX','ECX',
                                 'EDI','EDX','EIP','ESIFE');

  A3 : Array[1..36] of String = ('AND','BYTE','COMMENT','CON','DUP',
                                 'EQ','FAR','GE','GT','HIGH','LE',
                                 'LENGTH','LINE','LOW','LT','MASK',
                                 'MOD','NE','NEAR','NOT','NOTHING',
                                 'OFFSET','OR','PTR','SEG','SHL','SHORT',
                                 'SHR','SIZE','STACK','THIS','TYPE',
                                 'WHILE','WIDTH','WORD','XOR');

var
  Form1: TForm1;

implementation

{$R *.dfm}

function SelectElement(A1, A2, A3 : Array of String; InputList, OutPutList : TStrings) : Boolean;
var
   TokenList : TStringList;
   SelectList : TStringList;
   i, j, k : Integer;
   Token : String;
   AuxStr : String;

begin

   try

      TokenList := TStringList.Create;
      SelectList := TStringList.Create;

      for i := Low(A1) to High(A1) do
         SelectList.Add(A1[i]);

      for i := Low(A2) to High(A2) do
         SelectList.Add(A2[i]);

      for i := Low(A3) to High(A3) do
         SelectList.Add(A3[i]);

      for i := 0 to InputList.Count - 1 do
      begin

         AuxStr := InputList.Strings[i];

         for j := 1 to Length(AuxStr) do
         begin
            if (AuxStr[j] <> ' ') and (AuxStr[j] <> ',') then
               Token := Token + AuxStr[j]
            else
            begin
               TokenList.Add(Token);
               Token := EmptyStr;
            end
         end;

         TokenList.Add(Token);
         Token := EmptyStr;

         for j := TokenList.Count - 1 downto 0 do
            for k := SelectList.Count - 1 downto 0 do
               if TokenList[j] = SelectList.Strings[k] then
               begin
                  TokenList.Delete(j);
                  Break;
               end;

         for j := 0 to TokenList.Count - 1 do
            Token := Token + TokenList[j] + ' ';

         OutPutList.Add(Token);
         Token := EmptyStr;

         TokenList.Clear;

      end;

      TokenList.Free;
      SelectList.Free;

   except

      Result := False;
      Exit;

   end;
   
   Result := True;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
   Msg : String;
   
begin

   Memo2.Clear;

   if SelectElement(A1,A2,A3,Memo1.Lines, Memo2.Lines) then
   begin
      Msg := 'Análisis Sintáctico Concluido Satisfactoriamente';
      MessageDlg(Msg, mtInformation, [mbOK], 0)
   end
   else
   begin
      Msg := 'Error en Análisis Sintáctico';
      MessageDlg(Msg, mtError, [mbOK], 0)
   end

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, analiza por medio de una función de selección cada línea de TMemo1, las compara tipo Case Sensitive con un conjunto de arreglos y copia dicha línea a TMemo2 eliminando cualquier ocurrencia encontrada, como se muestra en la siguiente imagen:



Nota: En el ejemplo se utilizaron tres arreglos de comparación para análisis sintáctico, el código se puede expandir para n arreglos de comparación.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 04-05-2014 a las 02:10:14.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guardar datos en Base de Datos MySQL knnibal Conexión con bases de datos 6 23-06-2011 15:36:42
añadir un renglón a un dbgrid olybola Varios 8 07-06-2010 21:23:15
Ir al ultimo renglon en un StringGrid palets Varios 2 18-02-2009 22:11:59
Guardar en 1 base de datos SQL, datos procedentes de 2 tablas distintas adaypr C++ Builder 1 05-09-2006 11:56:33
agregar un renglón al dbgrid olybola Conexión con bases de datos 1 26-06-2003 20:58:03


La franja horaria es GMT +2. Ahora son las 18:56:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi