Programovací jazyky, syntaxe, sémantika, zpsoby popisu

Podobné dokumenty
1 Píklady popisu typických konstrukcí

Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

Formální jazyky a gramatiky Teorie programovacích jazyků

2 Formální jazyky a gramatiky

1 Sémantika a její vztah k syntaxi

Každý datový objekt Pythonu má minimáln ti vlastnosti. Identitu, datový typ a hodnotu.

Programovací jazyk Pascal

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Pojem binární relace patří mezi nejzákladnější matematické pojmy. Binární relace

Formální systém výrokové logiky

4.2 Syntaxe predikátové logiky

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Formální jazyky a automaty Petr Šimeček

Konstruktory překladačů

Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

1. Signatura datového typu

Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Lexikální analýza. Miroslav Beneš Dušan Kolář

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie.

Aritmetika s didaktikou I.

Úvod do programovacích jazyků (Java)

Výroková logika. Teoretická informatika Tomáš Foltýnek

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Automaty a gramatiky

/1: Teoretická informatika(ti) přednáška 4

AUTOMATY A GRAMATIKY

Matematická analýza 1

Semestrální práce z předmětu Teorie programovacích jazyků

Úvod do informatiky. Miroslav Kolařík

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

Konečný automat. Jan Kybic.

Lexikální analýza Teorie programovacích jazyků

Matematická logika. Miroslav Kolařík

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

Lineární algebra Kapitola 1 - Základní matematické pojmy

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Naproti tomu gramatika je vlastně soupis pravidel, jak

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP

Poslední aktualizace: 14. října 2011

Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.

DUM. Databáze - úvod

Jednoznačné a nejednoznačné gramatiky

Logika. 6. Axiomatický systém výrokové logiky

Teoretická informatika - Úkol č.1

Výroková a predikátová logika - VI

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

UČEBNÍ TEXTY VYSOKÝCH ŠKOL. Prof. RNDr. Milan Češka, CSc. Gramatiky a jazyky

Vlastnosti regulárních jazyků

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

Úvod do predikátové logiky. (FLÚ AV ČR) Logika: CZ.1.07/2.2.00/ / 1

Pravdpodobnost výskytu náhodné veliiny na njakém intervalu urujeme na základ tchto vztah: f(x)

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

Logické programy Deklarativní interpretace

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Teoretická informatika TIN

Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...

Teoretická informatika Tomáš Foltýnek Teorie čísel Nekonečno

TGH02 - teorie grafů, základní pojmy

Pumping lemma - podstata problému. Automaty a gramatiky(bi-aag) Pumping lemma - problem resolution. Pumping lemma - podstata problému

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Výroková a predikátová logika - II

Predikátová logika. Teoretická informatika Tomáš Foltýnek

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Výroková a predikátová logika - VII

Obsah Předmluva Rekapitulace základních pojmů logiky a výrokové logiky Uvedení do predikátové logiky...17

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

Algoritmizace a programování

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

TGH02 - teorie grafů, základní pojmy

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23

2.2 Sémantika predikátové logiky

B i n á r n í r e l a c e. Patrik Kavecký, Radomír Hamřík

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Doporučené příklady k Teorii množin, LS 2018/2019

Cílem kapitoly je opakování a rozšíření středoškolských znalostí v oblasti teorie množin.

Modely Herbrandovské interpretace

Implementace LL(1) překladů

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 21. března / 50

Co je to univerzální algebra?

Lexikální analýza (Obsah)

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

grupa těleso podgrupa konečné těleso polynomy komutativní generovaná prvkem, cyklická, řád prvku charakteristika tělesa

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Překladač a jeho struktura

Množiny, základní číselné množiny, množinové operace

Rzné algoritmy mají rznou složitost

RELACE, OPERACE. Relace

Paradigmata programování 1

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

Rekurentní rovnice, strukturální indukce

Rekurentní rovnice, strukturální indukce

Transkript:

