PF:Moduł Podstawy: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przemek (dyskusja | edycje)
Nie podano opisu zmian
m Zastępowanie tekstu - "\textsl{" na "\mathit{"
 
(Nie pokazano 12 wersji utworzonych przez jednego użytkownika)
Linia 13: Linia 13:


Powtórka: rozróżnienie symboli od ich interpretacji.
Powtórka: rozróżnienie symboli od ich interpretacji.
</p>
== BNF ==
<p align="justify">
Gramatyka bezkontekstowa jako sposób opisu związku między zapisem, a
drzewem rozbioru gramatycznego.
Opisując składnię języka będziemy się posługiwać notacją BNF
(rozszerzenie gramatyk bezkontekstowych), ale bez przesadnego
formalizmu.
Opis notacji:
*<konstrukcja>,
*<math>::=</math>,
*<u>słowo kluczowe</u>,
*<math>\dots | \dots</math>,
*<math>[\dots]</math>,
*<math>\{\dots\}^*</math>,
*<math>\{\dots\}^+</math>,
*<math>\{\dots\}</math>.
Tego formalizmu będziemy używać do opisu składni.
</p>
== Przyrostowy tryb pracy ==
<p align="justify">
Kompilator Ocamla działa w sposób inkrementacyjny, tzn.
działa w cyklu powtarzając następujące czynności:
*wczytuje fragment programu,
*kompiluje go, dołączając do już skompilowanych fragmentów,
*wykonuje wprowadzony fragment.
Taki fragment programu będziemy nazywać ''jednostką kompilacji''.Wykonanie jednostki kompilacji może zarówno powodować
obliczenia wartości, jak i definiowanie nowych pojęć.
Każda jednostka kompilacji musi być w Ocamlu
zakończona przez \codeline{;;}.
Ponieważ kompilator nie musi generować całego kodu od razu,
dlatego też taki tryb pracy nazywamy przyrostowym.
<program> <math>::= \{ <jednostka kompilacji> ;; \}^*</math>
</p>
== Wyrażenia ==
<p align="justify">
Najprostsza jednostka kompilacji i podstawowa konstrukcja
programistyczna, to wyrażenie.
Wyrażenia budujemy w standardowy sposób za pomocą stałych,
procedur i nawiasów.
Jedynym odstępstwem jest to, że argumenty procedur nie muszą
być objęte nawiasami i pooddzielane przecinkami.
Operacje, które standardowo zapisujemy infiksowo (np. operacje
arytmetyczne) mają również postać infiksową.
Rozróżniamy operacje arytmetyczne na liczbach całkowitych i
rzeczywistych --- te ostatnie mają dodaną kropkę.
</p>
    \tt
    486;;
    \mathit{- : int = 486}
    137 + 349;;
    \mathit{- : int = 486}
    18 * 27;;
    \mathit{- : int = 486}
    1000 - 514;;
    \mathit{- : int = 486}
    1*2*3*4*5*6 - (7*8*9 - 3*12) / (3*4 - 2*5);;
    \mathit{- : int = 486}
    5832.0 /. 12.0;;
    \mathit{- : float = 486.}
    "ala" ^ " ma " ^ "kota";;
    \mathit{- : string = "ala ma kota"}
   
<p align="justify">
Wszystko, czego potrzeba do budowy wyrażeń, to:
*stałe (liczbowe, napisy, lub nazwy stałych),
*zastosowanie procedury do argumentów,
*nawiasów.
Zauważmy, że procedury i ich argumenty są tu traktowane na równi ---
takie symbole jak \codeline{+} czy \codeline{*} to po prostu nazwy stałych,
których wartościami są procedury wbudowane w język programowania,
a \codeline{123}, \codeline{486.5}, czy \codeline{"ala"} to stałe.
</p>
</p>

Aktualna wersja na dzień 13:14, 9 cze 2020

