Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

courses:a4m36tpj:zapisky [2012/01/05 07:31]
woxie2 fix
courses:a4m36tpj:zapisky [2025/01/03 18:29] (aktuální)
Řádek 21: Řádek 21:
   * Stav, ve kterém se může program nacházet (čili v případě aritmetických výrazů všechny možné kombinace jako (1+2), (2+1), (2+(5*6)+3),​ ...). Konfigurací tedy může být (a většinou i je) nekonečně mnoho.   * Stav, ve kterém se může program nacházet (čili v případě aritmetických výrazů všechny možné kombinace jako (1+2), (2+1), (2+(5*6)+3),​ ...). Konfigurací tedy může být (a většinou i je) nekonečně mnoho.
   * u PostFixu je to (CommandSeq,​ Stack)   * u PostFixu je to (CommandSeq,​ Stack)
 +  * DEF EN: Each state of the abstract machine is called a configuration.
  
 ==== Přepisovací funkce ==== ==== Přepisovací funkce ====
Řádek 28: Řádek 29:
 ==== Finální konfigurace ==== ==== Finální konfigurace ====
   * u PostFixu je to ([], S) -> již není s čím pracovat, množina příkazů je prázdná   * u PostFixu je to ([], S) -> již není s čím pracovat, množina příkazů je prázdná
-  * Finální konfigurace je konfigurace,​ která se již nemůže přepsat pomocí přepisovacího ​pravidlo ​(neexistuje ​na ní přepisovací pravidlo)+  * Finální konfigurace je konfigurace,​ která se již nemůže přepsat pomocí přepisovacího ​pravidla ​(neexistuje ​pro ni přepisovací pravidlo) 
 +  * Pro finální konfiguraci existuje výstup z výstupní funkce OF  
 + 
 +==== Stuck state ==== 
 +  * Je stav, který nelze dále přepsat, ale zároveň pro něj výstupní funkce OF nemá žádný výstup  
 +  * Dá se odstranit tím, že výstupní funkci předefinujeme přidáním stavu error 
 +  * Př: [pop, ε] //příkaz pop na prázdném zásobníku//​ 
 +  * Př odstranění:​ Postfixový stav se přepíše na chybový výstup, [pop, ε] -> error, po této úpravě se stav [pop, ε] změní ze  stuck state na finální konfiguraci ​
  
 ==== Operační sémantika ==== ==== Operační sémantika ====
Řádek 34: Řádek 42:
   * DEF(Turband):​ Operační sémantika vysvětluje význam jednotlivých konstruktů programovacího jazyka pomocí "​navazujících"​ kroků abstract machine. ​   * DEF(Turband):​ Operační sémantika vysvětluje význam jednotlivých konstruktů programovacího jazyka pomocí "​navazujících"​ kroků abstract machine. ​
   * EN DEF: An operational semantics explains the meaning of programming language constructs in terms of the step-by-step process of an abstract machine.   * EN DEF: An operational semantics explains the meaning of programming language constructs in terms of the step-by-step process of an abstract machine.
 +
  
 ==== Operační sémantika malého kroku (SOS - Small Step Operational Semantics) ==== ==== Operační sémantika malého kroku (SOS - Small Step Operational Semantics) ====
-  * Definujeme přepisovací pravidla, ​které ​vždycky v jednom kroku epíšou konfiguraci na jinou - nelze použít rekurzivní pravidlo.+  * Definujeme přepisovací pravidla, ​která mají v předpokladech jiné JEDNOKROKOVÉ relace
  
 ==== Operační sémantika velkého kroku (BOS - Big Step Operational Semantics) ==== ==== Operační sémantika velkého kroku (BOS - Big Step Operational Semantics) ====
-  * Přepisovací pravidla mohou být zadány rekurzivně (ale těch jednoduchých elementárních pravidel se stejně nezbavíme)+  * Přepisovací pravidla, která ​mohou mít v předpokladech ​
  
 ==== Denotační sémantika ==== ==== Denotační sémantika ====
Řádek 57: Řádek 66:
 ==== Množina ==== ==== Množina ====
   * Klasická množina jak jí známe, nemá žádné uspořádání a každý prvek se zde vyskytuje jen jednou - př. {0, 1, 2} == {2, 0, 1}   * Klasická množina jak jí známe, nemá žádné uspořádání a každý prvek se zde vyskytuje jen jednou - př. {0, 1, 2} == {2, 0, 1}
