-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
40 lines (26 loc) · 1.51 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Kompilator Latte dla 32-bitowej architektury x86.
Alokacja rejestrów nie jest robiona optymalnie, ale zastosowałem pewne optymalizacje
pozwalające w wielu przypadkach nie tworzyć kodu jak dla maszyny stosowej.
W porównaniu z poprzednią częścią, którą oddałem, teraz kod wygląda schludniej.
Funkcje, które nie pojawiłyby się w kodzie przez wyeliminowanie wyrażeń stałych są dodatkowo wywoływane,
żeby zachować wszystkie efekty uboczne (wypisania na ekran, pobieranie wartości z wejścia).
Zawsze prawdziwe if'y są redukowane do związanych z nimi instrukcji.
Usuwane są instrukcje nieosiągalne - instrukcje po returnach, w zawsze fałszywych gałęziach ifów.
Rozszerzenia: tablice i pełne klasy - kompilator działa poprawnie na dostarczonych testach.
Dodatkowo można odwoływać się poprzez 'self' do wartości atrybutów klasy,
nawet gdy są przysłonięte deklaracjami zmiennych o tych samych nazwach.
Dopuszczalne jest tylko pojedyncze zagnieżdżenie kropek, co jednak wystarcza, żeby
"dosięgnąć" dowolnie zagnieżdżonego atrybutu.
Wyjaśnienie:
tmp = a . b . c; niedopuszczalne, ale można zrobić tmp = a . b; tmp2 = b . c;
Dla tablic zaimplementowane jest tylko pojedyncze zagnieżdżenie.
Zbudowanie:
(jeśli odpowiednia wersja bnfc z numerami linii jest dostępna):
# ustawienie zmiennej bnfc_binary w Makefile'u na ścieżkę do bnfc
make
(jeśli odpowiednia wersja bnfc ma być pobrana)
make bnfc
make
Uruchomienie:
./latc <plik>.lat
./latc_x86 <plik>.lat