Открывающая и закрывающая скобка это ведь отдельные токены? Как определить что блок кода закончился и начался новый блок кода?
Я там чуть выше написал)
Рекурсии решают этот вопрос)
Вы получаете скобку, со скобки может начинаться ограниченное количество операций, запускаете функцию, которая принимает токены до токена закрывающей скобки. Если внутри попадается ещё одна открывающая, вы рекурсивно запускаете эту же функцию. Таким образом вы либо успешно парсите весь код, либо натыкаетесь на какой-то неожиданный токен, например на EOF, ожидая закрывающую скобку, и взрываетесь.
Всё достаточно просто)