CSL-CROOK - Wykaz błędów kompilacji

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

Błędy fazy kompilacji są sygnalizowane przez kompilator w postaci dwuliterowego identyfikatora i numeru błędu. Identyfikator jest związany z odpowiednią grupą instrukcji, w których wystąpiły błędy. Po zakończeniu kompilacji w rejestrze czwartym (R4) znajduje się liczba błędów w programie. Jeżeli błędów nie było, to liczba w R4 jest równa zero (0). W opisie błędów pojawiają się pojęcia, operator binarny i unarny. Niżej podajemy ich definicję:

  • Operatory binarne są to następujące operatory dwuargumentowe: "**", "*", "/", "+", "-".
  • Operatory unarne są to następujące operatory jednoargumentowe: "+", "-" (użyte jako znaki występujące przed liczbą);

Kompilator nie sygnalizuje błędu jeżeli wystąpi niezgodność parametrów formalnych i aktualnych w wywołaniu procedury. Jeżeli w trakcie kompilacji pojawi się błąd SO, to należy segment, w którym wystąpił błąd, podzielić na dwa podprogramy.

Błędy w specyfikacjach

(DIMENSION, COMMON, EXTERNAL, EQUIVALENCE, BLOCK DATA)

("SP" - SPECIFICATION)

Nr błędu Opis
SP 00 błąd syntaktyczny;
SP 01 w specyfikacji typu występuje zmienna posiadająca typ już określony, niezgodny z bieżącą specyfikacją;
SP 02 niedozwolony obiekt w deklaratorze tablicy lub powtórzona deklaracja tablicy;
SP 03 za dużo wskaźników tablicy;
SP 04 wskaźnik tablicy niepoprawny;
SP 05 zmienna nie będąca parametrem procedury użyta w deklaratorze tablicy lub deklarator tablicy nie będącej parametrem procedury ma zmienne granice;
SP 06 przekroczenie rozmiaru tablicy;
SP 07 liczba ujemna jako wskaźnik tablicy;
SP 08 nadmiar w rozmiarze tablicy;
SP 09 niedozwolony obiekt użyty jako nazwa bloku COMMON;
SP 10 niedozwolony obiekt na liście bloku COMMON;
SP 11 powtórne wystąpienie nazwy lub zmiennej w specyfikacji COMMON;
SP 12 niedozwolony obiekt na liście specyfikacji EQUIVALENCE;
SP 13 zmienna będąca parametrem procedury na liście EQUIVALENCE;
SP 14 niedozwolony obiekt na liście specyfikacji EXTERNAL;
SP 15 niedozwolony obiekt na liście specyfikacji DATA;
ES n błąd w strukturze EQUIVALANCE;
EA n próba wykonania instrukcji EQUIVALANCE na obiektach należących do dwóch bloków COMMON lub niepoprawna equivalencja w bloku COMMON;
CO n equivalencja rozszerza lewostronnie blok COMM0N; n - numer grupy EQUIVALENCE w programie w której wykryto błąd;
BD 00 nieuzasadnione użycie nazwy w BLOCK DATA;
D1 n więcej zmiennych niż stałych w n-tej grupie DATA;
D2 n więcej stałych niż zmiennych w n-tej grupie DATA;
D3 n niezgodność typów w n-tej grupie DATA;

Błędy wyrażeń wskaźnikowych

(AE - ARRAY ERROR)

Nr błędu Opis
AE 00 błąd syntaktyczny;
AE 01 niedozwolony obiekt w wyrażeniu wskaźnikowym;
AE 02 brak zmiennej INTEGER po znaku mnożenia "*";
AE 03 brak stałej INTEGER po znakach arytmetycznych "+" lub "-";
AE 04 za duży wskaźnik tablicy;
AE 05 za mało wskaźników tablicy;
AE 06 za dużo wskaźników tablicy;
AE 07 nadmiar w stałej występującej jako wskaźnik tablicy;
AE 08 wskaźnik tablicy równy zero;

Błędy kontroli typu w wyrażeniach

(CT - CONTROL TYPE)

