Я пытаюсь научиться писать простой язык сценариев поверх DLR, играя с очень старым примером DLR, называемым ToyScript. Однако ToyScript не кажется, поддерживают следующую структуру сценария, который я хотел бы использовать в своей реализации:Изучение DLR (как реализовать язык поверх него)
print b()
def b() {
return 1
}
Это вызывает исключение, точно так, как в большинстве статически скомпилированных языках.
Если сценарий следует "статические языки парадигмы":
def b() {
return 1
}
print b()
ToyScript работает без проблем.
Мой вопрос: как это сделать в DLR?
[Очевидно, что я ищу описание решения, а не для решения сам по себе :)]
Что касается «как в большинстве статический скомпилированных языках»: Я не знаю, но я знаю, что вы получите сообщение об ошибке выполнения первого блока во многом * динамическом * языки (JavaScript, Python и Ruby, просто чтобы назвать несколько). – rsenna
Я только что просмотрел [IronPython] (http://ironpython.codeplex.com/SourceControl/latest#IronPython_Main/), но, похоже, он много работает для его реализации. Возможно, вам захочется посмотреть, как они это сделали и пройти пробную версию. – Measuring
Вам нужно будет сделать гораздо более умный интерпретатор. Он должен сделать * два * прохода через этот код. Первый проход должен содержать определения, второй проход выполняет код. Как это делают статические компиляторы :) –