Zakładamy że symbolami gramatyki są pojedyńcze znaki. Uzupełnić poniższą gramatykę regułami tak by rozpoznawała zwykłe liczby całkowite w notacji dziesiętnej, liczby całkowite w notacji szesnastkowej, tak jak w C: `0x1ab' i liczby zmiennopozycyjne (te muszą zawierać kropkę dziesiętną, np: `.001', `100.' `3.1415').
liczba : liczba_zmiennopozycyjna | liczba_dziesietna | liczba_szesnastkowa ;Uwaga: Zakładamy że liczby dziesiętne i liczby zmiennopozycyjne nie zawierają zer na początku.
Symbolami rachunku zdań są zmienne (wszystkie zmienne są reprezentowane przez pojadynczy symbol), negacja, iloczyn, suma, implikacja i nawiasy. Negacja ma najwyższy priorytet, następnie iloczyn, potem suma. Implikacja ma najniższy priorytet. Iloczyn i suma są łaczne. Dla uniknięcia nieporozumień przyjmiemy że implikacja jest niełączliwa (tzn. wymaga jawnych nawiasów). Napisać gramatykę akceptującą poprawne składniowo zdania rachunku zdań (nie interesuje nas w tej chwili ich wartość logiczna).
Napisać gramatykę (akceptowaną przez `bison'-a) która rozpoznaje typowe nagłówki funkcji w C. Dla uproszczenia można się ograniczyć tylko do typów nazwanych przez identyfikator (wbudowane lub zadeklarowane gdzie indziej przez `typedef'). Przy takim ograniczeniu symbolami są: identyfikatory, '(', ')' , ',', ';' i '...'. Przykładowe nagłówki:
int fun1(int, int); typek fun2(typek x, int y); int fun3(); int fun4(int, ...);
Automat skończony jest zadany następującą tabelą przejścia:
stan 0: 'e' -> 1; [a-df-z] -> 4 stan 1: 'n' -> 2; [a-mo-z] -> 4; '_' -> 5 stan 2: 'd' -> 3; [a-ce-z] -> 4; '_' -> 5 stan 3: [a-z] -> 4; '_' -> 5 stan 4: [a-z] -> 4; '_' -> 5 stan 5: [a-z] -> 4gdzie dla każdego stanu po dwukropku podajemy dozwolone przejścia, przy tym po strzałce jest numer stanu do którego mamy przejść. Stanem początkowym jest stan 0. W stanie 3 akceptujemy z wynikiem pierwszym. W stanie 4 akceptujemy z wynikiem drugim. Sprawdzić jak nasz automat zachowa się na następujących ciągach: "end", "end_", "_ala", "a__la", "a_l_a", "endala", "end_ala". Jak można zinterpretować wyniki tego automatu. Pokazać że ten automat jest minimalny. Pokazać że jeśli potraktujemy oba wyniki jako równoważne (tzn. przyjmiemy stany 3 i 4 po prostu jako akceptujące) to automat nie będzie minimalny. Znaleźć minimalną wersję po tej modyfikacji.