Nr błędu Opis
CT 01 niepoprawne typy operandów operatora binarnego;
CT 02 niepoprawny typ operandu operatora unarnego;
CT 03 niepoprawny typ argumentu unarnej funkcji standardowej wewnętrznej;
CT 04 niepoprawny typ argumentów binarnej funkcji standardowej wewnętrznej, wieloargumentowej funkcji wewnętrznej;
CT 05 niezgodność typu argumentu w różnych wywołaniach tej samej funkcji, SUBROUTINE, statement FUNCTION;

Błędy wyrażeń arytmetycznych

(EX - EXPRESSION)

Nr błędu Opis
EX 01 błąd w lewej stronie instrukcji podstawiania;
EX 02 niedozwolona sekwencja operatorów;
EX 03 niedozwolony separator;
EX 04 błąd struktury nawiasowej;
EX 05 brak operatora;
EX 06 operator logiczny NO. użyty jako operator binarny;
EX 07 błędne zakończenie instrukcji CALL;
EX 08 niedozwolony obiekt po lewej stronie instrukcji podstawienia, lub niedozwolona definicja funkcji lokalnej;
EX 09 niedozwolony obiekt z nawiasem;
EX 10 brak nawiasu w wywołaniu funkcji lub odwołaniu do tablicy;
EX 11 stała typu HOLLERITH w wyrażeniu, lub brak nawiasu w wywołaniu funkcji lub odwołaniu do tablicy;
EX 12 obiekt po CALL nie jest nazwą podprogramu;
EX 13 rekurencyjne wywołanie funkcji zewnętrznej lub lokalnej;
EX 14 nieodpowiednia lub niezgodna ilość argumentów z wcześniejszymi wywołaniami segmentów SUBROUTINE lub FUNCTION;
EX 15 nazwa funkcji standardowej wewnętrznej lub STATEMENT FUNCTION bez "(" na liście wywołania procedury;
EX 16 niedopuszczalny lub niezgodny z wcześniejszymi wywołaniami procedury lub funkcji, obiekt na liście argumentów;

Błędy w instrukcji IF

Nr błędu Opis
IF 00 zła składnia w instrukcji IF;
IF 01 wielokrotne IF logiczne lub niedozwolone instrukcje w IF;
IF 02 po IF logicznym zła instrukcja;
IF 03 zły typ wyrażenia w IF arytmetycznym;
IF 04 w IF logicznym wyrażenie nie jest typu LOGICAL;

Błędy w instrukcji DO

Nr błędu Opis
DO 00 niedozwolone wyrażenie arytmetyczne w pętli DO lub niepoprawna składnia instrukcji DO;
DO 01 przecinające się obszary pętli DO lub niedozwolony krok w pętli;
DO 02 brak etykiety po słowie kluczowym DO lub parametr pętli DO nie jest typu INTEGER;
DO 03 pętla DO do wcześniejszej instrukcji;
DO 06 powtórzony parametr sterujący w pętli DO;

Błędy instrukcji wejścia/wyjścia

(IO - INPUT/OUTPUT)

Nr błędu Opis
IO 00 niedozwolony znak w liście, niedozwolona składnia listy instrukcji wejścia/wyjścia;
IO 01 niedozwolony element listy;
IO 02 niezgodność nawiasów ();
IO 03 błąd liczby elementów w instrukcji DO - implikowanej lub niedopuszczalny znak (obiekt) w liście DO - implikowanym lub zła składnia listy DO - implikowanego;
IO 04 niedopuszczalne elementy w instrukcji DO - implikowanej;
IO 05 błąd słowa kluczowego instrukcji wejścia/wyjścia;

Błędy instrukcji FORMAT

(FT - FORMAT)

Nr błędu Opis
FT 00 niedozwolony znak, deskryptor, liczba >160, ponad 160 znaków między znakami apostrofa "'";
FT 01 niedozwolone położenie kropki, minusa lub przecinka w specyfikacji formatu;
FT 02 błąd prawego nawiasu ")";
FT 08 błąd deskryptora P;
FT 09 błąd deskryptora T;
FT 10 błąd deskryptora R;
FT 11 błąd lewego nawiasu "(";
FT 12 błąd znaku zmiany linii "/";
FT 13 błąd deskryptora X;
FT 14 błąd deskryptora H lub ' ' lub " "
FT 16 błąd deskryptora A;
FT 17 błąd deskryptora Z;
FT 18 błąd deskryptora Q;
FT 19 błąd deskryptora I;
FT 20 błąd deskryptora L;
FT 24 błąd deskryptora F;
FT 25 błąd deskryptora E;
FT 26 błąd deskryptora D;
FT 27 błąd deskryptora G;

