Trurl писал(а):
Это все хорошо и правильно. Но смущает вот что
Цитата:
Для начала однопроходная, методом рекурсивного спуска. А затем — тот же метод рекурсивного спуска, но для построения абстрактного синтаксического дерева.
Мне кажется, при таком подходе труднее добиться
Цитата:
Достаточно прост во внутреннем устройстве и понимании
Отнюдь. В итоге останется только абстрактное синтаксическое дерево. Однопроходный компилятор будет строиться в начале книги, да и для нас самих, как для начинающих разработчиков компилятора, написание однопроходного компилятора было необходимым шагом. Диалектический материализм учит, что любую вещь надо показывать в развитии, а не в застывшем, «готовом» виде.
Пётр Кушнир писал(а):
Вы мало понимаете в предмете, лучше не начинайте компилятор Оберона, назовите это как-нибудь иначе, чтобы тень на исходный язык не отбрасывало.
Это недоказанное утверждение. Подавляющее большинство существующих компиляторов Оберона, Оберона-2 и Оберона-07, а также Компонентного Паскаля, нами изучены. В теме мы разбираемся хорошо. Более того, если проследить за нашей деятельностью, то можно увидеть, что опубликованный в репозитории код не представляет основную ветвь проекта, а является новым кодом, начатым заново. Основная версия уже компилирует простейшие программы в исполняемый ELF-файл (Линукс, x86), не используя трансляцию в другой язык программирования или какую-либо другую вспомогательную утилиту. Работают все арифметические операции, обработка сложных выражений, присваивание, вызов процедур из модулей In, Out. Соответственно есть (и работает) библиотека времени выполнения.
Comdiv писал(а):
kekc_leader писал(а):
Компилирует в машинный код, а не в другой язык программирования
Я на всякий случай уточню, что машинный код - это программа на машинном языке программирования, то есть, трансляция в машинный код - это, опять-таки, трансляция "в другой язык программирования". Даже формат абстрактного синтаксического дерева - это тоже язык программирования, хотя и задаваемый по другому.
Там и написано «в машинный код, а не в другой язык программирования», так что вашему утверждению это не противоречит.
Из контекста, однако, должно быть ясно, что имеется в виду язык программирования высокого уровня, такой, например, как Си. Машинный код таким языком не является. Но спасибо за уточнение.
Comdiv писал(а):
...Да и полезно было бы зафиксировать разные стадии развития транслятора. В принципе, полезно одновременно иметь и наиболее простую - оперативную версию транслятора и многостадийную версию.
Замысел таков, что это как раз и будет в книге, поэтому любой сможет при желании повторить. И сам код будет доступен, т. к. различные версии его сохраняются в репозитории.
Переход к абстрактному синтаксическому дереву, скорее всего, понадобится тогда, когда компилятор будет уже вполне готов и будет работать хотя бы на одной платформе.