Analizador de sintaxis tipo Delphi y Visual Basic

Necesitaba hacer un analizador de sintaxis, algo así como delphi y visual basic, ¿viste?
¿Por ej. Cuando pones If que automáticamente lo cambia de color? Bueno eso mismo, es para un editor de textos que estoy programando para practicar. Je je.

1 Respuesta

Respuesta
1
Hi,
Mira, como me decís que es para practicar te dejo que hagas el código y te doy pistas. Lo que te conviene utilizar es un componente TRichEdit para poder cambiar tipo, tamaño y color de fragmentos de texto dentro de este.
Lo que tienes que hacer es agregar un poco de código con las clausulas para el chequeo de sintaxis en el evento OnChange del componente TRichEdit.
El código es muy simple ya que lo único que tienes que hacer es controlas la aparición de alguna cadena dentro de otro conjunto de cadenas (TString). Te recomiendo llevar algunas variables banderas para no tener que controlar todo el texto cada vez que se aprieta una tecla sino solo fragmentos cerca de la zona de actualización.
Espero que te sirva la ayuda y si necesitas el código te lo mando. Yo que vos pruebo hacerlo solo así vas agarrándole la mano.
Cualquier consulta que tengas no dudes en preguntarme.
Nahuelon..
Si me podes pasar el código te lo agradecería ya que yo lo he pensado como me lo decís pero tampoco me ha funcionado. Gracias.
Hi de nuevo,
Mira, acá te mando el código fuente de un Syntax Checker hecho en Delphi, utilice lo siguiente:
- Un teporizador Timer1 para que controlo la sintaxis cada N segundos (N=1 en este caso)
- Un TRichEdit (RichEdit1) donde se ingresa el texto ha chequear.
- Un TMemo (Palabras) donde se colocan las palabras que se quieren resaltar (if, for, begin, end, etc.)
- El código fuente de la aplicación es el siguiente:
******************************************
******************************************
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, richedit, ExtCtrls;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
palabras: TMemo;
Timer1: TTimer;
procedure RichEdit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.RichEdit1Change(Sender: TObject);
begin
timer1.enabled := true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
palabras.Clear;
palabras.lines.Add('if');
palabras.lines.Add('then');
palabras.lines.Add('for');
palabras.lines.Add('to');
palabras.lines.Add('begin');
palabras.lines.Add('end');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i, j : integer;
posvieja : longint;
posfound : longint;
begin
with RichEdit1 do
begin
posvieja := selstart;
selstart := 0;
SelLength := length(text);
SelAttributes.Color := clBlack;
SelAttributes.Style := [];
for i := 0 to palabras.lines.Count - 1 do
begin
selstart := 0;
posfound := findtext(palabras.lines, selstart, length(text), [stWholeWord]);
while (posfound <> -1) do
begin
SelStart := posfound;
SelLength := length(palabras.lines);
SelAttributes.Color := clBlue;
SelAttributes.Style := SelAttributes.Style + [fsBold];
selstart := selstart + sellength;
SelLength := 0;
posfound := findtext(palabras.lines, selstart, length(text), [stWholeWord]);
end;
end;
selstart := posvieja;
end;
timer1.Enabled := false;
end;
end.
************************************
************************************
Fíjate que una vez hecho el chequeo se para el temporizador hasta que haya otro modificación.
Se puede realizar de una forma más eficiente pero esta es la más fácil de seguir paso a paso.
También se pueden agregar diversas capacidades, como distintos colores y tipos de letras para distintas palabras, (ej: las ":=" que se coloreen en rojo).
Las palabras las coloque en un TMemo para poder agregar palabras en tiempo de ejecución.
nahuelon..
Hola, ¿sabes qué no me funciono el código ese que me pasaste? Porque lo copio así tal cual esta y no pasa nada, osea, no me cambia de color ninguna de las palabras claves, ¿qué puede ser?
Hi,
Mira, fíjate bien los componentes que agregaste al formulario, no te olvides que es un TRichEdit.
Prová cambiando la letra o cambiand a negrita.
Lo acabo de probar de nuevo y anda perfectamente.
Espero que lo soluciones y cualquier consulta que tengas no dudes en preguntarme.
Nahuelon..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas