CSL-CROOK - Dyrektywy sterujące

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Przed rozpoczęciem analizy niniejszego rozdziału, użytkownik powinien zapoznać się z opisem Systemu Operacyjnego CROOK-4, kładąc szczególny nacisk na opis Języka Operatora OSL.

Program w języku CSL składa się z segmentu głównego oraz podprogramów. Wszystkie te segmenty są poddawane obróbce przez translator, który dokonuje tłumaczenia instrukcji CSL na instrukcje języka FORTRAN. Kopiuje bez zmiany instrukcje wstępnie przetłumaczone zapisane w języku FORTRAN. Do realizacji tłumaczenia programu niezbędne są dwa zestawy dyrektyw sterujących:

  • dyrektywy sterujące translatorem CSL,
  • dyrektywy sterujące kompilatorem FORTRANU.

Opis dyrektyw translatora CSL

Translator jest wyposażony w dyrektywy. Służą one do sterowania pracą translatora oraz ustawiają odpowiednie opcje dla programów wynikowych. Każda dyrektywa musi mieścić się w jednym wierszu i rozpoczynać się od pierwszej kolumny wiersza. Nazwa dyrektywy jest poprzedzona znakiem "#", który wyróżnia je od instrukcji w języku CSL. Niektóre dyrektywy, jako swój parametr, zawierają tytuł zbioru. Tytuł zbioru składa się z trzech elementów: Nazwy obszaru, nazwy skorowidza i nazwy zbioru. Poszczególne elementy mogą być puste. Brak nazwy skorowidza powoduje ,że zbiór jest szukany począwszy od skorowidza aktualnego w kolejnych skorowidzach nadrzędnych. Brak nazwy obszaru powoduje, że zbiór jest szukany kolejno na wszystkich dostępnych przy danym skorowidzu obszarach.

Poszczególne dyrektywy mają następujące znaczenie:

#LIS (?LIS)

Dyrektywa powoduje, że translator wyprowadza w trakcie translacji na monitor lub do wskazanego przez użytkownika zbioru, wszystkie segmenty w języku CSL łącznie z instrukcjami sterującymi i informacjami o błędach;

#SLI (?SLI)

Użycie tej dyrektywy spowoduje wydrukowanie na monitorze lub do wskazanego przez użytkownika zbioru, listę nazw zmiennych użytych w programie CSL-owskim i odpowiadających im nazw zmiennych w programie wygenerowanym przez translator (zmienne w języku FORTRAN);

#FLI (?FLI)

Dyrektywa ta, jedna z trzech opcji listingu, ma za zadanie listowanie na monitorze lub do wskazanego przez użytkownika zbioru, wszystkich kompilowanych segmentów programu wraz z informacją o istniejących błędach oraz pełną listą nazw zmiennych występujących w programie CSL-owskim i odpowiadającym im zmiennym w wygenerowanym programie. Listowane są również instrukcje sterujące i komunikaty translatora;

#COM
#NOC (?NOC)

Translator języka CSL zezwala na translację programów w dwóch stanach:
  • stan COMPILE, w którym odbywa się generowanie programu pośredniego w języku FORTRAN;
  • stan NOCOMPILE (testujący), w którym odbywa się jedynie analiza poprawności programu źródłowego;
Ustawienie odpowiedniego stanu translacji dokonuje się wyżej opisanymi dyrektywami. Standardowo translator ustawiony jest w stan COMPILE. Zmiany stanu można dokonać w programie przez użycie dyrektywy zmieniającej stan translacji na przeciwny. Zmiana stanu COMPILE na testujący (NOCOMPILE) jest dokonywana automatycznie w trakcie translacji w momencie wykrycia przez translator błędu w programie;

#SYS

Dyrektywa umożliwia przejście na nasłuch zleceń systemu operacyjnego CROOK-4;

#TRA (?TRA)

Użycie tej dyrektywy spowoduje wygenerowanie dyrektywy fortranowskiej #OPT z zapaloną opcją TRA i ARR. Opcja ta służy do śledzenia programów binarnych, oraz kontroli przekroczenia rozmiarów tablic;

UWAGA: Standardowo translator ma zapalone następujące opcje:

  • opcja COMPILE;
  • opcje NLIST, NSLI, NFLI;

Dyrektywy kompilatora FORTRAN

Program w języku FORTRAN-CROOK otrzymany w wyniku translacji translatorem XCSL będzie ponownie tłumaczony przez kompilator języka FORTRAN XFOR. Użytkownik musi jednak przewidzieć podanie niezbędnych dyrektyw sterujących sposobem przeprowadzenia kompilacji i wykonania danego programu. Instrukcje te mogą być wprowadzone oddzielnie w trakcie kompilacji w FORTRANIE lub mogą występować w oryginalnym programie CSL. W tym ostatnim przypadku muszą być poprzedzone znakiem "*" w kolumnie 1. Są one następnie kopiowane bezpośrednio do programu wynikowego, z tym że znak "*" zostaje zamieniony na znak "#", od którego zaczynają się wszystkie dyrektywy w FORTRANIE.

Instrukcje z "*" powinny występować przed pierwszym segmentem programu lub pomiędzy segmentami. Dyrektywy podstawowe takie jak #FORTRAN, #END oraz dyrektywa #LIB (CSLLIB) pozwalająca przyłączyć bibliotekę podstawową dla języka CSL, są już wygenerowane przez translator CSL.

Kompilator XFOR jest wyposażony w dyrektywy. Służą one do sterowania pracą kompilatora oraz ustawiają odpowiednie opcje dla programów wynikowych. Każda dyrektywa musi mieścić się w jednym wierszu i rozpoczynać się od pierwszej kolumny wiersza. Nazwa dyrektywy jest poprzedzona znakiem "#", który wyróżnia je od instrukcji fortranowskich. Wszystkie dyrektywy oraz opcje mogą być podawane kompilatorowi pełną nazwą lub trzyliterowe (analizowane są trzy pierwsze znaki) bez spacji np. #OPTION, #OPT, #FOR, LIS, ARR, itp. Niektóre dyrektywy, jako swój parametr, zawierają tytuł zbioru.

Poszczególne dyrektywy mają następujące znaczenie:

*FOR[TRAN] [<komentarz>]

Dyrektywa wskazuje kompilatorowi początek programu w języku FORTRAN. Musi ona wystąpić jako ostatnia ze wszystkich dyrekyw (jeśli występują) przed pierwszym analizowanym przez kompilator segmentem napisanym w Fortranie.

*END

Dyrektywa kończy translowany program. Wraz z dyrektywą *FORTRAN tworzy parę ograniczającą program fortranowski. Występuje ona jako ostatnia w programie. Po wystąpieniu tej dyrektywy kompilator kończy analizę wierszy fortranowskich oraz kończy swoją pracę i wyprowadza komunikat END OF COMPILATIN - NO ERRORS jeżeli nie było błędów. Jeżeli były to podaje liczbę błędów.

*LIB[RAR] (<TZ>)

Dyrektywa umożliwia dołączenie do programu, dowolnego, napisanego w języku Assembler (ASSM) programu określonego przez tytuł zbioru. Pozwala na dołączanie dowolnych bibliotek napisanych w Assemblerze. Zbiory określone przez dyrektywę są dołączane po translacji Fortranem programu zawierającego dyrektywę, a przed dołączeniem bibliotek systemowych, standardowych. W programie może wystąpić max-10 dyrektyw *LIB. Poz wala na to użytkownikowi dołączenie dziesięciu różnych bibliotek, lub zbiorów.

*OVL (<p1>,<p2>)

Dyrektywa ta umożliwia nakładkowanie programów fortranowskich. Pojawienie się tej dyrektywy w tekście oznacza początek nakładki. Wstąpienie następnej dyrektywy *OVL jest zarazem końcem poprzedniej (zadeklarowanej) nakładki jak i początkiem nowej nakładki. Parametr <p1> określa poziom nakładki natomiast parametr <p2> oznacza numer nakładki danego poziomu.

*DEF[INE FILE] (<numer strumienia>, <długość rekordu>)

Dyrektywa służy do zdefiniowania zbiorów binarnych bezpośredniego dostępu. <numer strumienia> określa numer strumienia, z którym skojarzony jest definiowany zbiór binarny o dostępie bezpośrednim. Numer strumienia jest liczbą całkowitą bez znaku z zakresu od 30-50. Umożliwia to jednocześnie zdefiniowania w programie 20 zbiorów binarnych; <długość rekordu> - liczba całkowita bez znaku określająca długość rekordu w słowach. Przekraczać 255 słów;

*OPT[IONS] (<wykaz opcji>)

