Prohlášení (počítačová věda) - Statement (computer science)

V programování počítače , je výrok je syntaktická jednotka zařízení naléhavý programovací jazyk , který vyjadřuje určitou akci, které mají být provedeny. Program napsaný v takovém jazyce je tvořen sekvencí jednoho nebo více příkazů. Prohlášení může mít interní komponenty (např. Výrazy ).

Mnoho programovacích jazyků (např. Ada , Algol 60 , C , Java , Pascal ) rozlišuje mezi příkazy a definicemi/deklaracemi . Definice nebo deklarace určuje data, na kterých má program fungovat, zatímco příkaz určuje akce, které je třeba s těmito daty provést.

Prohlášení, která nemohou obsahovat jiná tvrzení, jsou jednoduchá ; ty, které mohou obsahovat jiná tvrzení, jsou složené .

Vzhled příkazu (a skutečně programu) je určen jeho syntaxí nebo gramatikou. Význam prohlášení je určen jeho sémantikou .

Jednoduchá prohlášení

Jednoduchá prohlášení jsou sama o sobě úplná; mezi ně patří přiřazení, volání podprogramů a několik příkazů, které mohou významně ovlivnit tok řízení programu (např. přechod , návrat , zastavení/zastavení). V některých jazycích jsou vstup a výstup, tvrzení a výstupy zpracovávány speciálními příkazy, zatímco jiné jazyky používají volání předdefinovaných podprogramů.

  • úkol
    • Fortran: variable = expression
    • Pascal, Algol 60, Ada: variable := expression;
    • C, C#, C ++, PHP, Java: variable = expression;
  • volání
    • Fortran: CALL subroutine name(parameters)
    • C, C ++, Java, PHP, Pascal, Ada: subroutine name(parameters);
  • tvrzení
    • C, C ++, PHP: assert(relational expression);
    • Jáva: assert relational expression;
  • jít do
    • Fortran: GOTO numbered-label
    • Algol 60: goto label;
    • C, C ++, PHP, Pascal: goto label;
  • vrátit se
    • Fortran: RETURN value
    • C, C ++, Java, PHP: return value;

Složené prohlášení

Složené příkazy mohou obsahovat (sekvence) příkazů, které lze vnořit do jakékoli přiměřené hloubky, a obecně zahrnují testy, které rozhodnou, zda budou tyto obsažené příkazy poslouchat nebo opakovat.

Zápis pro následující příklady:
  • <prohlášení> je jakýkoli jednotlivý příkaz (může být jednoduchý nebo složený).
  • <sekvence> je libovolná sekvence nula nebo více <prohlášení>
Některé programovací jazyky poskytují obecný způsob seskupování příkazů dohromady, takže jakékoli jediné <prohlášení> lze nahradit skupinou:
  • Algol 60: begin <sequence> end
  • Pascal: begin <sequence> end
  • C, PHP, Java: { <sequence> }
Jiné programovací jazyky mají na každém druhu složeného příkazu jiný speciální terminátor, takže jeden nebo více příkazů je automaticky považováno za skupinu:
  • Ada: if test then <sequence> end if;

Mnoho složených příkazů jsou příkazy smyčky nebo příkazy volby. Teoreticky je vyžadován pouze jeden z každého z těchto typů příkazů. V praxi existují různé zvláštní případy, které se vyskytují poměrně často; ty mohou usnadnit pochopení programu, mohou usnadnit programování a často mohou být implementovány mnohem efektivněji. Existuje mnoho jemností, které zde nejsou uvedeny; podrobnosti najdete v odkazovaných článcích.

  • počet řízená smyčka :
    • Algol 60: for index := 1 step 1 until limit do <statement> ;
    • Pascal: for index := 1 to limit do <statement> ;
    • C, Java: for ( index = 1; index <= limit; index += 1) <statement> ;
    • Ada: for index in 1..limit loop <sequence> end loop
    • Fortran 90:
DO index = 1, limit
<sledek>
KONEC DO
  • podmínkově řízená smyčka s testem na začátku smyčky:
    • Algol 60: for index := expression while test do <statement> ;
    • Pascal: while test do <statement> ;
    • C, Java: while (test) <statement> ;
    • Ada: while test loop <sequence> end loop
    • Fortran 90:
DO WHILE (test)
<sledek>
KONEC DO
  • podmínkově řízená smyčka s testem na konci smyčky:
    • Pascal: repeat <sequence> until test; { note reversed test}
    • C, Java: do { <sequence> } while (test) ;
    • Ada: loop <sequence> exit when test; end loop;
  • smyčka řízená podmínkami s testem uprostřed smyčky:
    • C: do { <sequence> if (test) break; <sequence> } while (true) ;
    • Ada: loop <sequence> exit when test; <sequence> end loop;
  • if-statement jednoduchá situace:
    • Algol 60:if test then <unconditional statement> ;
    • Pascal:if test then <statement> ;
    • C, Java: if (test) <statement> ;
    • Ada: if test then <sequence> end if;
    • Fortran 77+:
POKUD (test) POTOM
<sledek>
KONEC IF
  • if-statement obousměrná volba:
    • Algol 60:if test then <unconditional statement> else <statement> ;
    • Pascal:if test then <statement> else <statement> ;
    • C, Java: it (test) <statement> else <statement> ;
    • Ada: if test then <sequence> else <sequence> end if;
    • Fortran 77+:
