Eisspeedway

Fraza (programowanie)

Frazaskładniowa jednostka podrzędna stanowiąca część definicji większej jednostki złożonej, występującej w składni określonego języka programowania. Rolą fraz jest modyfikowanie i definiowanie szczegółów działania określonej jednostki nadrzędnej, w szczególności instrukcji lub deklaracji.

Elementy jednostek składniowych

Frazy są więc jednym z elementów jednostek składniowych, które mogą występować opcjonalnie, lub mogą występować w różnej formie w zależności do definiowanego algorytmu. Frazy odróżniają się więc od elementów stałych definicji danej jednostki składniowej powyższymi cechami. Przykład w PL/I:

 DO WHILE warunek;
   instrukcje;
 END;

W powyższej instrukcji strukturalnejinstrukcji pętli – fraza WHILE jest opcjonalna i może nie występować lub występować w zależności od potrzeb, może zostać zastąpiona inną frazą, lub występować łącznie z inną frazą, taką jak TO, BY, UNTIL, REPEAT. Natomiast podstawowa jednostka identyfikowana słowem kluczowym DO, nie jest frazą i nie może zostać pominięta, gdyż zapis w postaci:

 WHILE warunek;
   instrukcje;
 END;

jest błędny, a jakakolwiek fraza, w tym przykładowa WHILE, nie może występować samodzielnie, z pominięciem jednostki nadrzędnej, w tym szczególnym przypadku instrukcji DO.

Miejsce występowania

Ponieważ frazy są częścią składową pewnej jednostki, występują w kodzie źródłowym, wyłącznie razem z daną jednostką nadrzędną, a próba użycia frazy samodzielnie, kończy się sygnalizowaniem błędu przez translator. Tylko nieliczne języki mają w swej składni frazy i samodzielne jednostki o identycznej budowie leksykalnej, co oznacza, że dany element może być użyty np. jako instrukcja samodzielna lub jako fraza innej instrukcji.

Frazy stosuje się w takich jednostkach składniowych jak:

  • deklaracje i definicje
  • instrukcje.

Określone frazy zdefiniowane w języku mogą występować wyłącznie w określonym kontekście, w określonym miejscu pewnej jednostki, lub kilku jednostek składniowych. Przykładowo w języku Pascal fraza else może wstąpić zarówno w instrukcji warunkowej if jak i w instrukcji wyboru case.

Frazy w deklaracjach i definicjach

Deklaracje i definicje służą do przypisania pewnemu obiektowi definiowanemu w kodzie źródłowym przez programistę, identyfikowanemu za pomocą utworzonego identyfikatora, jego właściwości i atrybutów. Takie deklaracje mogą zawierać także różne frazy definiujące pewne właściwości obiektu.

Przykładowo w języku PL/I istnieje rozbudowany zestaw fraz umożliwiający w deklaracjach podprogramów, przypisywać specyficzne atrybutu. Frazy te są opcjonalne. Przykładowe frazy to:

OPTIONS(opcje)
w tej frazie specyfikować można dodatkowe właściwości podprogramu, przykładowo opcja MAIN identyfikuje procedurę główną, od której rozpoczyna się wykonywanie programu,
RETURNS(typ)
fraza deklarująca podprogram o charakterze funkcyjnym, oraz definiująca typ zwracanej wartości,
frazy optymalizacyjne
definiujące atrybuty umożliwiające optymalizację kodu wynikowego przez translator, np. ORDER, REORDER, REDUCIBLE itd.,
RECURSIVE
dla podprogramów rekurencyjnych i inne.

W implementacji Turbo Pascal dostępne są dla podprogramów frazy:

inline(kod_maszynowy)
definiujący podprogram w kodzie maszynowym
assembler
podprogram napisany w asemblerze
forward
deklaracja wstępna (prototyp) i inne.

Frazy w instrukcjach

W instrukcjach, w szczególności instrukcjach strukturalnych, występują w językach programowania różne frazy, ale istnieje pewien zestaw typowych fraz definiowanych w większości języków programowania wysokiego poziomu:

Typowe frazy

Typowe frazy instrukcji występujące w wielu językach wysokiego poziomu:

else
fraza występująca w większości języków programowania, w których zdefiniowana jest instrukcja warunkowa typu if, definiuje ona czynności do wykonania w przypadku gdy warunek zawarty w instrukcji po słowie if, nie jest spełniony, zwykle ta fraza jest opcjonalna i może zostać pominięta, przykładowe języki: Pascal, C, C++, Visual Basic i inne,
{Pascal}
if a<b then c=1
       else c=2;
case, :, =>, when
fraza występująca w instrukcji wyboru, definiująca konkretny warunek, przy spełnieniu którego, zostaną wykonane zawarte w tej frazie instrukcje, zwykle występuje w instrukcji wyboru kilka takich fraz, przykładowe języki: Pascal, C, C++, Visual Basic i inne,
default, else, other, otherwise
fraza występująca w instrukcji wyboru, definiująca czynności do wykonania, gdy żaden z warunków szczególnych (case) nie zostanie uzgodniony w ramach bieżącej instrukcji wyboru, przykładowe języki: Pascal, C, C++, Visual Basic i inne,
{Pascal}
case a of
 1 : b=1
 2 : b=2
 3 : b=0
 else Error(5)
end;
to, until
fraza definiująca wartość końcową zakresu (ostatnią) dla zmiennej sterującej w instrukcji iteracyjnej typu for, przykładowe języki: Basic, Pascal, PL/I
step, by
fraza definiująca tzw. krok zmiennej sterującej, tzn. wartość o jaką ma się zmienić zmienna sterująca przy przejściu do kolejnej iteracji dla instrukcji typu for, przykładowe języki: Basic, PL/I
/* PL/I */
DO I=1 TO 10 BY 2 WHILE A<B;
  CALL WYKONAJ;
  CALL ZAMKNIJ;
END;

Specyficzne frazy

Oprócz typowych fraz instrukcji, konkretne języki lub ich implementacje, mogą wprowadzać do swojej składni specyficzne frazy, rzadko występujące w innych językach programowania. Przykłady:

BY NAME
fraza w języki PL/I, dla instrukcji przypisania, określająca, że przypisanie struktur ma następować według nazw pól, a nie rozmieszczenia w pamięci,
RECOVER
fraza w języku Clipper, dla instrukcji blokowej, definiująca akcje do wykonania w przypadku wystąpienia błędu
frazy instrukcji wejścia-wyjścia
rozbudowany zestaw fraz dla instrukcji wejścia-wyjścia np. w języku PL/I

Niejednolite konstrukcje

Różnorodność i duża liczba języków programowania sprawia, że wiele typowych konstrukcji w różnych językach może:

  • stanowić samodzielną jednostkę, np. instrukcję,
  • stanowić frazę pewnej jednostki nadrzędnej.

Powyższe stwierdzenie można prześledzić na przykładnie konstrukcji while warunek …; występującą w większości języków programowania wysokiego poziomu. Ta konstrukcja występuje jako:

  • instrukcja, w takich językach jak, np. C, C++, Pascal, Modula 2 i inne,
  • fraza instrukcji pętli, np. PL/I.

Zdefiniowanie konstrukcji WHILE jako frazy umożliwia definiowanie bardziej złożonego sterowania przepływem, niż w przypadku odrębnych instrukcji, np. łączenie fraz TO i WHLIE.

Język Pascal Język PL/I
for i=1 to 10 do
  begin
    if not (a<c) then goto koniec;
    { instrukcje }
  end;
koniec: ...
DO I=1 TO 10 WHILE A<C;
  /* instrukcje */
END;

Powyższe instrukcję będą wykonywane dla wartości zmiennej sterującej z zakresu 1 do 10, ale tylko gdy spełniony będzie równocześnie warunek, że a<c. Jak widać w Pascalu wymaga wprowadzenie tego warunku zastosowania dodatkowej instrukcji warunkowej i skoku.

Zobacz też

Bibliografia