CSL-CROOK - Dyrektywy sterujące
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