-  * Pozor, když máme množinu A = {0, 1, 2}, tak A* = (0, 1, 2, 1, 2, 0, 1, ...) čili sekvence+  * Pozor, když máme množinu A = {0, 1, 2}, tak A* = (0, 1, 2, 1, 2, 0, 1, ...) je sekvence
  
 ==== Sekvence ==== ==== Sekvence ====
Řádek 75: Řádek 84:
 E = E | (E+E) | (E*E) | N E = E | (E+E) | (E*E) | N
  
- * Pozn.: Uvědomme si, že znaménko + u výrazů(je za nimi znak přepisovací relace - šipka) vyjadřuje něco jiného než u N, u E znamená opravdu jen character, zatímco u N znamená klasické sčítání. Stejně tak pro * (násobení). Pokud jej píšeme na papír, měli bychom tato znaménka u E psát v kolečku (tady v dokuwiki je to aspoň tučným písmem). V denotační sémantice už je jejich rozdílný význam díky hranatým závorkám vidět lépe+  ​* Pozn.: Uvědomme si, že znaménko + u výrazů(je za nimi znak přepisovací relace - šipka) vyjadřuje něco jiného než u N, u E znamená opravdu jen character, zatímco u N znamená klasické sčítání. Stejně tak pro * (násobení). Pokud jej píšeme na papír, měli bychom tato znaménka u E psát v kolečku (tady v dokuwiki je to aspoň tučným písmem). V denotační sémantice už je jejich rozdílný význam díky hranatým závorkám vidět lépe. 
- * Pozn.2: Opravujte nám to, pokud si myslíte, že máme něco špatně (v ničem si nejsme 100% jistí)+ 
 ==== SOS ==== ==== SOS ====
  E -> N  E -> N
  
- ​(N<​sub>​1</​sub>​**+**N<​sub>​2</​sub>​) -> N<​sub>​3</​sub>​ kde N<​sub>​3</​sub>​=N<​sub>​1</​sub>​+N<​sub>​2</​sub>​+ ​(N<​sub>​1</​sub>​ **+** N<​sub>​2</​sub>​) -> N<​sub>​3</​sub>​ kde N<​sub>​3</​sub>​ = N<​sub>​1</​sub>​+N<​sub>​2</​sub>​
  
- ​(N<​sub>​1</​sub>​ * N<​sub>​2</​sub>​) -> N<​sub>​3</​sub>​ kde N<​sub>​3</​sub>​=N<​sub>​1</​sub>​*N<​sub>​2</​sub>​+ ​(N<​sub>​1</​sub>​ * N<​sub>​2</​sub>​) -> N<​sub>​3</​sub>​ kde N<​sub>​3</​sub>​ = N<​sub>​1</​sub>​ * N<​sub>​2</​sub>​
  
  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​
  ​--------------------------------------------------------------  ​--------------------------------------------------------------
- ​(E<​sub>​3</​sub>​** + ** E<​sub>​1</​sub>​) -> (E<​sub>​3</​sub>​** + **E<​sub>​2</​sub>​)+ ​(E<​sub>​3</​sub>​ ** + ** E<​sub>​1</​sub>​) -> (E<​sub>​3</​sub>​ ** + ** E<​sub>​2</​sub>​)
  
  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​
  ​--------------------------------------------------------------  ​--------------------------------------------------------------
- ​(E<​sub>​3</​sub>​*E<​sub>​1</​sub>​) -> (E<​sub>​3</​sub>​*E<​sub>​2</​sub>​)+ ​(E<​sub>​3</​sub>​ * E<​sub>​1</​sub>​) -> (E<​sub>​3</​sub>​ * E<​sub>​2</​sub>​)
  
  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​
  ​--------------------------------------------------------------  ​--------------------------------------------------------------
- ​(E<​sub>​1</​sub>​** + ** E<​sub>​3</​sub>​) -> (E<​sub>​2</​sub>​** + ** E<​sub>​3</​sub>​)+ ​(E<​sub>​1</​sub>​ ** + ** E<​sub>​3</​sub>​) -> (E<​sub>​2</​sub>​ ** + ** E<​sub>​3</​sub>​)
  
  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​  ​E<​sub>​1</​sub>​ -> E<​sub>​2</​sub>​
  ​--------------------------------------------------------------  ​--------------------------------------------------------------
- ​(E<​sub>​1</​sub>​*E<​sub>​3</​sub>​) -> (E<​sub>​2</​sub>​*E<​sub>​3</​sub>​)+ ​(E<​sub>​1</​sub>​ * E<​sub>​3</​sub>​) -> (E<​sub>​2</​sub>​*E<​sub>​3</​sub>​)
  
  
Řádek 119: Řádek 127:
  
 ==== DS ==== ==== DS ====
-Pozn.: Hranaté závorky by měli být dvojité, ale dokuwiki... 
  
- [E] = [N]+  *  [E]] = [N]]
  
- [N] = N+  *  [N]] = N
  
- [+] = ++  * [** **]] = +
  
- [*] = *+  * [ [*]] = *
  
- [E<​sub>​1</​sub>​+E<​sub>​2</​sub>​] = [E<​sub>​1</​sub>​][+][E<​sub>​2</​sub>​]+  * [ [E<​sub>​1</​sub>​** ** E<​sub>​2</​sub>​]] = [E<​sub>​1</​sub>​]] [ [** **]] [ [E<​sub>​2</​sub>​]]
  
- [E<​sub>​1</​sub>​*E<​sub>​2</​sub>​] = [E<​sub>​1</​sub>​][*][E<​sub>​2</​sub>​]+  * [ [E<​sub>​1</​sub>​*E<​sub>​2</​sub>​]] = [E<​sub>​1</​sub>​]]  [ [*]] [ [E<​sub>​2</​sub>​]]
  
  
Řádek 138: Řádek 145:
 Máme výraz: (3 + (6 * (4 + 8)) + (4 * 8)) Máme výraz: (3 + (6 * (4 + 8)) + (4 * 8))
  
-Při vyhodnocování postupujeme odspodu +Při vyhodnocování postupujeme odspodu, bacha, mezi cisly s mezery neni znamenko, ta jsou rovnou vyhodnocena napr radek 4   ​8 ​  jsou dve vetve : prvni: (char)4 ->(int) 4    a druha: (char)8 ->(int) 8    
 + 
              ​4 ​  8              ​4 ​  8
             -------             -------
Řádek 167: Řádek 174:
 ===== Quicksort ===== ===== Quicksort =====
  
- Dokuwiki neumí matematickou syntaxi, takže ​ε je epsilon ​a · je symbol zřetězení.+ malé epsilon - ε je prázdná množina ​a · je symbol zřetězení.
  
 ==== Zápis relací ==== ==== Zápis relací ====
Řádek 176: Řádek 183:
 ==== Velký krok ==== ==== Velký krok ====
  
-  ​* A = {A<​sub>​1</​sub>,​ A<​sub>​2</​sub>,​ ..., A<​sub>​n</​sub>​} - vstupní neseřazená množina +   * A = {A<​sub>​1</​sub>,​ A<​sub>​2</​sub>,​ ..., A<​sub>​n</​sub>​} - vstupní neseřazená množina 
-  * B - výstupní seřazená množina+   ​* B - výstupní seřazená množina
  
  ​QSORT({}) = ε  ​QSORT({}) = ε
Řádek 183: Řádek 190:
  ​QSORT(A) -> B  ​QSORT(A) -> B
  
