Nawias syntaktyczny – w programowaniu, to element składni określonego języka programowania służący definiowaniu strukturalnych elementów kodu źródłowego, takich jak bloki czy instrukcje strukturalne. Nawiasami syntaktycznymi w językach programowania są wybrane przez autorów konkretnego języka programowania słowa kluczowe, lub znaki nawiasów (symbole). Zarówno w przypadku słów kluczowych, jak i symboli, para nawiasów dla konkretnej konstrukcji, obejmuje słowo (lub symbol) otwierające oraz słowo (lub symbol) zamykające strukturę programową. Nawiasy syntaktyczne definiują takie elementy w kodzie źródłowym, jak np. instrukcje strukturalne, podprogramy, moduły, definicje typów strukturalnych (struktury, unie, rekordy, klasy itp.). Pośród języków programowania można wyróżnić języki, w których
rodzaj bloku | nawiasy unikatowe | jednolita konstrukcja | mieszane rozwiązania |
---|---|---|---|
Visual Basic[1][2] | C[3][4][5], C++[5] | Pascal[6][7][8] | |
podprogram |
Function F(ByVal P As Integer) As Integer
' blok podprogramu
End Function
|
int F(int P)
{
/* blok podprogramu */
}
|
function F(P: Integer): Integer;
begin
{ blok podprogramu }
end;
|
instrukcja warunkowa |
If warunek Then
' blok-if
Else
' blok-else
End If
|
if(warunek)
{
/* blok if */
}
else
{
/* blok else */
}
|
if warunek then
begin
{ blok if }
end
else
begin
{ blok else }
end;
|
pętla repetycyjna |
Do While warunek
' blok pętli
Loop
|
while(warunek)
{
/* blok pętli */
}
|
while warunek do
begin
{ blok pętli }
end;
|
instrukcja wyboru |
Select Case wyrażenie
' blok instrukcji wyboru
End Select
|
switch(wyrażenie)
{
/* blok instrukcji wyboru */
}
|
case wyrażenie do
{ blok instrukcji wyboru }
end;
|
struktura, rekord |
Type nazwa_struktury
' pola struktury
End Type
|
struct nazwa_struktury
{
/* pola struktury */
}
|
nazwa_struktury=record
{ pola struktury }
end;
|
Przykładowymi językami, w których stosuje się pierwsze z powyższych rozwiązań, są takie języki programowania jak np. Ada)[9][10], BASIC[11][12], Visual Basic[1][2], Clipper[13], Forth[14][15], Modula-2[16], PL/I[17][18] i inne. W językach tych słowem zamykającym wielu konstrukcji jest słowo end
. W pewnych przypadkach słowo to połączone jest z innym słowem, identyfikującym zamykaną strukturę (np. end function
, end if
, end select
itd.). Językami, w których stosuje się drugie z rozwiązań, to np. język C[3][4][5], C++[5] i podobne: {
... }
(choć i w tych językach jest wyjątek: do
... while(warunek);
), Lisp[19]: (
... )
. Istnieją też języki w których stosuje się rozwiązania mieszane, tzn. wobec pewnej grupy konstrukcji stosuje się rozwiązanie pierwsze, a wobec innej – drugie. Tak jest np. w języku Pascal, w którym w odniesieniu do instrukcji i bloków (programu, podprogramów), stosuje się zapis grupujący (begin
... end
), ale z wyłączeniem pewnych instrukcji (np. case
) oraz innych elementów np. definicji typów, dla których istnieją odrębne struktury grupujące (np. record
... end
), natomiast dla sekcji deklaracji: type, var, const, w ogóle nie definiuje się słowa zamykającego, a sekcja taka kończy się wraz z rozpoczęciem następnej sekcji lub na słowie begin
[6][7][8].
Struktura nawiasów syntaktycznych może być bardziej rozbudowana, w porównaniu do nawiasów stosowanych w wyrażeniach. Obejmuje bowiem konieczność definiowania wielu sekcji w ramach danej struktury nawiasu. Dotyczy to przede wszystkim instrukcji warunkowych i instrukcji wyboru, w których musi istnieć możliwość wyboru jednego z wielu wariantów. Są to jednak elementy pośrednie stosowane wewnątrz pewnej pary nawiasów syntaktycznych.
Za przykład może posłużyć ogólna postać instrukcji warunkowej w języku Visual Basic[1][2]:
If warunek-1 Then ' --- nawias syntaktyczny otwierający
' instrukcje-1
ElseIf warunek-2 Then ' --- elementy pośrednie
' instrukcje-2
ElseIf warunek-3 Then ' --- elementy pośrednie
' instrukcje-3
...
ElseIf warunek-n Then ' --- elementy pośrednie
' instrukcje-n
Else ' --- elementy pośrednie
' instrukcje-else
End If ' --- nawias syntaktyczny zamykający
język programowania | brak nawiasów | unikatowe konstrukcje | rozwiązania mieszane | jednolite konstrukcje | z pewnymi wyjątkami |
---|---|---|---|---|---|
Ada[9][10] | ![]() |
![]() |
![]() |
![]() |
n.d. |
Basic[11][12] | ![]() |
![]() |
![]() |
![]() |
n.d. |
C[3][4][5], C++[5] | ![]() |
![]() |
![]() |
![]() |
![]() |
Clipper[13] | ![]() |
![]() |
![]() |
![]() |
n.d. |
Forth[14][15] | ![]() |
![]() |
![]() |
![]() |
n.d. |
JEAN[20][21] | ![]() |
![]() |
![]() |
![]() |
n.d. |
Lisp[19] | ![]() |
![]() |
![]() |
![]() |
![]() |
Modula-2[16] | ![]() |
![]() |
![]() |
![]() |
n.d. |
Pascal[6][7][8] | ![]() |
![]() |
![]() |
![]() |
n.d. |
PL/I[17][18] | ![]() |
![]() |
![]() |
![]() |
n.d. |
PL/M[22][23] | ![]() |
![]() |
![]() |
![]() |
n.d. |
Visual Basic[1][2] | ![]() |
![]() |
![]() |
![]() |
n.d. |
n.d. – nie dotyczy |
<ref>
. Brak tekstu w przypisie o nazwie vb
<ref>
. Brak tekstu w przypisie o nazwie excelivba
<ref>
. Brak tekstu w przypisie o nazwie c-kr
<ref>
. Brak tekstu w przypisie o nazwie tc-jb
<ref>
. Brak tekstu w przypisie o nazwie cpp-jb
<ref>
. Brak tekstu w przypisie o nazwie pascal
<ref>
. Brak tekstu w przypisie o nazwie bp
<ref>
. Brak tekstu w przypisie o nazwie kilka
<ref>
. Brak tekstu w przypisie o nazwie ada
<ref>
. Brak tekstu w przypisie o nazwie ada95
<ref>
. Brak tekstu w przypisie o nazwie basic-zcz
<ref>
. Brak tekstu w przypisie o nazwie basic-wi
<ref>
. Brak tekstu w przypisie o nazwie clipper
<ref>
. Brak tekstu w przypisie o nazwie forth_jb
<ref>
. Brak tekstu w przypisie o nazwie forth_jr
<ref>
. Brak tekstu w przypisie o nazwie modula2
<ref>
. Brak tekstu w przypisie o nazwie pl1jb
<ref>
. Brak tekstu w przypisie o nazwie pl1a
<ref>
. Brak tekstu w przypisie o nazwie lisp
<ref>
. Brak tekstu w przypisie o nazwie jean
<ref>
. Brak tekstu w przypisie o nazwie jeanfortran
<ref>
. Brak tekstu w przypisie o nazwie plm
<ref>
. Brak tekstu w przypisie o nazwie isisii