Sémantika programovacích jazyk: Syntaxe a sémantika Syntaxe a sémantika Programovací jazyky, syntaxe, sémantika, zpsoby popisu Ti hlavní charakteristiky jazyka (sémiotika) jsou: - syntax, sémantika a pragmatika jazyka formáln: Zhruba: syntaxe se zabývá formou (znaky a jejich vztahy), sémantika významem znak, pragmatika závislostí konstrukcí na nositeli Sémantika odrda sémiotiky, kde se jako znaky používají symboly abecedy písmena, sémiotika je obecnjší nauka o znakových systémech. Oblastí jejího zájmu nejsou jen jazykové znaky, ale obecn i všechny ostatní znakové systémy (piktogramy, dopravní znaky apod.). Nap. dopravní znaka je symbol, její tvar uruje kategorii, obrázek význam. Vlastní znakové systémy s pravidly gramatickými i sémantickými mají mj. umlecké obory, náboženství, hry nebo rituály. Za zakladatele moderní sémiotiky je považován americký filosof Charles Peirce (1839 1914), jenž rozdlil znaky na ikony, indexy a symboly. Sémantika je nauka o významu jednotlivých slov, morfém a jiných znak, pípadn též jejich vztahu ke skutenosti, kterou oznaují. Slovo vzniklo z eckého, séma znamená význam (nap. semafor = nosi významu). Vazbami mezi jednotlivými znaky tmito slovy se zabývá syntax. Sémantika je souástí sémiotiky, která se zabývá celými znakovými systémy. A neprázdná konená množina - abeceda jazyka. Syntaxe se zabývá vymezením formálního jazyka L A* jako podmnožiny etzc nad abecedou, které tvoí správné zápisy v daném jazyce - vty jazyka. Pívlastek formální vyjaduje nepítomnost definice významu zápis. Sémantika pak definuje pro každou syntakticky správnou vtu jazyka (syntakticky správný program p L) jeho význam. Pragmatika se u programovacího jazyka neuvažuje. Sémantika (pes jazykovou rovnost): Sémantika úzce souvisí s jazykovou rovností L L Libovolnou binární relaci L L, která má vlastnosti ekvivalence (je reflexivní, symetrická a tranzitivní), lze nazvat jazykovou rovností a považovat za definici sémantiky jazyka. Jazykovou rovností je ureno, které zápisy jsou významov ekvivalentní - mají stejný význam. Jazyková rovnost indukuje na množin L rozklad, jehož tídy pedstavují možné významy v abstraktním smyslu (až na izomorfismus). P.: Jazyk binárních zápis pirozených ísel Syntax: A = { 0, 1 }, L = A* - { e } (neprázdné etzce nad A) Karel Richta 1

Sémantika (pes jazykovou rovnost): Sémantika programovacích jazyk: Syntaxe a sémantika jazyková rovnost pro jazyk binárních zápis je nejmenší ekvivalence na L generovaná axiomem: x L. ( x x ) ( x x ) ( 0x x ), tj. = { <x,x> x L } { <0x,x> x L } Množina všech syntakticky správných binárních zápis pirozených ísel L se rozpadne na faktorovou množinu L/ [ 0 ] = { 0, 00, 000,... } [ 1 ] = { 1, 01, 001,... } [ 10 ] = { 10, 010, 0010,... },... L/ je izomorfní (jako množina) s množinou pirozených ísel Nat. Odpovídajícím morfismem je libovolné kódování (bijektivní zobrazení) k: L/ Nat, kterým lze stanovit, jaké pirozené íslo k(x) zastupuje tída ekvivalence [ x ] L/ a tedy i které pirozené íslo oznauje zápis x (a rovnž všechny zápisy ekvivalentní s x, tj. všechna y taková, že y x). Sémantika (pomocí modelu): Postupovat lze i obrácen - nejprve definovat zamýšlený model M význam jazykových konstrukcí. M pedstavuje universum význam - každý výraz jazyka oznauje nkterý prvek M (obrácen to platit nemusí). Poté uríme interpretaci výraz v M, tj. zobrazení int: L M. Jazyková rovnost je pak urena nepímo - dva výrazy jsou ekvivalentní práv tehdy, když mají stejnou interpretaci: x y int[x]== int[y], kde == M M je identita na M. Syntaxe programovacích jazyk Programovací jazyky mají nejastji kontextový charakter, který je dán zejména deklaracemi. Pestože existují speciální kontextové gramatiky, jejich použití není rozšíeno, nebo bezkontextové gramatiky jsou mnohem propracovanjší a pružnjší. Obvykle se proto pro popis syntaxe programovacích jazyk používají nejvýše bezkontextové gramatiky, což souvisí s tím, že pro každý kontextový jazyk existuje bezkontextový nadjazyk, který jej obsahuje (dkaz dále). Kontextové závislosti (omezení) se pak vyjadují jinými prostedky. Náznak dkazu: dle klasifikace gramatik podle Chomského Gramatika: <T, N, S, P>, S N Podle tvaru pravidel z P: (A,B N, a T, α,γ,δ (N T)*, β (N T) + ) regulární: A a nebo A ab bezkontextová: A α kontextová: γaδ γβδ (konený automat) (zásobníkový automat) (automat s RAM, lineárn ohraniený Turingv Karel Richta 2

stroj) neomezená: γaδ α Sémantika programovacích jazyk: Syntaxe a sémantika (Turingv stroj, rekurzivn spoetné jazyky) Bu γaδ γβδ kontextové pravidlo. Vytvoíme-li gramatiku, která pro každé takové pravidlo bude obsahovat (bezkontextové) pravidlo A β, pak zejm jazyk generovaný touto gramatikou obsahuje všechny vty pvodního kontextového jazyka. Libovolnou derivaci, která byla v pvodním jazyce provedena v kontextu γaδ, lze v nové gramatice provést rovnž (bez ohledu na kontext). Bezkontextový nadjazyk navíc obsahuje i vty, které vzniknou práv derivacemi bez ohledu na kontext. P.: Jazyk posloupností: A = { a }, L = A* P.: Jazyk binárních závorek: A = { a, b }, L = { a n b n n 1 } P.: Jazyk ternárních závorek: A = { a, b, c }, L = { a n b n c n n 1 } Syntaktické stromy Expr ::= Const Var-Name Expr + Expr Nejednoznanost Expr ::= Const Var Expr + Expr Com ::= Var := Expr if Expr then Com if Expr then Com else Com Abstraktní (syntaktické) stromy Jednoznanost bezkontextové gramatiky je nerozhodnutelná. Obecn je sice správnjší použít jednoznanou gramatiku, ale pi definici syntaxe asto využíváme nejednoznané gramatiky, nebo ty mohou být pehlednjší. Musíme však vždy zajistit, aby nejednoznanost odvození nemla vliv na definici sémantiky. (1) Expr ::= Const (2) Expr ::= Var-Name (3) Expr ::= Expr + Expr Výraz "x + y + z" má rzná možná odvození (derivace): Expr -3-> Expr+Expr -2-> x+expr -3-> x+expr+expr -2-> x+y+expr -2-> x+y+z (3,2.1,3,2,2) Expr -3-> Expr+Expr -2-> Expr+z -3-> Expr+Expr+z -2-> x+expr+z -2-> x+y+z (3,2.2,3,2,2) Abstraktní strom neobsahuje syntaktické detaily. Regulární výrazy Mnoho jazyk má rekurzivní charakter v tom smyslu, že syntaktické kategorie jsou Karel Richta 3

definovány rekurzivním odkazem na sebe sama: A γaδ Sémantika programovacích jazyk: Syntaxe a sémantika Pokud jsou γ i δ neprázdné etzce, mžeme je považovat za jakési závorky. Jazyky, které jsou generovány pomocí takových pravidel, obsahují tzv. závorkové struktury. Bezkontextové gramatiky jsou velmi vhodný nástroj práv na popis jazyk se závorkovými strukturami. Jazyky, které tuto vlastnost nemají, nazýváme regulární jazyky. Tída tchto jazyk zahrnuje mnoho zajímavých jazyk - asembler, píkazový jazyk operaního systému, atd. Regulární jazyk je jazyk, pro který existuje gramatika bez závorek. To neznamená, že by gramatika nemohla obsahovat rekurzi (levou nebo pravou). P.: Indentifikátory Id ::= Letter Id Letter Id Digit P.: Asembler Prog ::= e Prog Instr Instr ::= Op Opnd Id Op Opnd Op ::= LOAD STORE ADD JUMP... Opnd ::= Id Num Syntax regulárních jazyk lze popsat regulární gramatikou, ale asto používáme definici pomocí tzv. regulárních výraz. Bu A abeceda (konená neprázdná množina). Nech a A je libovolné písmeno abecedy. Zápisem [X] oznaíme množinu všech etzc, které zastupuje regulární výraz X. Množinu RE regulárních výraz (formální jazyk regulárních výraz) nad abecedou A definujeme: Syntax: RE e RE a Sémantika: RE RE RE RE RE RE RE RE* RE (RE) RE [ RE ] poznámka e { e } prázdný etz a { a } znak Karel Richta 4

Sémantika programovacích jazyk: Syntaxe a sémantika F G { fg f [F] g [G] } zetzení F G [F] [G] varianta F* { s 1 s k s i [F] } { e } iterace (F) [F] skupina P.: Syntax identifikátoru mžeme popsat regulárním výrazem: Dig = ( 0 1 2 3 4 5 6 7 8 9 ) Lett = ( a b... Z ) Id = Lett ( Lett Dig )* Mikrosyntaxe a makrosyntaxe Zápis v (programovacím) jazyce je tvoen posloupností znak abecedy, tj. L A*. Pro úely definice jazyka je vhodné považovat za abecedu jazyka nikoliv jednotlivé znaky, ale tzv. lexikální elementy (lexémy, tokens) - identifikátory, literály, operátory, komentáe atd. Prvním krokem pi popisu jazyka je tedy definice syntaxe tchto lexém - mikrosyntaxe (lexikon) jazyka Q A*. Programy pak považujeme za zápisy nad lexikonem jazyka Q, tj. L Q*. Popis syntaxe pak nazýváme makrosyntaxe jazyka. P.: Jazyk D (triangle - dle Pascala) Mikrosyntax: Program ::= ( Token Comment Blank )* Token ::= Integer-Literal Character-Literal Identifier Operator Keyword Identifier ::= Letter ( Letter Digit )*?? Identifier ::= Letter _ Identifier Digit Identifier Letter... Makrosyntax: Program ::= Command Command ::= V-Name := Expression... Expression ::= Literal V-Name Expression B-Operator Expression... Karel Richta 5

Sémantika programovacích jazyk: Syntaxe a sémantika Zobrazení (pevod) lex: A* Q* { error } se nazývá lexikální analýza a ídí se definicí mikrosyntaxe. asto se pro definici mikrosyntaxe používají regulární výrazy, pro makrosyntaxi se využívají obvykle bezkontextové gramatiky, BNF, EBNF, atd. Bezkontextová gramatika a statická sémantika Popis kontextového jazyka pomocí bezkontextového nadjazyka a omezujících podmínek vyjádených stejnými prostedky, jakými se popisuje sémantika - statická sémantika Zpsoby popisu sémantiky (dynamické sémantiky) operaní sémantika, denotaní sémantika, axiomatická sémantika, akní sémantika Podle zpsobu definice: deduktivní sémantika (jazyková rovnost urena pímo, interpretace nepímo) - axiomatická sémantika, pepisovací systémy induktivní sémantika (interpretace urena pímo, jazyková rovnost indukována interpretací) - denotaní sémantika Podle modelu: operaní sémantika (význam je modelován výpoetní posloupností) funkcionální sémantika (jako model použity funkce) relaní sémantika (jako model použity relace) kompilaní sémantika (jako model použit jiný jazyk) Karel Richta 6