Namen als String

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Namen als String

Beitrag von Teekeks »

Hallo!
Ich bin weiterhin am schreiben (m)einer Scriptsprache (https://sourceforge.net/projects/smith-somemaybe/).
Diese soll auch Zugriff auf Variablen, Proceduren und Funktionen von Lazarus, also dem Programm welches den Interpreter gestartet hat, haben.

Um dafür ein Interface zu bauen benötige ich jedoch die Möglichkeit zur Laufzeit die Namen zu erfahren (also z.B. das ich von der Variable Foo erfahre das diese "Foo" heißt).
Existiert eine solche Möglichkeit?
Wenn nicht müssen halt alle Variablen von Hand in eine Liste eingetragen werden mit jeweiligem Verweis auf den Namen und die variable Selbst.
Das würde ich jedoch sehr gerne vermeiden wollen.

Gruß Teekeks

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Namen als String

Beitrag von carli »

Vielleicht sind die RTTI das, was du suchst?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Namen als String

Beitrag von Socke »

Teekeks hat geschrieben:Um dafür ein Interface zu bauen benötige ich jedoch die Möglichkeit zur Laufzeit die Namen zu erfahren (also z.B. das ich von der Variable Foo erfahre das diese "Foo" heißt).
Existiert eine solche Möglichkeit?
Nein. Funktions- und Variablen-Namen existieren in allen Programmiersprachen grundsätzlich nur im Quelltext und werden beim Linken durch die richtige Adresse ersetzt. Gegebenenfalls können natürlich noch externe Informationen aus den Debugging-Informationen gewonnen werden.
Teekeks hat geschrieben:Wenn nicht müssen halt alle Variablen von Hand in eine Liste eingetragen werden mit jeweiligem Verweis auf den Namen und die variable Selbst.
Das würde ich jedoch sehr gerne vermeiden wollen.
Diese Listen nennen sich Hash-Listen (Referenzierung anhand einer Zeichenkette => schneller finden); In der FCL gibt es mindestens zwei/drei Implementierungen.
carli hat geschrieben:Vielleicht sind die RTTI das, was du suchst?
Soweit ich weiß, werden für einfache Variablen keine RunTime-Type-Information erzeugt. Diese werden nur für alles, was in Klassen als "published" gekennzeichnet ist, generiert. Du könntest also auch eine Klasse schreiben, die eine Menge Eigenschaften besitzt, die einfach nur auf die Variablen zugreifen – dann ist der Zugriff auf den Wert recht einfach.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Namen als String

Beitrag von Teekeks »

Socke hat geschrieben:
Teekeks hat geschrieben:Wenn nicht müssen halt alle Variablen von Hand in eine Liste eingetragen werden mit jeweiligem Verweis auf den Namen und die variable Selbst.
Das würde ich jedoch sehr gerne vermeiden wollen.
Diese Listen nennen sich Hash-Listen (Referenzierung anhand einer Zeichenkette => schneller finden); In der FCL gibt es mindestens zwei/drei Implementierungen.
Danke für eure Antworten!

Dann werde ich mir einmal Hash-Listen ansehen (und vl. auch bei meinem Interpreter nutzen da mir der Variablen-Aufruf noch viel zu langsam ist).

Noch einmal danke für eure Hilfe!

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Namen als String

Beitrag von Teekeks »

Ich muss denke ich noch einmal Pushen.

Ich habe nun viel gesucht aber nicht das gefunden was ich suche.
Kennt einer von euch einen guten Link in dem der Umgang mit Hash-listen erklärt wird?
Oder eine Unit die eine solche zur Verfügung stellt?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Namen als String

Beitrag von Socke »

Teekeks hat geschrieben:Kennt einer von euch einen guten Link in dem der Umgang mit Hash-listen erklärt wird?
Oder eine Unit die eine solche zur Verfügung stellt?
Hash-Listen gibts in der Unit contnrs (wie sonst fast alle anderen Listen auch) und in der Unit xmlutils ist eine Hash-Liste definiert. Die Unterschiede liegen vor allem an dem verendeten Schlüssel (Shortstring, Widestring, Ansistring) und den Datencontainern bzw. -elementen.
Für die zuerst genannte Unit findest du die Dokumentation unter http://lazarus-ccr.sourceforge.net/docs ... dex-4.html; einfach mal die Beschreibungen aller Klassen anlesen und du weißt, mit welcher du dich näher beschäftigen musst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten