Yacc) na podstawie opisu gramatyki.
Przykład Następujący przykład prezentuje typowy przypadek przeprowadzania analizy składniowej prostego języka wyrażeń arytmetycznych, z dwoma poziomami gramatyki: leksykalnym i składniowym.
Faza pierwsza jest generacją tokenów (analizą leksykalną), w trakcie której strumień wejściowy jest dzielony na znaczące symbole, określone przez gramatykę wyrażeń regularnych. Na przykład program kalkulatora mógłby przetwarzać ciąg znaków taki jak „12*(3+4)^2” i dzielić to na symbole 12, *, (, 3, +, 4, ), ^, 2, gdzie każdy coś oznacza w kontekście wyrażenia arytmetycznego. Lekser mógłby zawierać reguły, które mówiłyby, że znaki *, +, ^, (, ) zaznaczają początek nowego znaku, tak że ciągi bez znaczenia jak „12*” albo „(3” nie byłyby brane pod uwagę.
Następna faza to analiza składni (analiza syntaktyczna), która sprawdza, czy symbole tworzą dopuszczalne wyrażenie. To zazwyczaj jest robione w oparciu o gramatykę bezkontekstową, która definiuje rekurencyjnie komponenty tworzące wyrażenie oraz ich kolejność. Jednakże nie wszystkie zasady, definiujące języki programowania mogą zostać wyrażone przy pomocy czystej gramatyki bezkontekstowej, na przykład zgodność typów oraz właściwa deklaracja identyfikatorów.