Seite 1 von 1
Adressierungsproblem
Verfasst: 24.09.2010 13:41
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
Re: Adressierungsproblem
Verfasst: 24.09.2010 14:08
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 ...
Re: Adressierungsproblem
Verfasst: 24.09.2010 19:15
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