Синтаксические анализаторы (как бы они ни создавались) обычно не могут проверять правила области видимости.
В целом, чтобы выполнить проверку области действия, в общем случае необходимо построить весь AST, а затем убедиться, что идентификаторы хорошо определены.Для языков, которые имеют статическую область видимости с областями действия, введенными до использования переменных, вы можете сделать это только в правилах.Для языков с пространствами имен объявление пространства имен может произойти где угодно, и вы не сможете сделать это без сбора этого пространства имен и, следовательно, всей программы.(Объявление пространства имен может даже не находиться в том же файле, что и использование; теперь у вас есть разбор совершенно другого файла).
Как следствие, обычный способ проверки области видимости выполняется после синтаксического анализа программы.дерево.Обычно, если вы собираетесь делать что-то кроме разбора, вам все равно нужно дерево и полная таблица символов, так что это не очень-то раздражает.
Некоторые ранние компиляторы не могли позволить себе роскошьдержа все дерево в памяти.Либо у них были языки с декларациями области видимости перед использованием, либо они были реализованы в несколько проходов.