GitXplorerGitXplorer
k

jpp-interpreter

public
0 stars
0 forks
0 issues

Commits

List of commits on branch master.
Unverified
757d496ad21aeffaf69b49d2f8175ab38e90390e

Add the interpreter

kkoz4k committed 6 years ago
Verified
00306fbee8fa5733b232e8e4eb013607eaad1909

Initial commit

kkoz4k committed 6 years ago

README

The README file for this repository.

C: to język ze statycznym typowaniem w stylu C++ oraz wcięciami i składnią instrukcji sterujących w stylu Pythona.

Interpreter wymaga pakietu STMonadTrans oraz nowej wersji mtl, dlatego mój Makefile przed kompilacją instaluje je cabalem.

Typy:

  • int
  • bool
  • referencje: int&
  • funkcje: int(int, bool)
  • tablice indeksowane intem: int[3]

Instrukcje sterujące:

  • if ... elif ... else (warunki muszą być typu bool)
  • while z break i continue

Funkcje:

  • statyczne wiązanie identyfikatorów
  • dowolne zagnieżdżenie
  • przekazywanie parametrów przez wartość lub referencję
  • return w dowolnym miejscu
  • rekurencja
  • mogą zwracać wartość lub nie (specjalny "typ" void)
  • mogą przyjmować funkcje jako parametry
  • mogą zwracać funkcje (przekazywanie do domknięcia przez referencję)
  • funkcje anonimowe: int(int x, int y) -> 10 * x + y

Tablice:

  • homogeniczne
  • stałej wielkości większej od 0 (wielkość jest częścią typu)
  • mogą przechowywać wartości dowolnego typu oprócz referencji
  • traktowane jako wartości (kopiowane przy przypisaniu i przy przekazywaniu przez wartość)
  • dowolnie zagnieżdżone, ale kolejność wymiarów odwrotna niż w C (int arr[2][3] w C odpowiada int[3][2] w C: - jest to tablica 2 tablic typu int[3] i po tym wymiarze indeksujemy najpierw)

Referencje:

  • zarówno jako argumenty funkcji, jak wartości zwracane i zwykłe zmienne
  • inicjalizowane tak jak w C++ (int x = 0; int& y = x;), potem nie można zmienić miejsca, na które wskazują
  • można wyciągnąć referencję do elementu tablicy

Operatory:

  • przypisania: =, +=, -=, *=, /= (poza wyrażeniami)
  • logiczne: or, and, not
  • równości: ==, != (działają tylko dla wartości tych samych typów)
  • porównania: <, <=, >, >= (działają tylko dla intów)
  • arytmetyczne: +, -, *, /
  • unarne: +, -
  • indeksowanie tablic: arr[123]
  • wywoływanie funkcji: f(123, 456)

Inne:

  • wartości muszą być inicjalizowane
  • inicjalizacja tablic możliwa przez składnię int[3] arr = [0, 0, 0] lub int[3] arr = [0 times 3], przy czym w tym drugim przypadku wyrażanie jest ewaluowane osobno dla każdego elementu, od lewej do prawej
  • instrukcja print wypisująca inty, boole i tablice
  • deklaracje zmiennych i funkcji w dowolnych miejscach
  • jawnie obsłużone błędy wykonania (np. dzielenie przez 0, wyjście poza zakres tablicy)
  • zawsze terminująca faza kontroli typów przed rozpoczączęciem wykonywania programu
  • wcięcia są obsługiwane dość swobodnie, w szczególności brak wcięcia też może oznaczać początek bloku, ale nie trzeba się tym przejmować, wystarczy pisać tak jak w przykładach czyli wcięcie = 4 spacje
  • komentarze jak w C - //, /* */