Ответы пользователя по тегу Трансляторы
  • Можно ли создать компилятор без AST?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    В однопроходном компиляторе этапы синтаксического и семантического анализа могут быть объединены. AST становится виртуальной, существующей в памяти разборщика в момент его работы в виде стека контекстов и другой служебной информации, в явном виде (как в ANTLR) не создается . Предположительно именно так были реализованы классические компиляторы Turbo Pascal и Delphi.

    Результатом работы такого разборщика становится промежуточное представление, уже не являющееся AST — семантический граф, промежуточный (трехадресный) код со служебной информацией, либо же какой-то свой тип. В своем проекте, скажем, я буду генерить обратимый код, поддерживающий отекстовку в сильно вариативный синтаксис.

    Короче, причиной выбора подобной архитектуры компилятора должен быть особый случай, обусловленный особенностями проекта и описанный в его концепциях. Если вопрос был в том, можно ли написать разбор входного языка вручную, без использования генераторов синтаксических деревьев, — ответ «да», так пишут. Это хороший опыт.
    Ответ написан
    Комментировать
  • Правильны ли понятия трансляции, компиляции и интерпретации в книгах Таненбаума?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    В том смысле, как эти термины подразумеваются Танненбаумом, различие между трансляцией и компиляцией в том, что в первом случае происходит взаимно-однозначное (и потенциально обратимое) преобразование операторов входного языка (исходника) в команды исполнителя, а компиляция — более «творческий» процесс, когда одному оператору входного языка будет соответствовать произвольное (обычно довольно существенное) число команд исполнителя, однозначность возможна лишь на уровне блоков кода, а обратимость практически утеряна (однозначная декомпиляция невозможна).

    На практике трансляторами являются различные ассемблеры, а компиляторами — генераторы машкода языков высокого уровня (ЯВУ). Это отражено в литературе: ассемблирование программ ассемблером называют трансляцией, а трансляцию (каламбур!) в машкод языков высокого уровня — компиляцией. Иногда говорят «трансляция с ЯВУ», подразумевая неоднозначность процесса явно.

    Другое использование термина «трансляция» — в качестве объединяющего для компиляции и интерпретации. В этом случае речь идет только о языках высокого уровня, ассемблеры остаются за скобками.

    У себя на форуме я неправильно использовал эти термины
    После углубленного изучения темы выяснилось, что процесс генерации обратимого кода для дальнейшего добавления в базу правильней называть трансляцией и установкой, а не компиляцией. В окончательном документе это будет учтено.
    Ответ написан
    1 комментарий
  • Существуют в природе простые, но при этом достаточно полные примеры компиляторов?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    TCC, LCC, Pascal Pro, различные компиляторы Оберона, вроде как для ОС "Колибри" кто-то сделал. Borland вроде даже исходники Turbo Pascal 6.0 открывала, у меня были где-то.
    Ответ написан
    Комментировать
  • Какая часть транслятора должна отслеживать ошибку типа "неверный формат числа"?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    В том месте, где полученный нетерминал интерпретируется как число.
    Ответ написан
    Комментировать
  • Есть ли SDK LLVM в Windows? Или самому собирать?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    Странно, в CLang llc нет. Я откуда-то раньше качал собранные бинарники, но не помню, что именно с LLVM.org. Версии 3.3 и 3.4 есть, например, на GitHub.
    Ответ написан
  • Как написать свой транслятор одного языка в другой?

    Vapaamies
    @Vapaamies
    Разработчик будущей ОС для ПК размером 250 МБ
    А почему про Haxe никто не сказал?
    Ответ написан
    Комментировать