sprawdza czy dany ciąg może zostać wygenerowany przez gramatykę dla języka źródłowego. Analizator składniowy ma również jeszcze jedno bardzo istotne zadanie, mianowicie ma zgłaszać występowanie błędów składniowych. Jest to bezpośrednio związane z tym, że nie realne jest aby kompilator przetwarzał tylko poprawne programy, gdyż programiści to też ludzie i zdarzają się im błędy. Gdyby jednak dało się ich całkowicie unikać, wtedy projekt i stworzenie kompilatora bardzo by się uprościły. Niestety tak nie jest i często zdarza się, że programiści piszą niepoprawne programy, więc dobry kompilator powinien pomóc programiście w zlokalizowaniu błędu i jego usunięciu. To spowodowało, że obsługa błędów w analizatorze składniowym ma postawione proste cele:
• zgłaszać obecność błędu, w jasny sposób
• w razie wykrycia błędu, szybo wracać do analizy składniowej w celu wykrycia kolejnych błędów
• nie spowalniać w sposób znaczący przetwarzania poprawnych programów.
Jedną z ważniejszych funkcji kompilatora jest zapamiętywanie identyfikatorów, które są używane w programie źródłowym oraz zbieranie informacji o ich różnych atrybutach. Atrybuty mogą dostarczać informacji na temat ilości zajętej pamięci przez identyfikator, o jego typie, zasięgu (jego dostępność i widoczność w programie). Także w przypadku nazw atrybuty podają liczbę i typy argumentów, metody przekazywania każdego argumentu oraz typ wyniku o ile ta metoda zwraca wynik. Tablica symboli jest zbudowana ze zbioru rekordów z atrybutami dla wszystkich identyfikatorów. Struktura to za zadanie ma umożliwiać szybkie znalezienie rekordu dla każdego identyfikatora oraz szybkie zapisywanie i odczytywanie danych z rekordu. Identyfikator napotkany przez analizę leksykalną dodawany jest do tablicy symboli. Reszta faz wstawia do tablicy informacje o identyfikatorach, aby w kolejnych etapach kompilacji wykorzystać je do różnych celów takich jak; sprawdzenie podczas analizy semantycznej i generacji kodu czy identyfikatory używane są poprawnie oraz wygenerowania poprawnych operacji na nich działających. Dokładne informacje na temat przydzielonej pamięci identyfikatorom są niezbędne do działania generatora kodu [5],
13