rmachine er et register maskin simulator (kompleksiteten teorien versjon), programmert i Python, komplett med en modul som skal brukes i programmene, og en (PyQt4) GUI.
Maskinen ("RAM") er lik Turing maskiner i sin beregningsmessige makt. Det har i teorien ubegrenset minne (men er begrenset i praksis ved datamaskinens minne).
Dette er en simulator for register maskiner (kompleksitet teorien versjon). Her er en kort introduksjon.
Maskinen ("RAM") er lik Turing maskiner i sin beregningsmessige makt. Det har i teorien ubegrenset minne (i praksis begrenset av datamaskiner minne). Minneceller ("registre") kan lagre heltall> = 0 uansett lengde. Si femte register inneholder nummeret 42. Man skulle skrive det som c (5) = 42. c (0) kalles også "assembler" og har en viktig rolle, som du vil se senere.
RAM har også en programteller b, initally satt til 1, og i utgangspunktet representerer den neste linje som skal utføres.
Strukturen i et typisk program ser slik ut:
# Kommentarer gå her
# Flere kommentarer
INPUT 4 6 8 9
(Instruksjoner gå her)
END
"INNGANG" linjen skulle bli funnet rett etter kommentarene. Inngangen blir plassert i c (1) c (2) etc. I dette eksempel, c (1) = 4, C (2) = 6, c (3) = 8, C (4) = 9.
Nå, med alt det, her er instruksjonssett. Den første linjen er instruksjonen selv, forklarer andre linje hva den gjør.
-
LAST jeg
c (0): = c (i), b: = b + 1
-
Cload jeg
c (0): = i, b: = b + 1
-
INDLOAD jeg
c (0): = c (c (i)), b: = b + 1
-
STORE jeg
c (i): = C (0), b: = b + 1
-
INDSTORE jeg
c (c (i)): = c (0), b: = b + 1
-
ADD jeg
C (0): = C (0) + C (i), b: = b + 1
-
CADD jeg
c (0): = c (0) + i, b: = b + 1
-
INDADD jeg
c (0): = c (0) + c (c (i)), b: = b + 1
-
SUB jeg
C (0): = max (c (0) - c (i), 0), b: = b + 1
-
CSUB jeg
c (0): = max (c (0) - i, 0), b: = b + 1
-
INDSUB jeg
c (0): = max (c (0) - c (c (i)), 0), b: = b + 1
-
MUL jeg
C (0): = C (0) * c (i), b: = b + 1
-
CMUL jeg
c (0): = c (0) * i, b: = b + 1
-
INDMUL jeg
c (0): = c (0) * c (c (i)), b: = b + 1
-
DIV jeg
C (0): = C (0) / c (i), b: = b + 1
Merk: desimaler vil bli avskåret
-
CDIV jeg
c (0): = c (0) / i, b: = b + 1
Merk: desimaler vil bli avskåret
-
INDDIV jeg
c (0): = c (0) / c (c (i)), b: = b + 1
Merk: desimaler vil bli avskåret
-
GOTO jeg
b: = i
-
HVIS X l GOTO jeg
X kan være en av dem:
b: = i if (c (0) X l) er sant
(Mer uformelt, "IF <5 GOTO 10" ville sette b = 10 hvis c (0)
Krav
- Python
- PyQt4
Kommentarer ikke funnet