Błędy w instrukcjach SUBROUTINE, FUNCTION

Nr błędu Opis
FS 00 brak nazwy w deklaracji segmentów SUBROUTINE lub FUNCTION;
FS 01 brak ogranicznika w deklaracji podprogramu (nawiasu lewego lub prawego);
FS 02 zły separator między parametrami;

Błędy w instrukcjach GOTO, ASSIGN

(LB - LABEL)

Nr błędu Opis
LE 00 niewłaściwy obiekt na miejscu etykiety w GO TO, IF, ASSIGN;
LB 00 etykieta zero;
LB 01 powtórzona etykieta;
VI zmienna niewłaściwego typu w GOTO, ASSIGN, DO;
IE zmienna lub stała niewłaściwego typu w GOTO, PAUSE;
TL złe zakończenie instrukcji;
TO zła składnia instrukcji GOTO;

Błędy końca zbioru

Nr błędu Opis
EF w trakcie pisania do zbioru lub czytania ze zbioru wystąpił znacznik końca zbioru;
EF 00 w zbiorze wystąpił niedozwolony znak lub składnia;
EF 01 wystąpił niewłaściwy numer urządzenia;

Inne sygnalizacje

Nr błędu Opis
?L brak deklaracji etykiety, do której nastąpiło odwołanie w segmencie, lub niedozwolona etykieta;
?D otworzone i niezamknięte DO (podaje się brakującą etykietę);
?J skok do instrukcji niewykonywalnej (podaje się jej etykietę);
?C nie wygenerowano żadnych instrukcji;
?O niezidentyfikowany operator;
ST brak instrukcji STOP w segmencie MASTER;
RT brak instrukcji RETURN w segmencie;
ID instrukcja niezidentyfikowana;
MF w trakcie kompilacji wystąpił koniec zbioru, a nie została użyta wcześniej dyrektywa #END;
WP instrukcja użyta w niewłaściwym miejscu;
SO przekroczenie zakresu pamięci roboczej, lub przepełnienie tablic wewnętrznych kompilatora (za dużo zmiennych w segmencie);
SX zły ogranicznik;
ST 00 błąd w instrukcji STOP lub PAUSE;
LF 01 brak deklaracji tablicy, lub niezidentyfikowana funkcja lokalna;
EO za dużo zmiennych w wyrażeniu arytmetycznym (przepełnienie zmiennych roboczych wyrażenia);

Błędy w dyrektywach kompilatora

Nr błędu Opis
?# brak dyrektywy kompilatora;
?H dyrektywa "#END" użyta w niewłaściwym miejscu;
#D błąd w dyrektywie lub dyrektywa nieistniejąca;

Błędy kompilacji assemblerem

ER FIN    <  ad >         @< nz >:
ER        <  nr >  <ad >  %< nbc>
ER FIN HUN 01425
  • ad - adres w pamięci;
  • nr - numer błędu;
  • nz - nazwa segmentu (niezidentyfikowana nazwa segmentu) w programie lub brak segmentu w programie, lub nazwa tablicy niezadeklarowanej w segmencie;
  • nbc - nazwa bloku COMMON (niezgodność w rozmiarach bloku o podanej nazwie, występującego w różnych segmentach programu);
  • UNKNOWN FILE - brak zbioru o podanej nazwie zadeklarowanego dyrektywą #LIB, #SWI lub brak bibliotek systemowych w użytkowniku LIBRAR;
  • UNKNOWN AREA - nieznany obszar (nazwa talerza) zadeklarowany w dyrektywach #LIB, lub #SWI;
  • ER FIN HUN - użycie w programie instrukcji we/wy zbiorów binarnych bez uprzedniej ich deklaracji zleceniem #DEF.

UWAGA: Pojawienie się komunikatu typu ER #<liczba> może świadczyć o błędnej generacji kompilatora. Należy o tych błędach poinformować autorów kompilatora. Do tych informacji należy dołączyć wydruki i program źródłowy (najlepiej na taśmie papierowej).

Ź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