- B = QSORT(A)·A<​sub>​1</​sub>​·QSORT(A+ // znak ā neznamena nic podstatneho,​ jde jen o to, aby se rozlisily podmnoziny//​ 
-  * x ∈ A: x > A<​sub>​1</​sub>​ + 
-  * x ∈ A: x ≤ A<​sub>​1</​sub>​ AND x != A<​sub>​1</​sub>​+ B = QSORT(ā)·A<​sub>​1</​sub>​·QSORT(a
 +   * ā ⊂ A, a ⊂ A      
 +   * x ∈ ā: x > A<​sub>​1</​sub>​ 
 +   ​* x ∈ a: x ≤ A<​sub>​1</​sub>​ AND x != A<​sub>​1</​sub>​
  
 ==== Malý krok ==== ==== Malý krok ====
Řádek 213: Řádek 223:
    ​MSORT(A) -> A  if len(A) = 1    ​MSORT(A) -> A  if len(A) = 1
  
-   D-> ​MSORT(B)·MSORT(C) pro všechny x ∈ B: pro všechny y ∈ C: x < y+   ​MSORT(B)·MSORT(C) ​-> D pro všechny x ∈ B: pro všechny y ∈ C: x < y
    ​-----------------------------------------------------------    ​-----------------------------------------------------------
                       MSORT(A) -> D                        MSORT(A) -> D 
Řádek 257: Řádek 267:
 ==== 3.3 ==== ==== 3.3 ====
  
-  * a - je to rotace, vezmu prvek z vrcholu zásobníku a dám ho na konec +  * a - <del>je to rotace, vezmu prvek z vrcholu zásobníku a dám ho na konec</​del>​ 
-  * b - 432432+      - je to rotace, vyjmu prvek (pop()) z vrcholu zásobníku a pokud je to cislo > 1 posunu prvek na vrcholu zasobniku (prvek hned za cislem, ktere jsem vyjmul) o N - 1 pozic dolu v zasobniku 
 +  * b - <del>432432</​del>​ 
 +      - **IF**(postfix 0 2 3 4 2 3 4 rot rot rot, []) 
 +      - = (2 3 4 2 3 4 rot rot rot, []) 
 +      - =><​sup>​6</​sup>​ (rot rot rot, [4 3 2 4 3 2]) **[num]** 
 +      - => (rot rot, [2 4 3 3 2]) **[rot]** //(4 > 1, posunu 3 o 3 dolu)// 
 +      - => (rot, [3 3 4 2]) **[rot]** //(2 > 1, posunu 4 o 1 dolu)// nemělo by to tedy být [3 4 3 2] ? 
 +      - => (, [4 2 3]) **[rot]** //(3 > 1, posunu 3 o 2 dolu)// 
 +      - Odpoved je **[4 2 3]** pokud bychom pokracovali dal 
 +      - (, [4 2 3]) nalezi do FC a tedy muzeme **OF**(, [4 2 3]) = 4
   * d - program by se zasekl na prázném zásobníku,​ např. (postfix 0 rot)   * d - program by se zasekl na prázném zásobníku,​ např. (postfix 0 rot)
 +      - (rot . Q, N . S) kde N neni cislo nebo N < 2 nebo |S| < N
  
 ==== 3.4 ==== ==== 3.4 ====
Řádek 308: Řádek 328:
  
   * (Q_1.V_1.V_2.swap.Q_2) -> (Q_1.V_2.V_1.Q_2)   * (Q_1.V_1.V_2.swap.Q_2) -> (Q_1.V_2.V_1.Q_2)
-  * (Q_1.N_1.N_2.add.Q_2) -> (Q_1.N_ans.Q_2) ​ //stejně tak i pro mul, sub, ..+  * (Q_1.N_1.N_2.add.Q_2) -> (Q_1.N_ans.Q_2) ​ //stejně tak i pro mul, sub, ..//
   * (Q_1.(Q_exec).exec.Q_2) -> (Q_1.Q_exec.Q_2)   * (Q_1.(Q_exec).exec.Q_2) -> (Q_1.Q_exec.Q_2)
   * (Q_1.V_1.V_2.N.sel.Q_2) -> (Q_1.V_1.Q_2) if N = 0   * (Q_1.V_1.V_2.N.sel.Q_2) -> (Q_1.V_1.Q_2) if N = 0
Řádek 318: Řádek 338:
 ===== BOS ===== ===== BOS =====
 ==== 3.16 ==== ==== 3.16 ====
-  ​//doplňujeme ELM o if a operace s booleanem+  doplňujeme ELM o if a operace s booleanem
   E = NE   E = NE
   NE = (NE_1 op NE_2) | (if BE NE_1 NE_2) | N   NE = (NE_1 op NE_2) | (if BE NE_1 NE_2) | N
Řádek 352: Řádek 372:
        
        
 +
 ===== Denotační sémantika ===== ===== Denotační sémantika =====
  
-==== 4.1 ==== +==== 4.1  ​Prepis Signed a Unsigned Int literalu na cisla ==== 
-  //všechny písmenka na začátku řádky mají být kurzívou.  +  ​//D //: intLit -> int  //D - převedeme na integer// 
-  ​D: intLit -> int //D - převedeme na integer +  ​* //UN //[ [@ UD D]] -> 10 * [ [UD]] + [ [D]] 
-  UN[[@ UD D]] -> 10 * [[UD]] + [[D]] +  ​* //SN //[ [+ UD]] -> [ [UD]] 
-  SN[[+ UD]] -> [[UD]] +  ​* //SN //[ [- UD]] -> -1 * [ [UD]] 
-  SN[[- UD]] -> -1 * [[UD]]+ 
 +  * //relaci pro výstupní funkci a význam denotační algebry si snad dokáže každej udělat sám //
  
-  //relaci pro výstupní funkci a význam denotační algebry si snad dokáže každej udělat sám // 
  
  
  
courses/a4m36tpj/zapisky.1325745076.txt.gz · Poslední úprava: 2025/01/03 18:25 (upraveno mimo DokuWiki)
Nahoru
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0