Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Detectar errores lexicos en un memo (https://www.clubdelphi.com/foros/showthread.php?t=85765)

Mantixd 30-04-2014 00:17:54

Detectar errores lexicos en un memo
 
Buenas tardes, hace tiempo me ayudaron mucho en un problema que tuve al comparar arreglos con un memo, lo que pasa es que estoy haciendo un analizador lexico y pues estoy poniendo los identificadores las palabras reservadas etc. en arreglos y los estoy comparando con lo que esta escrito en el memo y pues si encuentra alguna palabra pues la pone en un listbox. pero en fin mi duda ahora es que si por ejemplo ( estoy haciendo el analizador para ensamblador ) si tengo "XA" en vez de "AX" me pinte esa palabra de rojo o me diga error pero aca va lo que se me complica.

En ensamblador estan las MACRO y pues a esas macro le tienes que poner un nombre el que tu quieras y pues por ejemplo si quiero poner una macro para crearla seria asi

Ejemplo MACRO

Donde "Ejemplo" es el nombre que le puse al macro, y pues mi idea para detectar errores seria comparar mis arreglos con el memo y si alguna palabra del memo no esta en alguno de los arreglos me la marque como error.
pero con este ejemplo que puse la palabra "Ejemplo" me la marcaria como error.

Supongo que lo que tengo que hacer es comparar renglon por renglon cada letra de cada palabra para ver donde esta el error o que si encuentra la palabra macro despues de una palabra desconocida que la tome como correcta, no se si me este dando a entender y pues espero y me puedan ayudar y pues si no me di a entender u ocupan que les muestre mi codigo para darse una idea mejor pues lo hago con mucho gusto de ante mano gracias :D

Mantixd 30-04-2014 08:04:54

Me explicare mejor
 
Código Delphi [-]
 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');


begin

   SL := TStringList.Create;

   ListBox1.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 := 0 to SL.Count - 1 do
         for k := Low(RegAsm) to High(RegAsm) do

            if UpperCase(SL[j]) = UpperCase(RegAsm[k]) then

               ListBox1.Items.Add(UpperCase(RegAsm[k]));
              

      SL.Clear;

   end;

   SL.Free;

En este codigo se muestra el arreglo que les mencione y el memo y el listbox, sencillamente lo que hace este programa es que si yo pongo los registros de ensamblador como se muestra en la imagen y le doy al boton analizar comparara el memo con el arreglo y lo mostrara en el listbox llamado registros

imageshack.com/a/img845/5014/l2r0.png

A lo que me referia es cuando escribo mal algun registro o algo me me lo mande a otro listbox que se llame errores o algo asi pero... ¿Como saber cual es error y cual no?, mi idea es por ejemplo.

Código Delphi [-]
if UpperCase(SL[j]) <> UpperCase(SimAsm[k]) then

algo asi que si son diferentes los datos del memo que los del arreglo los marque como error pero no todos los datos diferentes al arreglo son errores por ejemplo si yo quiero hacer una variable me la detectaria como error, y pues esa es mi duda en si como validar ese tipo de errores, me he quebrado la cabeza pensando la vdd aun soy algo nuevo en esto, espero y me puedan ayudar y perdon por el spam.


La franja horaria es GMT +2. Ahora son las 11:17:15.

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