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!!