AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TCustomVariantType benutzen

Ein Thema von Flogo · begonnen am 20. Mai 2005 · letzter Beitrag vom 21. Mai 2005
Antwort Antwort
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#1

TCustomVariantType benutzen

  Alt 20. Mai 2005, 11:00
Hi,
Ich habe vor eine kleine Interpretersprache mit folgendem Aufbau zu schreiben:

Delphi-Quellcode:
TBefehlsBlock = class(TList)
  [...]
  public
    property Items[Index: Integer]: TBefehl [...]
  end;

  TBefehl = record
    BefehlsID: Integer;
    Argumente: Array of Variant;
  end;
Die Argumente eines Befehls sollten auch wieder Befehlsblöcke aufnehmen können. Aus diesem Grund will ich den Varianttyp erweitern. Mit der Hilfe bin ich so weit gekommen, dass ich jetzt einen packed record habe in dem mein Typ und einige Lückenfüller drinstehen
Delphi-Quellcode:
  TBefehlVarData = packed record
    VType: TVarType;
    Reserved1, Reserved2, Reserved3: Word;
    Befehle: TBefehlsBlock;
    Reserved4: LongInt;
  end;
Außerdem habe ich noch eine Klasse von TCustomVariantType abgeleitet

  TVarArgument = class(TCustomVariantType); Leider weiß ich jetzt nicht weiter. Die (englische ) OH benutzt hier einige Funktionen wie VarDataCopyInd ohne weiteren Kommentar und verweißt immer wieder auf Units, die ich in meiner PE nur als *.dcu hab.
Ich hoffe jemand kann mir einen Stoß in die richtige Richtung geben
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#2

Re: TCustomVariantType benutzen

  Alt 20. Mai 2005, 18:31
Gut Nach einem halben Tag OH blättern bin ich nicht viel weitergekommen. Ich weiß noch nicht mal ob ich als Klasse für meine Argumente weiter Variant benutzen muss oder den von mir erstellten Typ TVarArgument. Außerdem sieht es so aus als müsste ich ca 10-20 Methoden überschreiben um einen bleibigen Variant in meinen Typ umzuwandeln, um mehrere meiner Typen zu addieren usw.
Allerdings brauche ich diese ganzen Funktionen doch gar nicht
Ich will doch gar keine Typenumwandlung (außer vielleicht von Sting nach Integer und von String nach Real aber die gehen ja auch mit dem "normalen" Variant) und Addition macht erst Recht keinen Sinn.

Ich glaube ich werde versuchen mir meinen eigenen "Variant-Klon" als Erbe von TList zu schreiben.
Oder ich lasse in jedem Argument immer ein Variant und einen TBefehlsBlock zu und setze dann im Variant eine Konstant wenn der Befehl benutzt werden soll.
Mit anderen Worten: Ich habe aufgegeben
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: TCustomVariantType benutzen

  Alt 20. Mai 2005, 22:02
Gibst du immer so schnell auf? Es ist einfach kein guter Ansatz gewesen. Wenn du funktionale Elemente in deine little language einbaust, musst du deren Verschachtelungen ja nicht in den internen Code-Listen nachbilden. Es ist durchaus best practice, wenn du bei der einfachen und klaren Tabelle als interner Speicherstruktur bleibst. Bei funktionalen Sprachen wird die Tabelle dann lediglich selbstrekursiv. Warum fängst du aber auch gleich mit der vollen Komplexität an? Schraub doch etwas zurück und implementiere erstmal einen Parser für eine vereinfachte Grammatik. Kleine Schritte bringen auch Erfolgserlebnisse.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#4

Re: TCustomVariantType benutzen

  Alt 21. Mai 2005, 10:11
Zitat von marabu:
Gibst du immer so schnell auf? Es ist einfach kein guter Ansatz gewesen.
Genau! Das war der falsche Ansatz! Ich hab nur den Ansatz aufgegeben, nicht gleich das ganze Projekt.

Zitat von marabu:
Wenn du funktionale Elemente in deine little language einbaust, musst du deren Verschachtelungen ja nicht in den internen Code-Listen nachbilden. Es ist durchaus best practice, wenn du bei der einfachen und klaren Tabelle als interner Speicherstruktur bleibst. Bei funktionalen Sprachen wird die Tabelle dann lediglich selbstrekursiv. Warum fängst du aber auch gleich mit der vollen Komplexität an? Schraub doch etwas zurück und implementiere erstmal einen Parser für eine vereinfachte Grammatik. Kleine Schritte bringen auch Erfolgserlebnisse.