Dyrektywa umożliwia włączenie i wyłączenie opcji sterujących pracą kompilatora. W dyrektywie może wystąpić kilka opcji jednocześnie, które powinny być oddzielone przecinkiem. Dla dokonania wyłączenia określonej opcji jej nazwa jest poprzedzona literą "N". Dyrektywa może znajdować się tylko między segmentami programu.
Wykaz opcji:
LIS[T]
Opcja wyprowadzania listingu programu w czasie kompilacji, wraz z sygnalizacją błędów (jeśli wystąpiły) oraz informacją o skompilowanych segmentach. Listing programu w czasie kompilacji zawiera numerację wszystkich czynnych linii fortranowskich. Numeracja rozpoczyna się od zera (0). Pierwsza instrukcja czynna w programie (zawsze tą instrukcją jest słowo MASTER), posiada numer linii równy zero (0). Następne linie w programie są numerowane kolejno (wzrastająco). Nie numerowane są linie komentarza, linie rozpoczynające się od znaku "&" (linie kontynuacji) oraz linie zawierające dyrektywy kompilatora.
SLI[ST]
Opcja skróconego listingu programu w czasie kompilacji. Jeżeli zapalona jest opcja ?SLI to podawane są informacje jedynie o skompilowanych segmentach programu oraz (jeżeli wystąpiły błędy) drukowana jest błędna linia fortranowska i numer błędu. Jeżeli opcja jest zgaszona to nie są podawane żadne informacje o przebiegu kompilacji; (jeżeli wcześniej nie została zapalona opcja ?LIS).
NLI[ST]
Opcja powoduje zgaszenie opcji LIST, jeśli była uprzednio zapalona. Powoduje ona drukowanie jedynie informacji o skompilowanych segmentach i błędach.
COM[PILE]
Opcja powoduje sprawdzenie poprawności programu źródłowego fortranowskiego. Jednocześnie przy zapalonej opcji, kompilator generuje kod w postaci rozkazów w języku symbolicznym ASSEMBLER (ASSM). Generacja kodu odbywa się tylko do momentu wystąpienia pierwszego błędu w programie. Natomiast w dalszym ciągu kompilacji odbywa się tylko analiza poprawności pozostałej części programu, wraz z sygnalizacją (jeśli wystąpiły) błędów. Po zakończeniu analizy programu, kompilator informuje odpowiednim wydrukiem o globalnej ilości błędów w programie.
NCO[MPILE]
Opcja powoduje zgaszenie opcji COMPILE. Kompilator dokonuje tylko analizę poprawności programu z wydrukiem informacji o skompilowanych segmentach i błędach (jeżeli wystąpiły). Kompilator nie generuje żadnych kodów.
ARR[AY]
Opcja włącza do programu wynikowego (binarnego) procedury kontroli przekroczenia zakresów tablic.
TRA[CE]
Opcja dołącza do programu wynikowego (binarnego) procedurę śledzenia programu.
NTR[ACE]
Opcja wyłącza śledzenie programu. Wyłączanie opcji TRACE umożliwia śledzenie tylko wybranych segmentów programu. Wymagane jest jednak to, aby przy tego typu działaniach pojawiła się dyrektywa *OPT na początku programu z zapaloną opcją TRACE, a następnie można ją gasić i zapalać w dowolnych miejscach programu lecz tylko między segmentami. Niedozwolone jest użycie tej opcji wewnątrz segmentów.
IFC[OMPILE]
Opcja uruchomienia kompilacji warunkowej. Wiersze rozpoczynające się znakiem waluty "$" (instrukcje testujące) są analizowane przez kompilator jedynie wtedy, gdy przy jego uruchomieniu zapalona była opcja IFCOMPILE. Jeżeli opcja jest zgaszona to kompilator traktuje instrukcje testujące jak wiersze komentarza;
POI[NTER]
Opcja tworzenia programów konwersacyjnych. W wyniku zapalenia tej opcji nie wyprowadzany jest na monitor użytkownika znak zgłoszenia programu ">". Instrukcja READ przed rozpoczęciem operacji czytania nie generuje znaków LF/CR (zmiana linii).
OVL
Zapalona opcja pozwala na wykonanie kompilacji programów fortranowskich, które będą nakładkowane. Opcja powoduje wygenerowanie przez kompilator rozkazów niezbędnych do właściwego funkcjonowania nakładkowania.

Źródło: Translator języka CSL-CROOK dla minikomputera MERA-400 w systemie operacyjnym CROOK-4, Instrukcja Programisty (wersja-17/2), Janusz Gocałek, Jacek Klauziński, Poznań, 1985