скоупа имён в случае с инкрементальными вычислениями?
Например, у нас есть такой код:
let x = 10;
x + 2;
Разрешая имя x во втором выражении мы можем его связать с объявлением переменной, пройдя по дереву разбора обратно, и не создавая тем самым символьной таблицы. Но если пользователь напишет после let x = 10; еще какое-нибудь затемнение переменной типа
let x = 10;
let x = 20;
x + 2;
то нам нужно будет пересвязать x + 2 на новое объявление. Но как это сделать без таблиц имён не очень понятно.
Идите вверх по дереву просто и все. Наткнулись на x=20, его и используйте, не? Другой разговор, что name shadowing сам по себе может быть проблемой.
Проходить по дереву в обратном порядке до первого определения?
А как я пойму, что нужно что-то перерасчитывать в атрибуте, связанным с x + 2, если изменение в коде произошло где-то сильно посередине?
Надо различать разбор и исполнение. На исполнении есть переменная х? Если да, то какая разница, где она определена? Просто ссылаетесь на нее и все. Будет это таблица имен или нет, неважно. Ну, если я вопрос осилил корректно.
Обсуждают сегодня