Jednoduchý testovací program




Následujcí ukázky ilustrují především alternativní způsoby čtení posloupnosti RPN instrukcí.


Instrukce v souboru na disku

Výpočet dvojkového doplňku hodnoty v X-registru RPN stacku:

# cat complement.rpn
uns
wide w
lbl 29
not
1
+
#
# rpnproc -l 32 complement.rpn
FILE:    complement.rpn
* * *  LIST  * * *
###:0000        UNS
###:0001        WIDE W
029:0000        LBL 029
029:0001        NOT
029:0002        1
029:0003        +
* * *  EXEC  * * *
REGT:    0x00000000           0
REGZ:    0x00000000           0
REGY:    0x00000000           0
REGX:    0x00000020          32
RESULT:  0x0000ffe0       65504
#
# rpnproc -t -s29 32 complement.rpn
FILE:    complement.rpn
TRACE:   0x00000020          32:  029:0001      NOT
TRACE:   0xffffffdf         -33:  029:0002      1
TRACE:   0x00000001           1:  029:0003      +
RESULT:  0xffffffe0         -32
#


Instrukce zadané z klávesnice (čtené ze stdin)

Výpočet příkladu

   1 + 2 * 3 = 7
# rpnproc 1 2 3 -
FILE:    <stdin>
*
+
RESULT:  0x00000007           7
#
Pozn.: Pro spustění výpočtu, o jehož ukončení informuje výpis RESULT:, je třeba vstupní soubor (zde konkrétně stdin) ukončit. Po zadání posledního řádku s instrukcí + ukončení obstará stisk Ctrl-D.


Sled instrukcí je dán argumentem programu na command-line

Výpočet hodnoty x podle vzorce

   x = (a + b * c) * 2 + c
kde:
   a = 1
   b = 2
   c = 3
# rpnproc -a. -n= "-i " -l -t 1 2 3 "%sto 0 %* %+ %2 %* %rcl+ 0"
FILE:    
* * *  LIST  * * *
===.0000 STO 000
===.0001 *
===.0002 +
===.0003 2
===.0004 *
===.0005 RCL+ 000
* * *  EXEC  * * *
REGT:    0x00000000           0
REGZ:    0x00000001           1
REGY:    0x00000002           2
REGX:    0x00000003           3
TRACE:   0x00000003           3:  ===.0000 STO 000
TRACE:   0x00000003           3:  ===.0001 *
TRACE:   0x00000006           6:  ===.0002 +
TRACE:   0x00000007           7:  ===.0003 2
TRACE:   0x00000002           2:  ===.0004 *
TRACE:   0x0000000e          14:  ===.0005 RCL+ 000
RESULT:  0x00000011          17
#
Je zřejmé, že znak % uvozující RPN instrukce sdružené v řetězci odkazovaném pointerem argv[6] je oddělovačem jednotlivých instrukcí. Mezery před ním nejsou povinné, mezery za ním mohou být. Korektními zadáními jsou tedy i tyto zápisy:
# rpnproc 1 2 3 "%sto 0%*%+%2%*%rcl+ 0"
# rpnproc 1 2 3 "%   sto 0   %   *   %   +   %   2   %   *   %rcl+ 0   "
#
Důležitá je přehlednost použitého zápisu. Záleží pouze na vkusu uživatelově.