dc (informatyka)

dcuniksowe narzędzie służące do wykonywania prostych obliczeń według poleceń podanych przy użyciu odwrotnej notacji polskiej. Jest to jedno ze starszych narzędzi napisanych dla tego systemu, obecnie nie jest już szerzej używane.

Działanie:

  • każda liczba jest odkładana na stos;
  • operatory pobierają ze stosu określoną liczbę elementów (0 lub więcej), wykonują nad nimi jakąś operację i odkładają określoną (0 lub więcej) liczbę wartości na stos, ewentualnie mają jakieś efekty uboczne;
  • wszystko między „[” a „]” (z uwzględnieniem zagnieżdżania), jest traktowane jako tekst i odkładane na stos w całości.

Programy można uruchamiać komendą: dc -e "program".

Przykłady programów:

  • 2 3 4 * + p
    • odkłada na stosie wartość 2 – stos po operacji: 2
    • odkłada na stosie wartość 3 – stos po operacji: 2, 3
    • odkłada na stosie wartość 4 – stos po operacji: 2, 3, 4
    • pobiera dwie wartości w góry stosu i wrzuca na stos wynik ich mnożenia – stos po operacji: 2, 12
    • pobiera dwie wartości w góry stosu i wrzuca na stos wynik ich dodawania – stos po operacji: 14
    • drukuje wartość ze szczytu stosu, po czym dodaje znak nowej linii – stos po operacji nadal zawiera wartość 14
  • [Hello, world !] p
    • odkłada na stosie tekst „Hello, world!”
    • drukuje ten tekst
  • [[Hello, world !] p] x
    • umieszcza na stosie tekst [Hello, world !] p
    • pobiera wartość ze szczytu stosu i ją ewaluuje
  • 2 sa 3 sb la la * sa lb lb * sb la lb + p
    • uwaga: ten program jest napisany w wyjątkowo mało efektywny sposób
    • zapisuje wartość 2 na stosie
    • przenosi wartość z góry stosu do rejestru a
    • zapisuje wartość 3 na stosie
    • przenosi wartość z góry stosu do rejestru b
    • kopiuje dwukrotnie wartość z rejestru a na stos
    • zdejmuje i mnoży dwie najwyższe wartości na stosie, wynik umieszczając na stosie
    • umieszcza wynik w rejestrze a
    • to samo robi z b
    • wczytuje wartości rejestrów a i b ze stosu
    • dodaje je
    • drukuje wynik operacji 2*2 + 3*3
  • 2 3 d * r d * + p
    • Program robi to samo co powyżej z wykorzystaniem dwóch nowych operacji:
    • d – umieść wartość z góry stosu jeszcze raz (czyli jeśli stos zawierał dane 2, 3 to po tej operacji będzie zawierał 2,3,3)
    • r – zamień dwie wartości na górze stosu (czyli jeśli stos zawierał dane 2,9, to po tej operacji będzie zawierał 9,2)