Postfix-Notation < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
|
Hallo Herby,
den Vergleich selbst würde ich als
y 0 ==
schreiben.
Eine bedingte Anweisung führt in Assembler zu bedingten Sprüngen. Da es in verschiedenen Assemblern auch jede Menge verschiedene Sprünge gibt, würde ich das auch erst beim Schreiben des Programms präzisieren.
Auf Teufel komm raus könnte man aber vielleicht auch (in einem "neutralen" Assembler) beispielsweise schreiben:
y <Sprungmarke> JUMP_IF_NOT_ZERO
Dabei liegt die Sprungmarke vor dem anderen Programmteil, den wir jetzt anschauen.
Wenn wir den ternären Operator :? mal von infix a:b?c zu postfix a b c :? übertragen, dann gehen wir einfach von der Operation mit der geringsten Präzedenz aus und schreiben sie ganz nach hinten. Für die Operanden lassen wir einfach leere Klammern, die wir nach und nach füllen. Ich würde es so machen:
( ( (x) ( (y) (2) / ) multiply ) (2) * ) ( ( ( (y) (2) % ) (0) == ) (0) ( ( ( (y) (2) % ) (0) > ) (x) ( (x) - ) :? ) :? ) +
Natürlich kann man die innersten Klammern weglassen. Mal schauen, ob ich es schaffe, sie ohne Fehler zu entfernen:
( ( x ( y 2 / ) multiply ) 2 * ) ( ( ( y 2 %) 0 == ) 0 ( ( ( y 2 % ) 0 > ) x ( x -) :? ) :? ) +
Gruß
Martin
|
|
|
|