POKUD (test) POTOM
<sledek>
JINÝ
<sledek>
KONEC IF
  • vícecestný výběr příkazu case/switch :
    • Pascal: case c of 'a': alert(); 'q': quit(); end;
    • Ada: case c is when 'a' => alert(); when 'q' => quit(); end case;
    • C, Java: switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
  • Zpracování výjimek :
    • Ada: begin protected code except when exception specification => exception handler
    • Jáva: try { protected code } catch (exception specification) { exception handler } finally { cleanup }
    • Krajta: try: protected code except exception specification: exception handler else: no exceptions finally: cleanup

Syntax

Kromě přiřazení a volání podprogramů většina jazyků začíná každý příkaz speciálním slovem (např. Přejít, pokud, zatímco atd.), Jak je uvedeno ve výše uvedených příkladech. K popisu formy prohlášení v různých jazycích byly použity různé metody; formálnější metody bývají přesnější:

  • Algol 60 používal formu Backus – Naur (BNF), která stanovila novou úroveň specifikace jazykové gramatiky.
  • Až do Fortranu 77 byl jazyk popsán v anglické próze s příklady, od Fortranu 90 byl jazyk popsán pomocí varianty BNF.
  • Cobol používal dvourozměrný metajazyk.
  • Pascal používal jak syntaxové diagramy, tak ekvivalentní BNF.

BNF používá k vyjádření opakování rekurzi, proto byla navržena různá rozšíření, která umožňují přímou indikaci opakování.

Prohlášení a klíčová slova

Některé gramatiky programovacího jazyka si vyhrazují klíčová slova nebo je speciálně označují a nedovolují je použít jako identifikátory . To často vede k gramatikám, které lze snáze analyzovat a které vyžadují méně vyhledávání .

Žádná rozlišující klíčová slova

Fortran a PL/1 nemají vyhrazená klíčová slova, což umožňuje prohlášení jako:

  • v PL/1:
    • IF IF = THEN THEN ... (druhá IFa první THENjsou proměnné).
  • ve Fortranu:
    • IF (A) X = 10... podmíněné prohlášení (s jinými variantami)
    • IF (A) = 2 přiřazení k předplacené proměnné s názvem IF
Protože mezery byly volitelné až do Fortran 95, překlep mohl zcela změnit význam prohlášení:
  • DO 10 I = 1,5 začátek smyčky s I běžící od 1 do 5
  • DO 10 I = 1.5 přiřazení hodnoty 1,5 proměnné DO10I

Označená slova

V Algol 60 a Algol 68 byly speciální tokeny rozlišeny výslovně: pro zveřejnění, např begin. Tučným písmem ; pro programování s nějakým speciálním označením, např. příznakem ( 'begin), uvozovkami ( 'begin') nebo podtrženým ( beginna Elliott 503 ). Říká se tomu „stropping“.

Tokeny, které jsou součástí syntaxe jazyka, tedy nejsou v konfliktu s názvy definovanými programátorem.

Vyhrazená klíčová slova

Některá jména jsou vyhrazena jako součást programovacího jazyka a nelze je použít jako názvy definované programátorem. Většina nejpopulárnějších programovacích jazyků používá vyhrazená klíčová slova. Mezi rané příklady patří FLOW-MATIC (1953) a COBOL (1959). Od roku 1970 patří mezi další příklady Ada, C, C ++, Java a Pascal. Počet vyhrazených slov závisí na jazyce: C má asi 30, zatímco COBOL asi 400.

Sémantika

Sémantika se zabývá významem programu. Dokumenty standardů pro mnoho programovacích jazyků používají BNF nebo nějaký ekvivalent k vyjádření syntaxe/gramatiky poměrně formálním a přesným způsobem, ale sémantika/význam programu je obecně popsána pomocí příkladů a anglické prózy. To může mít za následek nejednoznačnost. V některých popisech jazyků je význam složených příkazů definován použitím „jednodušších“ konstrukcí, například smyčku while lze definovat kombinací testů, skoků a popisků pomocí ifa goto.

Článek o sémantice popisuje několik matematických/logických formalismů, které byly použity k přesnému určení sémantiky; ty jsou obecně komplikovanější než BNF a žádný způsob není obecně přijímán jako cesta. Některé přístupy efektivně definují tlumočníka pro jazyk, některé používají formální logiku k uvažování o programu, některé připojují přípony k syntaktickým entitám, aby zajistily konzistenci atd.

Výrazy

Často se rozlišuje mezi příkazy, které se provádějí, a výrazy , které se vyhodnocují. Hodnota získaná z výrazu se často používá jako součást příkazu, např. Přiřazení variable := expression;

Některé programovací jazyky (např. C, C ++) umožňují některým příkazům poskytnout výsledek (technicky všechny příkazy poskytují výsledek, ale tento výsledek je často typu 'void' a nelze jej použít k ničemu). Nejužitečnějším příkazem, který poskytuje výsledek, je přiřazení, jehož výsledkem je právě přiřazená hodnota.

To může být užitečné pro vícenásobnou inicializaci:

i = j = 0; který je považován za i = (j = 0);

Může to také mít za následek jednoduché potíže s prsty, které zcela změní význam nějakého kódu:

if (i == j) {. . . };testy, aby zjistil, zda ise rovnáj
if (i = j) { . . . };přiřadí hodnotu jk ia poté otestuje, zda je tato hodnota nenulová.

Některé jazyky (Algol 60, Pascal) umožňují vícenásobné přiřazení, ale neumožňují, aby se přiřazení zobrazovala ve výrazech.

Rozšiřitelnost

Většina jazyků má pevnou sadu příkazů definovaných jazykem, ale došlo k experimentům s rozšiřitelnými jazyky, které umožňují programátorovi definovat nové příkazy.

Viz také

Reference

externí odkazy