Hola, aqui esta un ejemplo, es mas o menos parecido a la solucion anterior que te di con los listbox.
Pero BlackTigerX tiene razón, Si lo que estas hacienod es un evaluador de expresiones, te va a tocar mucho trabajo, pero si lo que quieres es un corrector sintactico, no es tan complicado, aunque no deja de ocupar bastante de tu tiempo y lineas de codigo.
Procedure Verificar_Numeros(pExpresion:String);
var i:Integer;
vestoy_leyendo_numero:Boolean;
vError_con_decimal:Boolean;
vCaracter:Char;
vNumero_str:String;
Begin
vError_con_decimal:=false;
vestoy_leyendo_numero:=false;
for i:=1 to length(pExpresion) do
begin
vCaracter:=pExpresion[i];
case vCaracter of
'0'..'9','.':begin
vestoy_leyendo_numero:=True;
if vCaracter='.' then
if POS('.',vNumero_str)>0 then
vError_con_decimal:=True;
vNumero_str:=vNumero_str+vCaracter;
end;
else
begin
if vestoy_leyendo_numero then
begin
form1.Memo1.Lines.Add('Numero: '+vNumero_str);
//Haces lo que nececites hacer con el numero, otras validaciones, por ejemplo
if vError_con_decimal then
begin
form1.Memo1.Lines.Add('Hay mas de un punto decimal en el numero: '+vNumero_str);
vError_con_decimal:=False;
end;
vestoy_leyendo_numero:=false;
vNumero_str:='';
end;
end;
end; //Case
end;//for
if vestoy_leyendo_numero then
begin
form1.Memo1.Lines.Add('Numero: '+vNumero_str);
//Haces lo que nececites hacer con el numero, otras validaciones, por ejemplo
if vError_con_decimal then
begin
form1.Memo1.Lines.Add('Hay mas de un punto decimal en el numero: '+vNumero_str);
vError_con_decimal:=False;
end;
vestoy_leyendo_numero:=false;
vNumero_str:='';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
verificar_Parentesis(edit1.text);
Verificar_signos(edit1.text);
Verificar_Numeros(edit1.text);
end;