Metody realizacji języków programowania - lab
Zajęcia odbywają się w środy od 12:15 do 13:45 w labie nr 2.
Linki:
Zajęcia 11 (30.05.2007)
Pomysły na optymalizacje
Kod czwórkowy:
Kod czwórkowy na Wikipedii
Kod czwórkowy na Answers.com
Tłumaczenie kodu czwórkowego na asember
Zajęcia 10 (16.05.2007)
JVM i Jasmin.
Odpalanie Jasmin:
- Poprawiamy plik build.sh (`dos2unix build.sh; chmod +x build.sh'), inaczej nie zadziała
- Budujemy (`./build.sh all')
- Kompilujemy przykład (`java -jar jasmin.jar examples/HelloWorld.j')
- Odpalamy przykład (`java examples/HelloWorld')
Inny przykład
Więcej o Jasmin
Zajęcia 8 i następne:
Praca nad komilatorem.
Zajęcia 7 (04.04.2007):
Oddawanie pierwszej części kompilatora.
Tablica symboli.
Zajęcia 6 (28.03.2007):
Sprawdzenie postępów pisania kompilatora.
Zajęcia 5 (21.03.2007):
Bison. Man bisona jest bardzo ubogi, po szczegółowe informacje proszę udać się do dokumentacji w formacie Info ([p]info bison) lub na www.
Przykładowy kalkulator infiksowy: kompilacja poleceniami bison calc.y; make calc.tab
Zadania do wykonania na tym przykładzie:
- przetestować poprawność (łączność odejmowania, potęgowania, minus unarny)
- dodać komunikat o błędzie przy dzieleniu przez zero
- dodać nawiasy
- dodać zmienne i przypisania do nich, operator przypisania ma wiązać w prawo (jak potęgowanie): foo=bar=2 przypisuje 2 do obu zmiennych; zmienne mają zachowywać wartość z między liniami; niezainicjowane zmienne mają mieć wartość 0
- użyć lexa zamiast funkcji yylex
Nie trzeba w C: przykład w C++.
W Javie używamy Cupa.
Zajęcia 4 (14.03.2007):
Ciąg dalszy kalkulatora infiksowego: kompilacja do postaci drzewa wyrażenia.
Zajęcia 3 (07.03.2007):
Zadanie: kalkulator infiksowy
- 4 podstawowe działania na liczbach całkowitych oraz potęgowanie (^)
- potęgowanie dla wykładników ujemnych ma działać i zwracać zero
- lekser może być napisany ręcznie lub przy pomocy lexa
- parser ma być napisany metodą zejść rekurencyjnych
- mają działać priorytety operatorów (najpierw potęgowanie, potem mnożenie i dzielenie, potem dodawanie i odejmowanie)
- ma działać łączność operatorów (potęgowanie wiąże w prawo, pozostałe działania w lewo)
- jak zwykle, porządne komunikaty o błędach (niepoprawne wyrażenie, dzielenie przez zero, itd.)
- odpowiedzi mają się zgadzać z tymi zwracanymi przez bc (uwaga: bc nie obsługuje wyrażeń postaci 1--1, ale Wy macie!)
- do testowania można używać przykładowego zestawu danych wejściowych i wyjściowych (uwaga: do oceniania będzie używany inny zestaw testów)
- mile widziana jest możliwość rysowania drzewka wyrażenia (drzewko powinno narysować się przed wyświetleniem odpowiedzi jeżeli pierwszym znakiem linii jest $)
- potrzebne wiadomości o metodzie zejść rekurencyjnych znajdują się na moodle i ważniaku
- termin: na czwarte zajęcia (14.03.2007).
Zajęcia 2 (28.02.2007):
Lex:
- co to jest
- zasada działania
-
- struktura pliku lexa
- uruchamianie lexa (flex -oplik.c plik.l; gcc -o plik plik.c -lfl)
- przykład: automatyczna zamiana liczb na dwa razy większe
- wzorce
- przykład: zliczanie linii i znaków w pliku
Zadanie: prosty kalkulator odwrotnej notacji polskiej oparty w całości na lexie (nie bisonie/yaccu!).
- liczby rzeczywiste (w tym w zapisie naukowym, np -6.23e-4, czyli -0.000623) - patrz funkcja atof
- minus przy liczbie zawsze oznacza znak, nie trzeba się bawić w zgadywanie, czy nie jest czasem binarny
- uwaga na kropkę: użyta bezpośrednio, bez poprzedzającego ukośnika, w wyrażeniu regularnym pasuje do każdego znaku!
- cztery podstawowe działania
- w każdej linii jest jedno polecenie: liczba (odkłada liczbę na stos) lub działanie (zdejmuje dwie liczby ze stosu, wykonuje na nich działanie, odkłada na stos).
- wpisanie pustej linii powinno spowodować wyświetlenie liczby z czubka stosu (bez zdejmowania jej), przy pustym stosie nic nie powinno zostać wypisane
- można założyć, że stos będzie miał co najwyżej 100 elementów
- dla wygody sugeruję zaimplementowanie pomocniczych funkcji push i pop do operacji na stosie, powinny one kontrolować, czy stos nie jest pusty lub czy się nie przepełnia
- komunikaty o błędach: za mało argumentów dla działania na stosie, dzielenie przez zero
- uwaga: góra jeden ekran kodu! (inaczej coś jest nie tak)
- jak ktoś nie był na zajęciach, proszę przeczytać krótki kurs lexa
- termin: na trzecie zajęcia (07.03.2007).
Zajęcia 1 (21.02.2007):
Zadanie:
Napisać kalkulator dla odwrotnej notacji polskiej.
- 4 podstawowe działania i dzielenie modulo
- całość należy napisać ręcznie, bez korzystania z zewnętrznych bibliotek i narzędzi
- dla ambitnych, na więcej punktów: liczby zmiennoprzecinkowe (-6.28e+23, .3E-4), liczby szesnastkowe (0xCafeBabe)
- porządne komunikaty o błędach
- proszę zwrócić uwagę, że zadanie nie jest trudne, należy tylko poświęcić nieco uwagi analizie leksykalnej
- uwaga:"1 2 -3 +" i "1 2- 3 +" to te same wyrażenia o wartości 2 (nie zwracamy uwagi na odstępy)
- termin: na drugie zajęcia (28 lutego)
Strona główna