Einzelnen Beitrag anzeigen

Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#1

[Tipps gesucht] Parser erstellen

  Alt 7. Feb 2007, 17:13
Hallo,

ich würde gerne einen Parser selbst bauen. Das ganze soll Befehle verstehen und interpretieren. Auch eine Variablenverwaltung soll das Ding haben.
Nun hänge ich an mehreren Stellen, da ich das ganze von Anfang an gut aufziehen will.

Folgende Fragen:

- Wie würdet Ihr das mit einer Variablendeklaration machen und mit dem Auslesen? Mein Code:
Delphi-Quellcode:
unit varverwaltung;

interface

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


  type TVariablen=record
  Name:string;
  Inhalt:Variant;
  Script:String;

  end;



  //dek
  procedure Reset_Var();
  Function Get_Free_Var():integer;
  Procedure Set_Var(Name,Inhalt,Script:String);
  procedure Set_Systemvar();
  procedure Var_out_by_name(VName:String);


  var
  Variablen: array[0..999999] of TVariablen;

implementation

uses unit2, Fehler;




procedure Var_out_by_name(VName:String);
var i:integer;
ok:Boolean;
begin
ok:=false;
for i:=0 to 999999 do begin
if Variablen[i].name=Vname then begin
mainf.addL('Wert von '+Vname+' = '+Variablen[i].Inhalt+ ' > '+Variablen[i].Script);
ok:=true
end;
end;

if ok=false then mainf.addL('Keine Variable vorhanden');

end;

procedure Set_Systemvar();
begin
Set_Var('$uptime',datetimetostr(now),'system');
mainf.addl('Systemvariablen intialisiert..');
end;

procedure Reset_Var();
var i:integer;
begin
for i:=0 to 999999 do begin
Variablen[i].Name:='';
Variablen[i].Inhalt:='';
Variablen[i].Script:='';
end;
mainf.addl('Variablenspeicher geleert..');
end;

Function Get_Free_Var():integer;
var i:integer;
ok:Boolean;
begin
ok:=false;
for i:=0 to 999999 do begin
if (Variablen[i].Name='') and (Variablen[i].inhalt='') and (Variablen[i].script='')then begin
result:=i;
ok:=true;
break;
end;
end;
if ok=false then Messagedlg('Der Variablenspeicher ist voll!',mterror,[mbok],0);
end;

Procedure Set_Var(Name,Inhalt,Script:String);
var v:integer;
i:integer;
vorhanden:Boolean;
begin
vorhanden:=false;
for i:=0 to 999999 do begin
if variablen[i].name=Name then begin
Variablen[i].name:=name;
Variablen[i].Inhalt:=inhalt;
Variablen[i].Script:=script;
vorhanden:=true;
end;
end;
if vorhanden=false then begin
v:=Get_Free_Var();
Variablen[v].name:=name;
Variablen[v].Inhalt:=inhalt;
Variablen[v].Script:=script;
end;
end;

Procedure Del_Var(Name:string);
var i:integer;
begin
for i:=0 to 999999 do begin
if (Variablen[i].name=name) then begin
Variablen[i].Name:='';
Variablen[i].Inhalt:='';
Variablen[i].Script:='';
end;
end;
end;


end.
- Mit einer Befehlsverwaltung habe ich mich noch gar nicht beschäftigt aber vielleicht weiß hier auch jemand was?
- Weitere Gedanken und Tipps würden mich sehr freuen!!


Gruß

Dragon27
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat