Translator języka ALGOL-1204M: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
brak opisu edycji
Nie podano opisu zmian
 
(Nie pokazano 13 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 14: Linia 14:
== Uwagi dla czytelnika ==
== Uwagi dla czytelnika ==


Przyjmujemy, że czytelnik zna międzynarodowy język algorytmiczny ALGOL 60 w zakresie ogólnie dostępnej książki:
Przyjmujemy, że czytelnik zna międzynarodowy język algorytmiczny ALGOL 60 w zakresie ogólnie dostępnej książki: ''Język ALGOL 60'', Stefan Paszkowski, Wydanie drugie poprawione i uzupełnione, Warszawa 1968. PWN. Z tego powodu omawiamy tylko sprawy specyficzne dla konkretnej reprezentacji ALGOLu dla maszyny Mera-400. Niniejszy tekst dotyczy translatorów wersji A i B opracowanych dla minikomputera Mera 400, pracujących pod kontrolą systemu operacyjnego CROOK-4.
 
Język ALGOL 60, Stefan Paszkowski, Wydanie drugie poprawione i uzupełnione, Warszawa 1968. PWN.
 
z tego powodu omawiamy tylko sprawy specyficzne dla konkretnej reprezentacji ALGOLu dla maszyny Mera-400. Niniejszy tekst dotyczy translatorów wersji A i B opracowanych dla minikomputera Mera 400, pracujących pod kontrolą systemu operacyjnego CROOK-4.


== Związek ALGOLu-1204M z językiem ALGOL-60 ==
== Związek ALGOLu-1204M z językiem ALGOL-60 ==
Linia 54: Linia 50:
== Uruchomienie translatora ==
== Uruchomienie translatora ==


W systemie operacyjnym CROOK-4, trnslator języka ALGOL-1204M jest oddzielnym programem użytkowym. Jest on dostępny dla każdego użytkownika zadeklarowanego w systemie. W wyniku kompilacji programu napisanego w ALGOLu uzyskuje się gotowy moduł binarny do natychmiastowego uruchomienia.
W systemie operacyjnym CROOK-4, translator języka ALGOL-1204M jest oddzielnym programem użytkowym. Jest on dostępny dla każdego użytkownika zadeklarowanego w systemie. W wyniku kompilacji programu napisanego w ALGOLu uzyskuje się gotowy moduł binarny do natychmiastowego uruchomienia.


Proces kompilacji realizuje następujące zlecenie programu OSL:
Proces kompilacji realizuje następujące zlecenie programu OSL:
Linia 60: Linia 56:
: <tt>XTA4 [,<TZ WE>] [,<TZ BIN>] [,<WO>]...</tt>
: <tt>XTA4 [,<TZ WE>] [,<TZ BIN>] [,<WO>]...</tt>


Gdzie <tt><WO></tt> =
Gdzie <tt><WO> = ?LIS, ?TRA, ?TPR, ?ODL, ?OML</tt>
* '''?LIS'''
* '''?TRA'''
* '''?TPR'''
* '''?ODL'''
* '''?OML'''


Zlecenie uruchamia translację programu napisanego w języku ALGOL-1204M. Parametr pierwszy zlecenia zawiera tytuł zbioru wejściowego z tekstem żródłowym w tym języku. Parametr drugi określa tytuł zbioru binarnego. Zbiór ten jest tworzony (jeżeli nie istnieje) przez translator, a po zakończeniu translacji jest zamykany. Taki zbiór binarny posiada typ BAL (Binary ALgol program). Parametr trzeci określa opcje przebiegu translacji.
Zlecenie uruchamia translację programu napisanego w języku ALGOL-1204M. Parametr pierwszy zlecenia zawiera tytuł zbioru wejściowego z tekstem żródłowym w tym języku. Parametr drugi określa tytuł zbioru binarnego. Zbiór ten jest tworzony (jeżeli nie istnieje) przez translator, a po zakończeniu translacji jest zamykany. Taki zbiór binarny posiada typ BAL (Binary ALgol program). Parametr trzeci określa opcje przebiegu translacji.
Linia 116: Linia 107:


* Symboli podstawowych ALGOLu, które oznaczają siebie - np. \i\f, \t\h\e\n, \e\l\s\e, \b\e\g\i\n, itd:
* Symboli podstawowych ALGOLu, które oznaczają siebie - np. \i\f, \t\h\e\n, \e\l\s\e, \b\e\g\i\n, itd:
* Krótkich zwrotów lub słów zaczerpniętych z orginalnej terminologi algolowskiej, np. OUT OF SCOPE, UNDECLARED
* Krótkich zwrotów lub słów zaczerpniętych z orginalnej terminologi algolowskiej, np. <tt>OUT OF SCOPE</tt>, <tt>UNDECLARED</tt>
* Symboli występujących w tłumaczonym tekście, np. nazw tam użytych
* Symboli występujących w tłumaczonym tekście, np. nazw tam użytych
* Symboli oznaczających elementy składniowe ALGOLu, różne od symboli podstawowych.
* Symboli oznaczających elementy składniowe ALGOLu, różne od symboli podstawowych.


Te ostatnie są utworzone z pierwszych liter odpowiednich terminów algolowskich. Na przykład symbol SIMAREX pochodzi od "simple arithmetic expression", FORCL - od "for clause" itd. Znaczenia wszystkich symboli podano w dodatku instrukcji. Wszystkie sygnały błędu translator tworzy wybierając odpowiednie symbole spośród wymienionych wyżej w punktach a-d; powstaje w ten sposób informacja, którą należy traktować zawsze jako komentarz do błędu wykrytego w programie, a nie jako błędny fragment programu. Aby wyjaśnić sposób interpretacji sygnałów błędu rozważmy przykład tekstu algolowskiego zawierającego błędy. Jest to przykład sztuczny, ale dobrze ilustrujący postać sygnalizacji błędu.
Te ostatnie są utworzone z pierwszych liter odpowiednich terminów algolowskich. Na przykład symbol <tt>SIMAREX</tt> pochodzi od "simple arithmetic expression", <tt>FORCL</tt> - od "for clause" itd. Znaczenia wszystkich symboli podano w dodatku instrukcji. Wszystkie sygnały błędu translator tworzy wybierając odpowiednie symbole spośród wymienionych wyżej w punktach a-d; powstaje w ten sposób informacja, którą należy traktować zawsze jako komentarz do błędu wykrytego w programie, a nie jako błędny fragment programu. Aby wyjaśnić sposób interpretacji sygnałów błędu rozważmy przykład tekstu algolowskiego zawierającego błędy. Jest to przykład sztuczny, ale dobrze ilustrujący postać sygnalizacji błędu.


Przykład:
Przykład:
Linia 159: Linia 150:
Przy niewielkiej wprawie i znajomości odpowiedniej terminologii angielskiej przytoczony wykaz można zinterpretować bez żadnych dodatkowych informacji; zawsze jest to możliwe po przejrzeniu skorowidza umieszczonego w dodatku. Spośród jedenastu przytoczonych sygnałów znaczenie siedmiu wynika natychmiast stąd, że:
Przy niewielkiej wprawie i znajomości odpowiedniej terminologii angielskiej przytoczony wykaz można zinterpretować bez żadnych dodatkowych informacji; zawsze jest to możliwe po przejrzeniu skorowidza umieszczonego w dodatku. Spośród jedenastu przytoczonych sygnałów znaczenie siedmiu wynika natychmiast stąd, że:


IN BOUND PAIR LIST
* <tt>IN BOUND PAIR LIST</tt> oznacza: "w wykazie par granicznych"
oznacza: "w wykazie par granicznych"
* <tt>UNDECLARED</tt> oznacza: "nie opisane"
UNDECLARED
* <tt>OUT OF SCOPE</tt> oznacza: "poza obszarem działania"
oznacza: "nie opisane"
OUT OF SCOPE
oznacza: "poza obszarem działania"


a symbole występujące pod tymi zwrotami są nazwami występującymi w tekście tłumaczonym przez translator. Pozostałe cztery sygnały są opisami błędów gramatycznych. W skorowidzu znajdziemy następujące wyjaśnienia:
a symbole występujące pod tymi zwrotami są nazwami występującymi w tekście tłumaczonym przez translator. Pozostałe cztery sygnały są opisami błędów gramatycznych. W skorowidzu znajdziemy następujące wyjaśnienia:


* SIMARVA simple aritmetic variable - prosta zmienna arytmetyczna
* <tt>SIMARVA</tt> simple aritmetic variable - prosta zmienna arytmetyczna
* RELOP relational operator - operator relacji
* <tt>RELOP</tt> relational operator - operator relacji
* PROID procedure identifier - nazwa procedury
* <tt>PROID</tt> procedure identifier - nazwa procedury
* SIMAREX simple arithmetic expresion - proste wyrażenie arytmetyczne
* <tt>SIMAREX</tt> simple arithmetic expresion - proste wyrażenie arytmetyczne
* IFCL if clause - warunek "jeśli"
* <tt>IFCL</tt> if clause - warunek "jeśli"


Znając sens symboli występujących w sygnale, nietrudno już zinterpretować ten sygnał w całości. Na przykład sygnał:
Znając sens symboli występujących w sygnale, nietrudno już zinterpretować ten sygnał w całości. Na przykład sygnał:
Linia 184: Linia 172:
który w żadnym poprawnym programie nie może wystąpić. Analogicznie trzeba odczytać pozostałe trzy sygnały błędów gramatycznych. Już z tego niewielkiego przykładu wynikają pewne ogólne wnioski:
który w żadnym poprawnym programie nie może wystąpić. Analogicznie trzeba odczytać pozostałe trzy sygnały błędów gramatycznych. Już z tego niewielkiego przykładu wynikają pewne ogólne wnioski:


'''Wniosek 1.''' Sygnały translatora są wynikiem czysto mechanicznej analizy programu. Człowiek analizujący ten sam tekst prawdopodobnie powie, że np. w wierszu 5 brakuje dwukropka, w wierszach 8 i 10 brakuje nawiasów do pary i jeszcze jakiegoś wyrażenia po prawej stronie równości, a w wierszu 16 brakuje nawiasów łańcuchowych.
'''Wniosek 1.'''
 
Sygnały translatora są wynikiem czysto mechanicznej analizy programu. Człowiek analizujący ten sam tekst prawdopodobnie powie, że np. w wierszu 5 brakuje dwukropka, w wierszach 8 i 10 brakuje nawiasów do pary i jeszcze jakiegoś wyrażenia po prawej stronie równości, a w wierszu 16 brakuje nawiasów łańcuchowych.


'''Wniosek 2.''' Interpretując sygnały błędów trzeba pamiętać, że wydrukowany przez translator numer wiersza nie zawsze odnosi się do wiersza w którym wystąpił błąd. Na przykład, błąd występujący zapewne w wierszu 9 jest sygnalizowy w czasie analizy wiersza 10. Stanie się zrozumiałe, jeśli przypomnimy sobie, że układ graficzny programu nie ma żadnego wpływu na jego interpretację. W tej sytuacji brak wyrażenia po prawej stronie znaku równości można wykryć dopiero po przejściu do analizy następnego wiersza. Niekiedy sygnał błędu zawiera tylko jeden symbol elementu składniowego. Oznacza to, że wymieniony element jest poprawny po względem semantycznym.
'''Wniosek 2.'''
 
Interpretując sygnały błędów trzeba pamiętać, że wydrukowany przez translator numer wiersza nie zawsze odnosi się do wiersza w którym wystąpił błąd. Na przykład, błąd występujący zapewne w wierszu 9 jest sygnalizowy w czasie analizy wiersza 10. Stanie się zrozumiałe, jeśli przypomnimy sobie, że układ graficzny programu nie ma żadnego wpływu na jego interpretację. W tej sytuacji brak wyrażenia po prawej stronie znaku równości można wykryć dopiero po przejściu do analizy następnego wiersza. Niekiedy sygnał błędu zawiera tylko jeden symbol elementu składniowego. Oznacza to, że wymieniony element jest poprawny po względem semantycznym.


Niekiedy translator zatrzymuje się natychmiast po wykryciu i zasygnalizowaniu jednego błędu. Oznacza to, że analizowany program nie jest ciągiem symboli ALGOLu 1204M albo pamięć operacyjna jest już całkowicie wypełniona informacjami o tłumaczonym programie.
Niekiedy translator zatrzymuje się natychmiast po wykryciu i zasygnalizowaniu jednego błędu. Oznacza to, że analizowany program nie jest ciągiem symboli ALGOLu 1204M albo pamięć operacyjna jest już całkowicie wypełniona informacjami o tłumaczonym programie.
Linia 224: Linia 216:
* <tt>TRANSLATE PROGRAM</tt> - żądanie przetłumaczenia programu.
* <tt>TRANSLATE PROGRAM</tt> - żądanie przetłumaczenia programu.


= Instrukcja eksploatacyjna programów wżutkowych =
= Instrukcja eksploatacyjna programów użytkowych =


== Uruchamianie programów binarnych ==
== Uruchamianie programów binarnych ==
Linia 232: Linia 224:
: <tt>RTA4 [,<TZ BIN>] [,<WO>]...</tt>
: <tt>RTA4 [,<TZ BIN>] [,<WO>]...</tt>


gdzie <tt><WO> =</tt>
gdzie <tt><WO> = ?TRA, ?DIT, ?ODL, ?OML, ?W, ?W0, ?W1</tt>
 
* ?TRA
* ?DIT
* ?ODL
* ?OML
* ?W
* ?W0
* ?W1


Pierwszy parametr zlecenia określa tytuł zbioru binarnego a pozostałe parametry oznaczają opcje uruchomienia programu. Jeżeli podany tytuł zbioru binarnego nie będzie zbiorem binarnym algolowskim (utworzonym zleceniem XTA4) i nie będzie posiadał typu BAL (Binary ALgol program) to sygnalizowany będzie komunikat LOAD ERROR. Programu takiego nie można załadować do pamięci.
Pierwszy parametr zlecenia określa tytuł zbioru binarnego a pozostałe parametry oznaczają opcje uruchomienia programu. Jeżeli podany tytuł zbioru binarnego nie będzie zbiorem binarnym algolowskim (utworzonym zleceniem XTA4) i nie będzie posiadał typu BAL (Binary ALgol program) to sygnalizowany będzie komunikat LOAD ERROR. Programu takiego nie można załadować do pamięci.


* ?TRA - polecenie uruchomienie programu ze śladem.
* '''?TRA''' - polecenie uruchomienie programu ze śladem.
* ?DIT - polecenie drukowania na monitorze 10 ostatnich wierszy śladu dynamicznego. ślad będzie drukowany jeęli wystąpił błąd w programie.
* '''?DIT''' - polecenie drukowania na monitorze 10 ostatnich wierszy śladu dynamicznego. ślad będzie drukowany jeęli wystąpił błąd w programie.
* ?ODL - polecenie wykonania wydruków przez programy wynikowe dużymi literami.
* '''?ODL''' - polecenie wykonania wydruków przez programy wynikowe dużymi literami.
* ?OML - polecenie wykonywania wydruków przez programy wynikowe dużymi i małymi literami.
* '''?OML''' - polecenie wykonywania wydruków przez programy wynikowe dużymi i małymi literami.
* ?W - polecenie wykonania instrukcji algolowskich: setinput(1); setoutput(2); i uruchomienie programu od początku.
* '''?W''' - polecenie wykonania instrukcji algolowskich: setinput(1); setoutput(2); i uruchomienie programu od początku.
* W0 - polecenie wykonania instrukcji algolowskich setinput(0); setoutput(0); i uruchomienie programu od początku.
* '''?W0''' - polecenie wykonania instrukcji algolowskich setinput(0); setoutput(0); i uruchomienie programu od początku.
* ?W1 - polecenie wykonania instrukcji algolowskich setinput(1); setoutput(0); i uruchomienie programu od początku.
* '''?W1''' - polecenie wykonania instrukcji algolowskich setinput(1); setoutput(0); i uruchomienie programu od początku.


Standardowo użyta jest opcja ?W0. (tzn. czytanie i pisanie z/na monitor).
Standardowo użyta jest opcja ?W0. (tzn. czytanie i pisanie z/na monitor).
Linia 321: Linia 305:
Podczas pracy programów użytkowych mogą zajść nieprzewidziane okoliczności (np. obliczanie pierwiastka z liczby ujemnej, brak pamięci itp.). Jeżeli wystąpi błąd w pracy programu i ten błąd zostanie wykryty przez program, wówczas na monitorze drukowany jest komunikat o tym błędzie. Po wykryciu błędu program zatrzymuje się i czeka na interwencję operatora. Istnieją możliwości wznowienia pracy programu przy pomocy zleceń "GO" oraz "SKIP". W powyższym wykazie drukowanych komunikatów jest podana przyczyna błędu oraz sposób postępowania operatora.
Podczas pracy programów użytkowych mogą zajść nieprzewidziane okoliczności (np. obliczanie pierwiastka z liczby ujemnej, brak pamięci itp.). Jeżeli wystąpi błąd w pracy programu i ten błąd zostanie wykryty przez program, wówczas na monitorze drukowany jest komunikat o tym błędzie. Po wykryciu błędu program zatrzymuje się i czeka na interwencję operatora. Istnieją możliwości wznowienia pracy programu przy pomocy zleceń "GO" oraz "SKIP". W powyższym wykazie drukowanych komunikatów jest podana przyczyna błędu oraz sposób postępowania operatora.


* END - program wykonano do końca.
* <tt>END</tt> - program wykonano do końca.
* ARC - błąd przy obliczeniu wartości funkcji arc sin lub arc cos. Zlecenie "SKIP" powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* <tt>ARC</tt> - błąd przy obliczeniu wartości funkcji arc sin lub arc cos. Zlecenie "SKIP" powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* EXP - parametr aktualny funkcji exp ma wartość zbyt dużą. Zlecenie "SKIP" powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* <tt>EXP</tt> - parametr aktualny funkcji exp ma wartość zbyt dużą. Zlecenie "SKIP" powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* EXPONENTATION - wynik potęgowania nie jest określony.
* <tt>EXPONENTATION</tt> - wynik potęgowania nie jest określony.
* LN - parametr aktualny funkcji nie jest dodatni. Zlecenie "SKIP" powoduje nadanie funkcji wartości0 i kontynuowanie obliczeń.
* <tt>LN</tt> - parametr aktualny funkcji nie jest dodatni. Zlecenie "SKIP" powoduje nadanie funkcji wartości0 i kontynuowanie obliczeń.
* SQRT - parametr aktualny funkcji sqrt jest ujemny. Zlecenie "SKIP" powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* <tt>SQRT</tt> - parametr aktualny funkcji sqrt jest ujemny. Zlecenie "SKIP" powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* TRIG - błąd przy obliczaniu wartości funkcji sin, cos lub tan. Zlecenie "SKIP " powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* <tt>TRIG</tt> - błąd przy obliczaniu wartości funkcji sin, cos lub tan. Zlecenie "SKIP " powoduje nadanie funkcji wartości 0.0 i kontynuowanie obliczeń.
* BOUND PAIR
* <tt>BOUND PAIR</tt>
** w wykazie par granicznych granica dolna jest większa od granicy górnej
** w wykazie par granicznych granica dolna jest większa od granicy górnej
** w opisie tablic z mianem OWN wykaz par granicznych zawiera więcej niż 10 par granicznych.
** w opisie tablic z mianem OWN wykaz par granicznych zawiera więcej niż 10 par granicznych.
* FORMAT - błędne S w wykonywanej instrukcji format(s). zlecenie "GO" powoduje wykonanie na monitorze print(s) i ponowne zatrzymanie, a zlecenie "SKIP" powoduje wykonanie instrukcji format i kontynuację obliczeń.
* <tt>FORMAT</tt> - błędne S w wykonywanej instrukcji format(s). zlecenie "GO" powoduje wykonanie na monitorze print(s) i ponowne zatrzymanie, a zlecenie "SKIP" powoduje wykonanie instrukcji format i kontynuację obliczeń.
* IO PARAETER - błędna wartość parametru aktualnego procedury wejścia lub wyjścia np. setinput(-1) lub outchar(120).
* <tt>IO PARAETER</tt> - błędna wartość parametru aktualnego procedury wejścia lub wyjścia np. setinput(-1) lub outchar(120).
* RI CONVERSION - niewykonalna zmiana z typu {r{e{a{l na typ {i{n{t{e{g{e{r.
* <tt>RI CONVERSION</tt> - niewykonalna zmiana z typu {r{e{a{l na typ {i{n{t{e{g{e{r.
* SPACE OVERFLOW - brak miejsca w pamięci (zbyt duża tablica albo zbyt wiele jednocześnie czynnych procedur).
* <tt>SPACE OVERFLOW</tt> - brak miejsca w pamięci (zbyt duża tablica albo zbyt wiele jednocześnie czynnych procedur).
* SUBSCRIPT - liczba wskaźników przy zmiennej nie jest równa.
* <tt>SUBSCRIPT</tt> - liczba wskaźników przy zmiennej nie jest równa.
* NUMBER - błąd w czytanej liczbie. Zlecenie "SKIP" powoduje rozpoczęcie procesu czytania liczby od początku.
* <tt>NUMBER</tt> - błąd w czytanej liczbie. Zlecenie "SKIP" powoduje rozpoczęcie procesu czytania liczby od początku.
* PARAMETER LIST
* <tt>PARAMETER LIST</tt>
** lista parametrów aktualnych nie jest równa liczbie parametrów formalnych;
** lista parametrów aktualnych nie jest równa liczbie parametrów formalnych;
** typ lub rodzaj parametru aktualnego nie jest zgodny ze specyfikacją odpowiedniego paraetru formalnego.
** typ lub rodzaj parametru aktualnego nie jest zgodny ze specyfikacją odpowiedniego paraetru formalnego.
* STRING - czytany łańcuch nie mieści się w tablicy.
* <tt>STRING</tt> - czytany łańcuch nie mieści się w tablicy.
* TRANSLATE PROGRAM - żądanie przetłumaczenia programu.
* <tt>TRANSLATE PROGRAM</tt> - żądanie przetłumaczenia programu.
* SUBSCRIPT
* <tt>SUBSCRIPT</tt>
** lista wskaźników przy zmiennej nie jest równa liczbie par granicznych w opisie odpowiedniej tablicy;
** lista wskaźników przy zmiennej nie jest równa liczbie par granicznych w opisie odpowiedniej tablicy;
** wartość wskaźnika nie należy do przedziału określonego odpowiednią parą graniczną;
** wartość wskaźnika nie należy do przedziału określonego odpowiednią parą graniczną;
** skok przy nie określonym przełączeniu.
** skok przy nie określonym przełączeniu.


== Segmentacja programów w ALGOLu ==
= Segmentacja programów w ALGOLu =


W Algolu-1204 segmentacji programu nie wykonuje się zbyt często, ponieważ wielkość pamięci operacyjnej maszyny jest wystarczająca dla zapamiętania przekładu typowych programów obliczeniowych. Jeżeli przekład programu nie mieści się w pamięci maszyny, tzn. w czasie tłumaczenia tego programu translator sygnalizuje SPACE OVERFLOW, to - pomijając przypadek stosowania wersji A translatora lub nieoptymalnego programowania - mamy do czynienia z programem dość złożonym. W programie tego rodzaju można prawie zawsze wyodrębnić pewną liczbę procesów obliczeniowych rozłącznych w tym sensie, że po zakończeniu każdego z nich instrukcje realizujące ten proces przez dłuższy czas nie będą wykonywane. Programy tego rodzaju dobrze nadają się do segmentacji. Aby wykonać segmentowanie programu, należy wyodrębnić procesy obliczeniowe opisać w postaci procedur do niezależnego tłumaczenia z parametrami oznaczjącymi dane i wyniki tego procesu. Procedury te należy przetłumaczyć i wyprodukować kod binarny do określonego zbioru dyskowego. Z informacji podanych podanych wcześniej wynika, że samo przygotowanie jakiegoś segmentu programu nie przesądza jeszcze o tym, w jakim programie segment ten będzie użyty. Tak więc raz wykonany komplet segmentów może być używany w wielu różnych programach.
W Algolu-1204 segmentacji programu nie wykonuje się zbyt często, ponieważ wielkość pamięci operacyjnej maszyny jest wystarczająca dla zapamiętania przekładu typowych programów obliczeniowych. Jeżeli przekład programu nie mieści się w pamięci maszyny, tzn. w czasie tłumaczenia tego programu translator sygnalizuje SPACE OVERFLOW, to - pomijając przypadek stosowania wersji A translatora lub nieoptymalnego programowania - mamy do czynienia z programem dość złożonym. W programie tego rodzaju można prawie zawsze wyodrębnić pewną liczbę procesów obliczeniowych rozłącznych w tym sensie, że po zakończeniu każdego z nich instrukcje realizujące ten proces przez dłuższy czas nie będą wykonywane. Programy tego rodzaju dobrze nadają się do segmentacji. Aby wykonać segmentowanie programu, należy wyodrębnić procesy obliczeniowe opisać w postaci procedur do niezależnego tłumaczenia z parametrami oznaczjącymi dane i wyniki tego procesu. Procedury te należy przetłumaczyć i wyprodukować kod binarny do określonego zbioru dyskowego. Z informacji podanych podanych wcześniej wynika, że samo przygotowanie jakiegoś segmentu programu nie przesądza jeszcze o tym, w jakim programie segment ten będzie użyty. Tak więc raz wykonany komplet segmentów może być używany w wielu różnych programach.
Linia 376: Linia 360:
Sposób kompilacji poszczególnych zbiorów:
Sposób kompilacji poszczególnych zbiorów:


a). Kompilacja procedury aaa w zbiorze FILE1.
* Kompilacja procedury aaa w zbiorze <tt>FILE1</tt>.


  XTA4, FILE1, BBB,?TPR
  XTA4, FILE1, BBB,?TPR


b). Kompilacja programu w zbiorze PROG1.
* Kompilacja programu w zbiorze <tt>PROG1</tt>.


  XTA4, PROG1, DDD
  XTA4, PROG1, DDD


c). Uruchomienie programu.
* Uruchomienie programu.


  ASS, ......
  ASS, ......
Linia 421: Linia 405:
: <tt>OPTISO,<TZ WY> [,WO ]</tt>
: <tt>OPTISO,<TZ WY> [,WO ]</tt>


gdzie WO =  
gdzie <tt>WO = ?OML, ?ODL</tt>
* '''?OML'''
* '''?ODL'''


Opcja '''?OML''' - zapalona określa małe i duże litery, natomiast zapalona opcja '''?ODL''' - oznacza konwersję tylko na duże litery. Standardowo wejście jest określone jako czytnik taśmy papierowej i nazwa tego urządzenia brzmi TR2. Urządzenie te musi być utworzone procedurą instalującą kompilator Algolu lub posiadać parametry PA1 i PA 2 odpowiednie.
Opcja '''?OML''' - zapalona określa małe i duże litery, natomiast zapalona opcja '''?ODL''' - oznacza konwersję tylko na duże litery. Standardowo wejście jest określone jako czytnik taśmy papierowej i nazwa tego urządzenia brzmi TR2. Urządzenie te musi być utworzone procedurą instalującą kompilator Algolu lub posiadać parametry PA1 i PA 2 odpowiednie.
{{source|title=Translator języka ALGOL-1204M dla minikomputera MERA-400 w systemie operacyjnym CROOK-4 (wersja-6/A) - Translator-TA4|author=Janusz Gocałek, Jacek Klauziński, Ryszard Zenker|date=Poznań 1986}}

Menu nawigacyjne