W każdym języku programowania mamy trzy rodzaje konstrukcji językowych:

  • podstawowe symbole (typy, wartości, operacje, relacje, itp.) --- pochodzące z dziedziny algorytmicznej,
  • sposoby konstrukcji --- czyli jak z prostszych całości budować bardziej skomplikowane,
  • sposoby abstrakcji --- czyli jak złożone konstrukcje mogą być nazwane i dalej wykorzystywane tak, jak podstawowe elementy.

Nasza dziedzina algorytmiczna zawiera m.inn.:

  • typy: \codeline{bool}, \codeline{int}, \codeline{float}, \codeline{char}, \codeline{string},
  • stałe: logiczne (\codeline{true} i \codeline{false}), całkowite (np.: 0, 1, -2), rzeczywiste (np.: 2.3, -3.4, 4.5e-7), znakowe (np.: \codeline{'a'}, napisy (np. \codeline{"ala ma kota"}).
  • procedury: \codeline{+}, \codeline{-}, \codeline{*}, \codeline{/}, \codeline{mod}, \codeline{+.}, \codeline{-.}, \codeline{*.}, \codeline{/.}, \codeline{||}, \codeline{&&}, \codeline{not}, =, , , <, >, <>, \codeline{^}.

Powtórka: rozróżnienie symboli od ich interpretacji.

BNF

Gramatyka bezkontekstowa jako sposób opisu związku między zapisem, a drzewem rozbioru gramatycznego. Opisując składnię języka będziemy się posługiwać notacją BNF (rozszerzenie gramatyk bezkontekstowych), ale bez przesadnego formalizmu. Opis notacji:

  • <konstrukcja>,
  • ::=,
  • słowo kluczowe,
  • |,
  • [],
  • {}*,
  • {}+,
  • {}.

Tego formalizmu będziemy używać do opisu składni.

Przyrostowy tryb pracy

Kompilator Ocamla działa w sposób inkrementacyjny, tzn. działa w cyklu powtarzając następujące czynności:

  • wczytuje fragment programu,
  • kompiluje go, dołączając do już skompilowanych fragmentów,
  • wykonuje wprowadzony fragment.

Taki fragment programu będziemy nazywać jednostką kompilacji.Wykonanie jednostki kompilacji może zarówno powodować obliczenia wartości, jak i definiowanie nowych pojęć. Każda jednostka kompilacji musi być w Ocamlu zakończona przez \codeline{;;}. Ponieważ kompilator nie musi generować całego kodu od razu, dlatego też taki tryb pracy nazywamy przyrostowym. <program>

::={<jednostkakompilacji>;;}*

Wyrażenia

Najprostsza jednostka kompilacji i podstawowa konstrukcja programistyczna, to wyrażenie. Wyrażenia budujemy w standardowy sposób za pomocą stałych, procedur i nawiasów. Jedynym odstępstwem jest to, że argumenty procedur nie muszą być objęte nawiasami i pooddzielane przecinkami. Operacje, które standardowo zapisujemy infiksowo (np. operacje arytmetyczne) mają również postać infiksową. Rozróżniamy operacje arytmetyczne na liczbach całkowitych i rzeczywistych --- te ostatnie mają dodaną kropkę.

   \tt
   486;;
   \mathit{- : int = 486}
   137 + 349;;
   \mathit{- : int = 486}
   18 * 27;;
   \mathit{- : int = 486}
   1000 - 514;;
   \mathit{- : int = 486}
   1*2*3*4*5*6 - (7*8*9 - 3*12) / (3*4 - 2*5);;
   \mathit{- : int = 486}
   5832.0 /. 12.0;; 
   \mathit{- : float = 486.}
   "ala" ^ " ma " ^ "kota";;
   \mathit{- : string = "ala ma kota"}
   

Wszystko, czego potrzeba do budowy wyrażeń, to:

  • stałe (liczbowe, napisy, lub nazwy stałych),
  • zastosowanie procedury do argumentów,
  • nawiasów.

Zauważmy, że procedury i ich argumenty są tu traktowane na równi --- takie symbole jak \codeline{+} czy \codeline{*} to po prostu nazwy stałych, których wartościami są procedury wbudowane w język programowania, a \codeline{123}, \codeline{486.5}, czy \codeline{"ala"} to stałe.