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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przemek (dyskusja | edycje)
Przemek (dyskusja | edycje)
Linia 65: Linia 65:
Rozróżniamy operacje arytmetyczne na liczbach całkowitych i
Rozróżniamy operacje arytmetyczne na liczbach całkowitych i
rzeczywistych --- te ostatnie mają dodaną kropkę.
rzeczywistych --- te ostatnie mają dodaną kropkę.
</p>
<p>


\paragraph{Przykład:}
    \begin{code}
\begin{code}
    \tt
\tt
     486;;
     486;;
\textsl{- : int = 486}
    \textsl{- : int = 486}
137 + 349;;
    137 + 349;;
\textsl{- : int = 486}
    \textsl{- : int = 486}
18 * 27;;
    18 * 27;;
\textsl{- : int = 486}
    \textsl{- : int = 486}
1000 - 514;;
    1000 - 514;;
\textsl{- : int = 486}
    \textsl{- : int = 486}
1*2*3*4*5*6 - (7*8*9 - 3*12) / (3*4 - 2*5);;
    1*2*3*4*5*6 - (7*8*9 - 3*12) / (3*4 - 2*5);;
\textsl{- : int = 486}
    \textsl{- : int = 486}
5832.0 /. 12.0;;  
    5832.0 /. 12.0;;  
\textsl{- : float = 486.}
    \textsl{- : float = 486.}
"ala" ^ " ma " ^ "kota";;
    "ala" ^ " ma " ^ "kota";;
\textsl{- : string = "ala ma kota"}
    \textsl{- : string = "ala ma kota"}
\end{code}
   
 
</p>
 
<p align="justify">
Wszystko, czego potrzeba do budowy wyrażeń, to:
Wszystko, czego potrzeba do budowy wyrażeń, to:
*stałe (liczbowe, napisy, lub nazwy stałych),
*stałe (liczbowe, napisy, lub nazwy stałych),
Linia 94: Linia 95:
których wartościami są procedury wbudowane w język programowania,
których wartościami są procedury wbudowane w język programowania,
a \codeline{123}, \codeline{486.5}, czy \codeline{"ala"} to stałe.
a \codeline{123}, \codeline{486.5}, czy \codeline{"ala"} to stałe.
</p>
</p>

Wersja z 09:30, 17 lip 2006

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ę.

\begin{code} \tt 486;; \textsl{- : int = 486} 137 + 349;; \textsl{- : int = 486} 18 * 27;; \textsl{- : int = 486} 1000 - 514;; \textsl{- : int = 486} 1*2*3*4*5*6 - (7*8*9 - 3*12) / (3*4 - 2*5);; \textsl{- : int = 486} 5832.0 /. 12.0;; \textsl{- : float = 486.} "ala" ^ " ma " ^ "kota";; \textsl{- : 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.