Как трансляторы хранят AST?
Изучаю тему создания ЯП. Возник такой вопрос:
Интерпретаторы выполняют код строчка за строчкой, но при этом любой интерпретатор выдаст ошибку, не начав исполнение кода, если где-то не закрыта скобка или допущена какая-то другая синтаксическая ошибка. Из этого я сделал вывод, что код выполняется не на лету, а после синтаксического анализа. При этом, для скорости работы интерпретатора (да и про компиляторы можно сказать то же самое) было бы логично на стадии этого синтаксического анализа заодно строить AST, а потом уже его исполнять. Так вот сама суть вопроса: не слишком ли много оперативной памяти будет занимать хранение такого AST вообще всей программы, в которой может быть очень много тысяч строк кода (да еще и + подключенные библиотеки), или (обобщим) трансляторы применяют какие-то другие трюки? Если да, то какие?