Translator języka ALGOL-1204M: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Linia 116: Linia 116:


* Symboli podstawowych ALGOLu, które oznaczają siebie - np. \i\f, \t\h\e\n, \e\l\s\e, \b\e\g\i\n, itd:
* Symboli podstawowych ALGOLu, które oznaczają siebie - np. \i\f, \t\h\e\n, \e\l\s\e, \b\e\g\i\n, itd:
* Krótkich zwrotów lub słów zaczerpniętych z orginalnej terminologi algolowskiej, np. OUT OF SCOPE, UNDECLARED
* Krótkich zwrotów lub słów zaczerpniętych z orginalnej terminologi algolowskiej, np. <tt>OUT OF SCOPE</tt>, <tt>UNDECLARED</tt>
* Symboli występujących w tłumaczonym tekście, np. nazw tam użytych
* Symboli występujących w tłumaczonym tekście, np. nazw tam użytych
* Symboli oznaczających elementy składniowe ALGOLu, różne od symboli podstawowych.
* Symboli oznaczających elementy składniowe ALGOLu, różne od symboli podstawowych.


Te ostatnie są utworzone z pierwszych liter odpowiednich terminów algolowskich. Na przykład symbol SIMAREX pochodzi od "simple arithmetic expression", FORCL - od "for clause" itd. Znaczenia wszystkich symboli podano w dodatku instrukcji. Wszystkie sygnały błędu translator tworzy wybierając odpowiednie symbole spośród wymienionych wyżej w punktach a-d; powstaje w ten sposób informacja, którą należy traktować zawsze jako komentarz do błędu wykrytego w programie, a nie jako błędny fragment programu. Aby wyjaśnić sposób interpretacji sygnałów błędu rozważmy przykład tekstu algolowskiego zawierającego błędy. Jest to przykład sztuczny, ale dobrze ilustrujący postać sygnalizacji błędu.
Te ostatnie są utworzone z pierwszych liter odpowiednich terminów algolowskich. Na przykład symbol <tt>SIMAREX</tt> pochodzi od "simple arithmetic expression", <tt>FORCL</tt> - od "for clause" itd. Znaczenia wszystkich symboli podano w dodatku instrukcji. Wszystkie sygnały błędu translator tworzy wybierając odpowiednie symbole spośród wymienionych wyżej w punktach a-d; powstaje w ten sposób informacja, którą należy traktować zawsze jako komentarz do błędu wykrytego w programie, a nie jako błędny fragment programu. Aby wyjaśnić sposób interpretacji sygnałów błędu rozważmy przykład tekstu algolowskiego zawierającego błędy. Jest to przykład sztuczny, ale dobrze ilustrujący postać sygnalizacji błędu.


Przykład:
Przykład:
Linia 159: Linia 159:
Przy niewielkiej wprawie i znajomości odpowiedniej terminologii angielskiej przytoczony wykaz można zinterpretować bez żadnych dodatkowych informacji; zawsze jest to możliwe po przejrzeniu skorowidza umieszczonego w dodatku. Spośród jedenastu przytoczonych sygnałów znaczenie siedmiu wynika natychmiast stąd, że:
Przy niewielkiej wprawie i znajomości odpowiedniej terminologii angielskiej przytoczony wykaz można zinterpretować bez żadnych dodatkowych informacji; zawsze jest to możliwe po przejrzeniu skorowidza umieszczonego w dodatku. Spośród jedenastu przytoczonych sygnałów znaczenie siedmiu wynika natychmiast stąd, że:


IN BOUND PAIR LIST
* <tt>IN BOUND PAIR LIST</tt> oznacza: "w wykazie par granicznych"
oznacza: "w wykazie par granicznych"
* <tt>UNDECLARED</tt> oznacza: "nie opisane"
UNDECLARED
* <tt>OUT OF SCOPE</tt> oznacza: "poza obszarem działania"
oznacza: "nie opisane"
OUT OF SCOPE
oznacza: "poza obszarem działania"


a symbole występujące pod tymi zwrotami są nazwami występującymi w tekście tłumaczonym przez translator. Pozostałe cztery sygnały są opisami błędów gramatycznych. W skorowidzu znajdziemy następujące wyjaśnienia:
a symbole występujące pod tymi zwrotami są nazwami występującymi w tekście tłumaczonym przez translator. Pozostałe cztery sygnały są opisami błędów gramatycznych. W skorowidzu znajdziemy następujące wyjaśnienia:


* SIMARVA simple aritmetic variable - prosta zmienna arytmetyczna
* <tt>SIMARVA</tt> simple aritmetic variable - prosta zmienna arytmetyczna
* RELOP relational operator - operator relacji
* <tt>RELOP</tt> relational operator - operator relacji
* PROID procedure identifier - nazwa procedury
* <tt>PROID</tt> procedure identifier - nazwa procedury
* SIMAREX simple arithmetic expresion - proste wyrażenie arytmetyczne
* <tt>SIMAREX</tt> simple arithmetic expresion - proste wyrażenie arytmetyczne
* IFCL if clause - warunek "jeśli"
* <tt>IFCL</tt> if clause - warunek "jeśli"


Znając sens symboli występujących w sygnale, nietrudno już zinterpretować ten sygnał w całości. Na przykład sygnał:
Znając sens symboli występujących w sygnale, nietrudno już zinterpretować ten sygnał w całości. Na przykład sygnał:
Linia 184: Linia 181:
który w żadnym poprawnym programie nie może wystąpić. Analogicznie trzeba odczytać pozostałe trzy sygnały błędów gramatycznych. Już z tego niewielkiego przykładu wynikają pewne ogólne wnioski:
który w żadnym poprawnym programie nie może wystąpić. Analogicznie trzeba odczytać pozostałe trzy sygnały błędów gramatycznych. Już z tego niewielkiego przykładu wynikają pewne ogólne wnioski:


'''Wniosek 1.''' Sygnały translatora są wynikiem czysto mechanicznej analizy programu. Człowiek analizujący ten sam tekst prawdopodobnie powie, że np. w wierszu 5 brakuje dwukropka, w wierszach 8 i 10 brakuje nawiasów do pary i jeszcze jakiegoś wyrażenia po prawej stronie równości, a w wierszu 16 brakuje nawiasów łańcuchowych.
'''Wniosek 1.'''


'''Wniosek 2.''' Interpretując sygnały błędów trzeba pamiętać, że wydrukowany przez translator numer wiersza nie zawsze odnosi się do wiersza w którym wystąpił błąd. Na przykład, błąd występujący zapewne w wierszu 9 jest sygnalizowy w czasie analizy wiersza 10. Stanie się zrozumiałe, jeśli przypomnimy sobie, że układ graficzny programu nie ma żadnego wpływu na jego interpretację. W tej sytuacji brak wyrażenia po prawej stronie znaku równości można wykryć dopiero po przejściu do analizy następnego wiersza. Niekiedy sygnał błędu zawiera tylko jeden symbol elementu składniowego. Oznacza to, że wymieniony element jest poprawny po względem semantycznym.
Sygnały translatora są wynikiem czysto mechanicznej analizy programu. Człowiek analizujący ten sam tekst prawdopodobnie powie, że np. w wierszu 5 brakuje dwukropka, w wierszach 8 i 10 brakuje nawiasów do pary i jeszcze jakiegoś wyrażenia po prawej stronie równości, a w wierszu 16 brakuje nawiasów łańcuchowych.
 
'''Wniosek 2.'''
 
Interpretując sygnały błędów trzeba pamiętać, że wydrukowany przez translator numer wiersza nie zawsze odnosi się do wiersza w którym wystąpił błąd. Na przykład, błąd występujący zapewne w wierszu 9 jest sygnalizowy w czasie analizy wiersza 10. Stanie się zrozumiałe, jeśli przypomnimy sobie, że układ graficzny programu nie ma żadnego wpływu na jego interpretację. W tej sytuacji brak wyrażenia po prawej stronie znaku równości można wykryć dopiero po przejściu do analizy następnego wiersza. Niekiedy sygnał błędu zawiera tylko jeden symbol elementu składniowego. Oznacza to, że wymieniony element jest poprawny po względem semantycznym.


Niekiedy translator zatrzymuje się natychmiast po wykryciu i zasygnalizowaniu jednego błędu. Oznacza to, że analizowany program nie jest ciągiem symboli ALGOLu 1204M albo pamięć operacyjna jest już całkowicie wypełniona informacjami o tłumaczonym programie.
Niekiedy translator zatrzymuje się natychmiast po wykryciu i zasygnalizowaniu jednego błędu. Oznacza to, że analizowany program nie jest ciągiem symboli ALGOLu 1204M albo pamięć operacyjna jest już całkowicie wypełniona informacjami o tłumaczonym programie.

Menu nawigacyjne