PF:Moduł Podstawy: Różnice pomiędzy wersjami
Nie podano opisu zmian |
m Zastępowanie tekstu - "\textsl{" na "\mathit{" |
||
(Nie pokazano 11 wersji utworzonych przez jednego użytkownika) | |||
Linia 15: | Linia 15: | ||
</p> | </p> | ||
== BNF == | |||
<p align="justify"> | <p align="justify"> | ||
Gramatyka bezkontekstowa jako sposób opisu związku między zapisem, a | Gramatyka bezkontekstowa jako sposób opisu związku między zapisem, a | ||
Linia 23: | Linia 23: | ||
formalizmu. | formalizmu. | ||
Opis notacji: | Opis notacji: | ||
*<konstrukcja>, | |||
*<math>::=</math>, | *<math>::=</math>, | ||
*<u>słowo kluczowe</u>, | |||
*<math>\dots | \dots</math>, | *<math>\dots | \dots</math>, | ||
*<math>[\dots]</math>, | *<math>[\dots]</math>, | ||
Linia 30: | Linia 32: | ||
*<math>\{\dots\}</math>. | *<math>\{\dots\}</math>. | ||
Tego formalizmu będziemy używać do opisu składni. | 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>
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.