время от времени фофан экспериментирую с написанием простеньких интерпретаторов, и пришел к таким вот выводам.
Термин «язык» в применении к современным ЯП вообще не вполне подходит, в том смысле, что они не являются языками, разве что только в математическом смысле, с натяжкой.
Когда речь идет о естественных языках, предполагается, что интерпертатором этого языка является человек. Когда человек интерпретирует выражения языка, он формирует контекст на ходу. Например, рассмотрим два выражения:
1) С первыми криками петухов Василий проснулся.
2) В этом году природа проснулась очень рано, в феврале уже капали сосульки.
Очевидно, что «проснуться» тут означает несколько разные вещи. Наш интерпретатор исходит из контекста.
если мы берем выражение, например foo.bar.baz, то наш интерпретатор, как правило, абсолютно не видит текущего окружения. В лучшем случае, при наличии динамического связывания, baz может прочитать и зарезольвить лишь предыдущее слово, выполниться в его контексте, про foo на этапе выполнения baz ничего не известно, и никогда не будет, он исчез бесследно, и доступа к нему нет. Даже в наиболее динамичных языках, подобные возможности сильно ограничены, хотя кое какие попытки есть, например code-walking.
Думал, как можно было бы в теории решить эту проблему.
Пока думаю, ввести некий класс Interpreter, и каждое выражение им оборачивать. Нужно запоминать текущее выражение, и пытаться выполнить последующие слова в контексте предыдущих, которые уже схлопнулись Тут еще надо заметить, что разные объекты должны обрабатывать те же самые выражения по-разному.
Перемещено tailgunner из development


