Program GOTO

Z testwiki
Wersja z dnia 12:03, 18 lis 2019 autorstwa imported>Beno (WP:SK+Bn)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Program GOTO to jedno z narzędzi teorii obliczalności służące do ustanowienia, czy dana funkcja jest obliczalna.

Cechy

Formalna definicja

Składnia

Programy GOTO składają się z symboli: GOTO, IF, THEN, HALT, Mi, =, +, -, :, ;, := oraz dowolnej liczby zmiennych i stałych.

Program P jest syntaktycznie zdefiniowany w notacji BNF jako:

P::=M1:I1;M2:I2;...;Mk:Ik

Instrukcja I jest zdefiniowana jako:

I::=xi:=xj+c|xi:=xjc|GOTOMi|IFxi=cTHENGOTOMi|HALT

gdzie:

  • c jest stałą, elementem zbioru liczb naturalnych
  • xi, xj są zmiennymi
  • Mi jest znacznikiem
  • HALT to instrukcja stopu

Semantyka

Wszystkie użyte w danym programie zmienne zostają zainicjalizowane przed wykonaniem programu. Zmienne nie zainicjalizowane bezpośrednio otrzymują domyślną wartość 0.

Wyrażenie postaci

 xi := xj + c

oznacza przyznanie zmiennej xi wartości otrzymanej poprzez dodanie zmiennej xj i stałej c.

Wyrażenie postaci

 xi := xj – c

oznacza przyznanie zmiennej xi wartości otrzymanej poprzez odjęcie stałej c od zmiennej xj.

Skok bezwarunkowy ma postać

 GOTO Mi

i oznacza, że program w miejscu, w którym ta instrukcja została umieszczona, przeskoczy do znacznika Mi.

Skok warunkowy ma postać

 IF xi=c THEN GOTO Mi

i oznacza przeskok do znacznika Mi w programie jeśli warunek znajdujący się za symbolem IF jest spełniony.

Instrukcja stopu:

 HALT

stoi na końcu programu GOTO.

Symulacja za pomocą programu WHILE

Program GOTO

M1: A1; M2: A2; ... Mk: Ak

można zasymulować za pomocą programu WHILE o następującej formie

counter := 1;
WHILE counter != 0 DO
  IF counter = 1 THEN B1 END;
  IF counter = 2 THEN B2 END;
  ...
  IF counter = k THEN Bk END;
END

Gdzie

Bi = xj := xn + c; counter := counter + 1   jeśli Ai = xj := xn + c
Bi = xj := xn – c; counter := counter + 1   jeśli Ai = xj := xn – c
Bi = counter := n                           jeśli Ai = GOTO Mn
Bi = IF xj = c THEN counter = n
     ELSE counter = counter + 1             jeśli Ai = IF xj = c THEN GOTO Mn
     END
Bi = counter := 0
                     jeśli Ai = STOP

Zobacz też

Bibliografia