Adressierungsproblem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Lowrider39
Beiträge: 6
Registriert: 20.11.2008 19:28
Wohnort: Wilnsdorf
Kontaktdaten:

Adressierungsproblem

Beitrag von Lowrider39 »

Ich bin gerade dabei einen Befehlsparser zu bauen. Da ich allerdings nicht für jeden Befehl eine IF .. THEN.. Abfrage starten will (wird zu langsam bei ein paar hundert Befehlen) habe ich mir folgendes Szenario gedacht:

Aus den Befehlen erzeuge ich eine Nummer, die steht in einer Variable Befehl.

Wie kann ich jetzt eine Prozedur anspringen, die den Variableninhalt (von Befehl) als Namen hat?

Kann mir einer von Euch da weiterhelfen? Ich bin da nicht so fit in der Adressierung?!?

Gruß Andreas
egal was du suchst, die Antwort auf alle Fragen nach dem Leben, dem Universum und allem ist ...... 42
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Adressierungsproblem

Beitrag von STARGÅTE »

zB so:

Code: Alles auswählen

Prototype.f Operation(Value1.f, Value2.f)

Procedure.f Addition(Value1.f, Value2.f)
  ProcedureReturn Value1 + Value2
EndProcedure

Procedure.f Multiplikation(Value1.f, Value2.f)
  ProcedureReturn Value1 * Value2
EndProcedure


Global NewMap *Operation()
*Operation("addiere") = @Addition()
*Operation("multipliziere") = @Multiplikation()


Procedure.s Rechne(Operation$, Value1$, Value2$)
  Protected Operation.Operation = *Operation(Operation$)
  ProcedureReturn StrF(Operation(ValF(Value1$), ValF(Value2$)))
EndProcedure


Debug Rechne("addiere", "4", "5")
Debug Rechne("multipliziere", "4", "5")
Debug Rechne("multipliziere", Rechne("addiere", "4", "5"), "5")
Du erstellst eine Map mit den Keys als "Funktionsnamen" und deren echten Pointer zur Prozedur in PB.
In der Rechne() -Prozedure, wird dann über den Prototypen die Prozedur angesprochen.

Habs hier gleich mal komplett mit Strings gemacht, wie es beim parsen ja sein würde.

EDIT: Das kannst du natürlich noch schneller machen, wenn du statt einer MAP ein ARRAY nimmst, und wie von dir vorgeschlagen allen Funktionenn Nummern gibst ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Lowrider39
Beiträge: 6
Registriert: 20.11.2008 19:28
Wohnort: Wilnsdorf
Kontaktdaten:

Re: Adressierungsproblem

Beitrag von Lowrider39 »

Hat zwar ein bisschen gedauert, funktioniert aber genau so, wie erwartet. Ich steig zwar nicht wirklich durch, was du da machst, aber Funktion ist alles.
Danke dir für die schnelle Hilfe.

Gruß Andreas
egal was du suchst, die Antwort auf alle Fragen nach dem Leben, dem Universum und allem ist ...... 42
Antworten