-
Notifications
You must be signed in to change notification settings - Fork 0
prawilny/latte
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Cudza własność intelektualna ======================================== - parser (latte.y) oparty jest na kodzie Jakuba Martina, - build.rs (skrypt generujący parser na podstawie plików .l i .y) wzięty z tutoriala grmtools, Uwagi do języka ======================================== Dla uniknięcia niejednoznaczności "do którego 'if' wiąże ten 'else'" gramatyka języka w łańcucach ifów o pojedynczych instrukcjach wymusza taką samą liczbę 'if' i 'else': właściwą instrukcją jest `if (true) if (false) ; else ; else ;`, niewłaściwą zaś: `if (true) if (false) ; else ;`. Domyślną wartością obiektów jest `null`. Wszystkie użycia literału `null` muszą być typowane `( klasa )null`. Dla uproszczenia kodu ograniczyłem casty (przy zachowaniu kompatybilności z publicznymi testami): ")null" stanowi pojedynczy token, więc nie można zrobić `( klasa ) null`. Jedyne dozwolone jawne rzutowania są na null: `( klasa )null`. Wszystkie inne rzutowania robione są niejawnie. Wszystkie metody obiektów są wirtualne (nie ma możliwości zdefiniowania metody nienadpisywalnej w podklasach). W stringach nie może pojawić się symbol '"' (nawet w postaci '\"'). Uwagi do kompilatora ======================================== Kod wyjściowy (w x86_64) jest kodem maszyny stosowej. Kompilator obsługuje język latte z następującymi rozszerzeniami: - structy, - obiekty, - metody wirtualne. Kompilacja ======================================== W systemie z dostępnym toolchainem rusta należy wykonać standardowe polecenie: cargo build --release W systemie bez toolchainu rusta należy wykonać w katalogu projektu polecenie: make Zainstaluje ono (`make`) rusta w lokalnym katalogu UWAGA: w przypadku instalacji rusta w lokalnym katalogu rozmiar katalogu po kompilacji programu osiąga rozmiar 1-1.5 GB Uruchamianie ======================================== kompilator: latc_x86_64 FILEPATH Zależności ======================================== - pakiet static_assertions (https://docs.rs/static_assertions/1.1.0/static_assertions/) - biblioteka grmtools (https://softdevteam.github.io/grmtools/master/book/quickstart.html): - cfgrammar, - lrlex, - lrpar, Struktura projektu: ======================================== . ├── build.rs - skrypt do statycznego generowania kodu parsera ├── Cargo.lock - lista zależności wraz z wersjami ├── Cargo.toml - specyfikacja crate'a (pakietu) ├── latc_x86_64 - skrypt uruchamiający kompilator ├── lib │ ├── Makefile │ ├── runtime.c - plik z funkcjami bibliotecznymi │ └── runtime.o ├── Makefile ├── README ├── rustfmt.toml - plik konfiguracyjny formatera kodu └── src ├── compiler.rs - moduł z funkcjami generującymi kod ├── latte.l - plik definiujący lexer ├── latte.y - plik definiujący parser ├── type_checker.rs - moduł z funkcjami pomagającymi sprawdzić statyczną poprawność programu └── main.rs - funkcja main(): obsługa CLI i wywołanie funkcji z modułów
About
Simple imperative language compiler
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published