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