Skip to content

mzsuetam/krecik

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Język Krecik

Autorzy

  • Mateusz Mazur
  • Patryk Knapek
  • Piotr Karaś
  • Tomasz Kawiak

Założenia ogólne:

  • Język proceduralny
  • Interpreter plików .krecik pisany w języku Python
  • W języku piszemy skrypt poruszania się krecika po planszy.
  • Na planszy oprócz krecika znajdują się inne obiekty: kamen (kamień), kopecek (kopiec), rajce (pomidorek), muchomurka (muchomorek). Krecik może podnosić i przenosić niektóre z tych przedmiotów.
  • Krecik ma ekwipunek o wielkości 1.
  • Z powyższymi obiektami będziemy mogli wchodzić w interakcje opisane poniżej.

Spis tokenów i gramatyka

Spis tokenów i gramatyka znajdują się w src/antlr/Krecik.g4

Stosowany generator parserów

ANTLR 4

Sposób użycia:

  1. Należy sklonować repozytorium z githuba projektu.
  2. W głównym folderze projektu należy uruchomić ‘pip install -r requirements.txt’, aby pobrać wymagane biblioteki.
  3. Plik prezentacyjny włączamy poleceniem src/driver.py --allow-prints true --display window
  4. Dowolny plik .krecik włączamy poleceniem src/driver.py example_programs/foos.krecik

Opis języka:

Zmienne:

  • Zmienne typowane statycznie
  • Zasięg obowiązywania zmiennych: do klamr
  • Zmienne int (cely), float (cislo) i boolean (logicki)
  • Deklaracja: cely n = 4;
  • Przypisanie: n = n + 2 * foo();

Operacje arytmetyczne i logiczne:

Operacje na zmiennych cislo i cely:

  • +
  • -
  • *
  • /
  • ()
  • operacje arytmetyczne zwracają typ cislo lub cely

Operacje na zmiennych logicki:

  • wetsi >
  • mensi <
  • je ==
  • neje !=
  • nebo ||
  • oba &&
  • ne ~
  • ()
  • operacje logiczne zwracają typ logicki

Funkcje:

  • <zwracany_typ> nazwa_funkcji(<typ_zmiennej> <nazwa_zmiennej>, … ) {}
  • nazwa funkcji musi być unikalna w skali pliku
  • wywołanie: <nazwa_funkcji>(<nazwa_zmiennej>, … )
  • wywołanie funkcji jest operacją
  • możliwe jest wywoływanie rekurencyjne
  • argumenty są przekazywane poprzez wartość
  • zwracany_typ - typy zmiennych oraz dodatkowo nedostatek (void)
  • Słowo kluczowe vratit (return)

Funkcje wbudowane

do_predu(Cely n) - przesunięcie krecika do przodu o n pól
v_pravo() - obrót krecika w prawo
v_zad() - obrót krecika do tyłu
v_levo() - obrót krecika w lewo
vykop() - wykop kopiec
pohrbit() - zakop kopiec
skryt() - wejdź do kopca
vstavej() - wyjdź z kopca
zda_kopecek() - czy krecik jest na kopcu
zda_kopecek_pred() - czy krecik jest przed kopcem
print(<variable>) - wypisz wartość zmiennej (tylko dla flagi-allow-prints true)

Przykład programu:

cely foo(cely a){
    kdyz ( a mensi 1 ) {
        print(-100);
        kdyz ( true){
            kdyz (true){
                vratit a;

            }
        }
    }
    a = a-1;
    print(a);
    cely b = foo(a);
    print(a);
    vratit b;
}

nedostatek ahoj() {
	print(-1);
  cely a = foo(5);
  print(-1);
  print(a);

	cely a = (3*3+3*3) * - ( 1 ) * -1;
    logicki l = ne(true);
	cislo b = 3.14;
	cely c = (3+6)*(3+6)+7;
    cely d = -2;
	do_predu(a*5-c-d);
	pockejte(6. - b);
	v_levo();
    v_pravo();
    v_pravo();
    v_levo();
	pockejte(2.+2.*2.);
    kdyz(l)
    {
       do_predu(2);
       kdyz(18 mensi 88 nebo 18 wetsi -2)
       {
           do_predu(2);
           pockejte(3.);
       }
       jiny
       {
           do_predu(1);
           pockejte(3.);
       }
    }
    jiny {
        do_predu(1);
        pockejte(2.);
        kdyz(true nebo true oba false)
        {
            do_predu(1);
            pockejte(2.);
        }
    }
    vratit;
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •