CSL-CROOK - Wykaz błędów kompilacji
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