05 maja 2004r.
GRUPA E
Zadanie 1.
Napisz we Flex-ie program, który w danym na wejściu pliku zwiększy o 1 wszystkie liczby całkowite znajdujące się wewnątrz bloku { ... } o nieparzystej głębokości oraz zmniejszy o 1 wszystkie liczby całkowite znajdujące się wewnątrz bloku o parzystej głębokości.
Przykład konwersji:
xl = 1; |
O II rt X | |
x2 = 3.0; |
x2 = 3.0; | |
{ |
{ | |
x2 = x2 + 12; |
x2 = x2 + 13; | |
{ |
-> |
{ |
123+0 - 123.9 |
122+-1 - 123.9 | |
> |
> | |
7 |
8 | |
> |
> |
Uwaga: Można założyć, że znak “ nie ma specjalnego znaczenia (nie ma napisów) oraz, że w pliku wejściowym nawiasy { i } tworzą poprawne wyrażenie nawiasowe.
Możesz stosować składnię Flexa dla C, Pascala, Javy lub innego sensownego języka wysokiego poziomu. Rozpoznawanie odpowiednich fragmentów tekstu musi być napisane przy użyciu wyrażeń regularnych Flexa.
Punktacja: wyrażenia regularne 6 punktów, składnia, kod i inne drobiazgi 4 punkty.
Zadanie 2.
Skonstruuj parser LL(1) dla języka, generowanego przez następującą gramatykę:
S |
—♦ |
SSSI AB |
A |
—♦ |
aAb\c |
B |
—♦ |
Bb\e |
Punktacja: poprawienie gramatyki 3 punkty, wyznaczenie odpowiednich zbiorów FIRST i FOL-LOW 4 punkty, tablica parsowania 3 punktów.
Zadanie 3.
Skonstruuj parser SLR(l) dla następującej gramatyki:
S - |
- ASB\a |
A - |
-» bA\c |
B - |
- d |
Punktacja: budowa automatu 6 punktów, tablica parsowania 4 punkty.
Powodzenia!