Separator (programowanie)

Separator (programowanie) – rodzaj ogranicznika zdefiniowanego w składni określonego języka programowania i stanowiącego element kodu źródłowego rozdzielający w ciągu znaków kodu źródłowego poszczególne jednostki leksykalne.

Funkcje separatora

edytuj

Kod źródłowy składa się na podstawowym poziomie z ciągu znaków, jednak z punktu widzenia programisty i programu translatora, z jednostek leksykalnych, jako podstawowych jednostek tekstu mających określone znaczenie (interpretację) w danym języku. Aby poszczególne jednostki leksykalne mogły zostać przez translator wyodrębnione z ciągu znaków stanowiącego kod źródłowy, muszą zostać rozdzielone ustalonymi w definicji języka jednostkami nazywanymi separatorami lub ogranicznikami.

Tak więc separatory w swojej podstawowej funkcji umożliwiają podział tekstu na jednostki leksykalne. Oprócz tej funkcji, separator może:

  • stanowić pewną jednostkę leksykalną o określonym znaczeniu w kodzie źródłowym (np. operator),
  • stanowić znak interpunkcyjny wyodrębniający większe jednostki kodu o określonym znaczeniu (np. terminator lub separator instrukcji, separator listy itd.),
  • nie mieć znaczenia w kodzie poza funkcją separatora, ale może zostać wprowadzony nadmiarowo w celu formatowania tekstu kodu źródłowego (np. kilka spacji na początku wiersza lub znak tabulacji, w celu wymuszenia wcięcia na wydruku kodu źródłowego)
  • pełnić wyłącznie funkcję separatora.

Pewne pary jednostek leksykalnych nie wymagają rozdzielenia separatorem. Na przykład identyfikator zmiennej i operator (który sam stanowić może separator) zapisany w wyrażeniu w większości języków nie musi być w typowym przypadku rozdzielany separatorem, gdyż same zasady notacji tych jednostek leksykalnych umożliwiają ich wyodrębnienie z kodu źródłowego.

Rodzaje separatorów

edytuj

Różne języki programowania mogą mieć zdefiniowany różny zestaw separatorów i własne zasady ich stosowania. Do typowych separatorów należą:

Separatory w wyrażeniach

edytuj

W większości uniwersalnych języków programowania wyrażenia mogą być zapisywane w notacji zbliżonej do matematycznej, bez konieczności stosowania wewnątrz zapisu wyrażeń dodatkowych znaków rozdzielających poszczególne jednostki leksykalne występujące w wyrażeniu, tj. literałów (np. liczbowych, znakowych, łańcuchowych i innych), identyfikatorów zmiennych, wywołań funkcji, operatorów itd. Z tego względu funkcję separatorów przejmują zastosowane w wyrażaniu operatory i nawiasy, jak np.:

 a:=d+15*func_t(b-c,x);

gdzie znak operatora "+" jest separatorem dla identyfikatora "d" i literału liczbowego "15", a nawias otwierający "(" dla identyfikatora funkcji "func_t" i identyfikatora zmiennej "b", itd. W pewnych przypadkach nie jest wymagane w ogóle rozdzielanie elementów wyrażenia separatorem, znany jest przykład w języku C dotyczący operatorów ++ i -- w połączeniu z operatorami + i -, np.:

 a=b+++c;

W powyższym przykładzie wyrażenia zapisano ciąg znaków "+++", który w języku C nie został zdefiniowany. Zdefiniowane są za to operator + i operator ++. Ponieważ nie zastosowano żadnego separatora, to interpretacja tego napisu zostanie przeprowadzona zgodnie z zasadą przyjętą w tym języku, że w tekście kodu źródłowego za kolejną jednostkę leksykalną przyjmuje się najdłuższy ciąg znaków, który może taką jednostkę stanowić. Oznacza to, że powyższy zapis zostanie zinterpretowany jak zapis:

 a=(b++)+c;

Aby zapisać to wyrażenie jako

 a=b+(++c);

oprócz powyższej konstrukcji z nawiasami można też zastosować separator, np. spację:

 a=b+ ++c;

a nawet mało czytelny separator w formie komentarza pustego:

 a=b+/**/++c;

Separatory w językach programowania

edytuj
języki programowania białe znaki komentarze operatory nawiasy znaki interpunkcyjne
spc=32 tab=9 nl=10 cr=13 inne w wyrażeniach
Forth + + null=0 wymagane
Turbo Pascal + + + + FF=12 dopuszczalne { }, (* *) + (), []
  • separator instrukcji: ";"
  • separator list: ","
  • terminator programu, modułu: "."
Turbo Prolog + + + + dopuszczalne /* */ + (), [] , ; . |
Snobol + + + + wymagane () ; :

Uwaga:

  • + : oznacza możliwość stosowania jako separatora
  • – : brak możliwości stosowania jako separatora

Zobacz też

edytuj

Bibliografia

edytuj