Grüße vom marabu
Ich bin nicht ganz sicher ob ich das alles richtig verstanden habe (was genau meinst du mit "selbstrekursiv" und "funktional"). Im Prinzip habe ich meine Befehle ja in Tabellen, nur das ich mir durch mehrere Tabellen das Springen innerhalb dieser Tabelle(n) ersparen will.


Wenns jemand interessiert:
Ich bin jetzt auf Records mit variant-Teil umgestiegen. Da ich keine Typenumwandlung und nur eine beschränkte Anzahl an möglichen Typen habe, ist dieser Record hier viel besser geeignet (und sogar nur halb so groß wie ein Variant). Außerdem kann ich hier auch noch Kontrollen durchführen , ob der richtige Typ in der Variable steckt bevor ich sie zurückgebe. Ok das würde bei einem Variant sicher auch irgendwie gehen aber hier weiß ich wie es geht.
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: TCustomVariantType benutzen

  Alt 21. Mai 2005, 11:16
Zitat von Flogo:
was genau meinst du mit "selbstrekursiv" und "funktional"
Selbstrekursive Tabellen kennst du vielleicht als Stücklisten oder bill-of-material. Im Datenbankbereich ist eine selbstrekursive Tabelle die Abbildung einer 1:n Beziehung auf eine einzige Tabelle.
Mit der Formel "funktionale Elemente" wollte ich gegen "funktionale Sprache" abgrenzen, in der Annahme, dass du keine rein funktionale Sprache, sondern lediglich Parametersubstitution implementieren willst.

Zitat von Flogo:
Im Prinzip habe ich meine Befehle ja in Tabellen, nur das ich mir durch mehrere Tabellen das Springen innerhalb dieser Tabelle(n) ersparen will.
Eine (1) Tabelle oder ein (1) Syntaxbaum. Mehrere Tabellen solltest du nur insofern haben, dass alle identifier (Konstanten, Variablen, Funktionen) und eventuell Zwischenergebnisse normalerweise in eigenen Tabellen verwaltet werden.

Zitat von Flogo:
Ich bin jetzt auf Records mit variant-Teil umgestiegen. Da ich keine Typenumwandlung und nur eine beschränkte Anzahl an möglichen Typen habe, ist dieser Record hier viel besser geeignet (und sogar nur halb so groß wie ein Variant). Außerdem kann ich hier auch noch Kontrollen durchführen , ob der richtige Typ in der Variable steckt bevor ich sie zurückgebe.
Weiter so. Viel Spaß.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#6

Re: TCustomVariantType benutzen

  Alt 21. Mai 2005, 16:25
Zitat von marabu:
Selbstrekursive Tabellen kennst du vielleicht als Stücklisten oder bill-of-material.
Leider nicht
Aber ich glaube ich verstehe so ungefähr was du meinst. ("Eine Tabelle kann Elemente enthalten, die wieder auf eine bestimmte Stelle der gleichen Tabelle verweisen"?)

Zitat von marabu:
Mit der Formel "funktionale Elemente" wollte ich gegen "funktionale Sprache" abgrenzen, in der Annahme, dass du keine rein funktionale Sprache, sondern lediglich Parametersubstitution implementieren willst.
Ich weiß leider auch nicht was eine funktionale Sprache und Parametersubstitution ist.
Was ich vorhabe ist eine "Sprache" zu entwickeln, mit der man die Levelprogrammierung eines Spiels erledigen kann. Sie soll Befehle (wie zum Beispiel "Bewege die Figur Hanspeter zu den Koordinaten 210, 340") an die Engine weiterleiten. Da sie auf jeden Fall "Ereigniss-Gesteuert" sein soll (Wenn man Hanspeter anklickt soll der Dialog gestartet werden) brauche ich hier ja schon viele kleine Codeschnipsel (Diese werden immer zusammen mit der Figur/dem Gegenstand geladen), die ich dann auch in einzelnen Listen ablegen werde. Ob ich dann innerhalb dieser Listen nur Verweise mache oder wie bis jetzt geplant weitermache muss ich mir dann noch überlegen. Im Moment tendiere ich aber dazu mit mehreren Listen zu arbeiten, weil ich daür schon einen Ansatz (s.o.) habe.
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: TCustomVariantType benutzen

  Alt 21. Mai 2005, 17:16
Funktionale Sprachen sind z.B. Lisp, Hope, ML oder Miranda. Das mit den selbstrekursiven Tabellen hast du richtig verstanden. Das, was du implementieren willst, scheinen eher Commands zu sein. Ich halte mich jetzt etwas zurück.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#8

Re: TCustomVariantType benutzen

  Alt 21. Mai 2005, 18:36
Ich meld mich wenn ich was zustande gebracht hab.
Vielen Dank für die Hilfe und die Motivation
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz