Fraza (programowanie)
Fraza – skł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 strukturalnej – instrukcji 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łowieif
, 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
- Michael Marcotty, Henry Ledgord, W kręgu języków programowania, tłum.: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1342-7
- John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ISBN 83-204-0246-8
- Jan Bielecki, Rozszerzony PL/I i JCL w systemie OS/RIAD, Państwowe Wydawnictwo Naukowe, Warszawa 1986, Seria: Biblioteka Informatyki, ISBN 83-01-06146-4
- Michał Iglewski, Jan Madey, Stanisław Matwin, Pascal. Język wzorcowy – Pascal 360., Wydawnictwa Naukowo-Techniczne, Warszawa 1984, wyd. III zm., Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-0597-1,