Bo masz parser typowo pod najprostsze operacje matematyczne. Jedyne, co potrafi parsować, to wyrażenia typu
45 ++ 34
Żeby to parsowało bardziej złożone rzeczy, musiałoby wyglądać tak po prawdzie zupełnie inaczej. Dzielenie po spacji mogłoby zostać, ale tokeny musiałbyś raczej analizować po kolei. I na tej podstawie mógłbyś dopiero stwierdzać, co trzeba z tym zrobić. Np. takie coś jak powyżej:
- pierwszy token: liczba – odkładasz na jakiś stos tokenów
- operator ++ – a więc wiesz, że to prawdopodobnie wyrażenie, do którego należy też poprzedni token
- kolejna liczba – w tym momencie masz pełne wyrażenie
Dla takiego write logika będzie za to inna, bo write jest pierwsze w wyrażeniu, a za nim następuje jakaś wartość, która ma być wypisana.
No i już na tak prostej składni masz tak po prawdzie potrzebę konstruowania jakiegoś AST/CST, żeby wiedzieć, co tak faktycznie sparsowany kod przedstawia. Dopiero mając wiedzę o tym, jesteś w stanie wykonywać ten kod.