Funkcje pomocnicze
wartosc_symbolu daj_symbol()
{ char ch;
pomin biale spacje z wyjatkiem '\n’; testuj czy nie skończył się strumień (jeśli tak to return biezacy_symbol = KONIEC)
jeśli ch jest ';’ lub '\n’ zwróć biezacy_symbol = DRUK;
jeśli ch jest '*’, '/’, '+’, '-’, '(’, ')’, '=’
zwróć biezacy_symbol = wartosc_symbolu(ch);
jeśli ch jest '0’, '1’, '2’, '3’, '4’, '5’, '6’, '7’, '8’, '9’, '.'
wczytaj całą liczbę na wartosc_liczby
zwróć biezacy_symbol = LICZBA;
w innym przypadku
jeśli ch jest literą {
przepisz nazwę znak po znaku z cin do napis zwróć biezacy_symbol = NAZWA;
}
jeśli to nie litera to blad("niepoprawny symbol");
zwróć biezacy_symbol = DRUK;
}
nazwa* szukaj(const char* p,int wst =0)
{ przejdź przez listę nazw
porównuj napisy elementów listy z napisem
wskazywanym przez p
jeśli znajdziesz, zwróć pasujący elenment listy
jeśli nie znalazleś a (wst ==0) to blad("nie znaleziono nazwy");
w przeciwnym razie jest to nowa nazwa do wstawienia
zrób miejsce na nową nazwę
w nowej nazwie zrób miejscae na napis
przepisz to co wskazuje p do tego napisu
inicjuj wartość = 1;
podmontuj na początek listy
przesuń wskaźnik początku listy na ten nowy element
zwróć wskaźnik do tego elementu;
}
inline nazwa* wstaw(const char* s) {return szukaj(s, 1);}
Funkcja wejściowa
struct nazwa{
char* napis;
nazwa* nast;
double wartosc;
};
nazwa*root;
Obsługa nazw
Obsługa błędów
double blad(const char*s ){
cerr <<"blad: " << s << '\n';
liczba_bledow++;
return 1;
}
Poprzedni slajd
Cofnij do pierwszego slajdu
Podgląd wersji graficznej