Zakodować procedurę w C (automat skończony) rozpoznającą następujące cztery symbole (słowa): 'do', 'downto', 'for', 'to'. Procedura powinna odzczytywac (i aktualizować) zmienną 'biezacy_znak' (tak naprawdę ten znak to podgląd). Zakładamy że przed wywołaniem procedury zmienna 'biezacy_znak' jest wypełnina pierwszym znakiem tekstu, procedura ma "zjeść" rozpoznane słowo i zostawić w zmiennj 'biezacy_znak' następny znak. Użyć następujących deklaracji:
int biezacy_znak; typedef enum rodzaj_symbolu {sym_eof, sym_invalid, sym_do, sym_downto, sym_for, sym_to, sym_id } rodzaj_symbolu;Produdura ma zwracać wartość typu 'rodzaj_symbolu'. Jeśli 'biezacy_znak' to 'EOF' to zwracamy 'sym_eof'. Jeśli 'biezacy_znak' nie jest dopuszczalny to zwaramy 'sym_invalid'. Ponadto procedura ma jeśli trzeba pominąć dowolną liczbę spacji na początku.
Rozszerzyć procedurę, tak by dodatkowo rozpoznwała identyfikatory (dowolne ciągów liter).
Procedura ma wybierać ciąg maksymalnej długości tzn. 'down' jest identyfikatorem, a całe 'downto' to słowo kluczowe. Kolejne wywołania automatu mają dawać kolejne symbole.
Wskazówka: początek drugiej wersji procedury może wyglądać następująco:
#include#include #define GO(c, x) if (biezacy_znak == c) { \ biezacy_znak = getchar(); \ goto x; \ } rodzaj_symbolu daj_symbol(void) { start: GO(' ', start) GO('d', stan_d) GO('f', stan_f) GO('t', stan_t) if (isalpha(biezacy_znak)) { biezacy_znak = getchar(); goto stan_id; } return sym_invalid; stan_d: GO('o', stan_do)
Uwaga: Zadanie jest do zrobienia na zajęciach 12.10.2015. Jeśli nie będzie zrobione całe na koniec zajęc należy pokazać to co jest gotowe.