Hlavní navigace

Sémiotika formálních jazyků

10. 9. 2013 12:08 zboj

Sémiotika, relativně mladý vědní obor, se většině lidí pojí (pokud tedy vůbec s něčím) se jménem Umberta Eca. V 70. letech 20. století se vědci pokusili aplikovat principy sémiotiky i na programovací jazyky. Jedním z prvních byl Heinz Zemanek.

Sémiotika rozděluje aspekty (formálních, tedy i programovacích) jazyků na syntaktiku, sémantiku a pragmatiku. Syntaktika popisuje vztahy mezi znaky navzájem, sémantika vztahy mezi znaky a jejich významem a pragmatika vztahy mezi znaky a interpretantem.

Syntaktiku (neplést se syntaxí) ani sémantiku asi není nutné ilustrovat na příkladech. Pragmatika je v tomto kontextu méně známá, uveďme si proto příklad (v Prologu):

sousedi(cesko, slovensko). sousedi(cesko, polsko). sousedi(X, Y) :- sousedi(Y, X).

Pro jednoduchost uvádím pouze dva fakty. Pravidlo na třetí řádce říká, že relace sousedi je, ve shodě se znalostmi o reálném světě, komutativní. Uvedený kód je logicky korektní (z pohledu predikátové logiky) a Prolog nám vypíše všechna řešení (tj. rekurzivně vyčíslí celou relaci). Uvažme nyní mírně pozměněný program.

sousedi(X, Y) :- sousedi(Y, X). sousedi(cesko, slovensko). sousedi(cesko, polsko).

Oba kódy jsou ze sémantického hlediska ekvivalentní, nicméně u druhého se Prolog zacyklí, aniž by vydal nějaký výsledek. Liší se totiž kontextuální interpretace uvedeného kódu. V tomto příkladě je problém v tom, že Prolog nepoužívá úplnou vyhledávací strategii (kvůli šetření pamětí), takže na některé větve výpočtu se nikdy nedostane. Prolog není čistě deklarativní, proto záleží na pořadí klauzulí.

Pod pragmatiku spadají i tzv. indexikální výrazy, tedy takové, jež závisí na kontextu. Kód class X { … }; má v C++ vždy shodný význam bez ohledu na kontext. Na druhou stranu this->print(„1234“); nemá samo o sobě význam žádný, protože this je lexikální výraz (jeho významem je funkce z kolekce kontextů do kolekce objektů). Podle kontextu, v němž se tento výraz vyskytuje, se program také vůbec nemusí přeložit (není syntakticky správný), případně může být sémanticky nekorektní (což se při překladu může projevit, ale také nemusí), nebo může vyvolat běhovou chybu.

Nově se sémiotikou ve spojení s vyčíslitelností zabývá Peter B. Andersen. Každý vývojář, který je víc než „cvičená opice generující bezmyšlenkovitě kód“, by výsledky jeho práce měl alespoň zběžně znát.

Sdílet