Задать вопрос
Ответы пользователя по тегу Трансляторы
  • Что нужно почитать и изучить для написания свой транслятор языка?

    bingo347
    @bingo347
    Crazy on performance...
    что нужно почитать и изучить дня того, чтобы написать транслятор

    По темам:
    - Лексический анализ и токенизация кода
    - ASTree
    - Кодогенерация

    Из книг лучше всего эта:
    https://www.amazon.com/Compilers-Principles-Techni...
    Ответ написан
    Комментировать
  • На чём написаны интерпретаторы и компиляторы разных языков?

    bingo347
    @bingo347
    Crazy on performance...
    Как уже сказали в других ответах, компиляторы и интерпретаторы пишут так же на языках программирования.
    Насчет компиляторов так же считается, что зрелый язык позволяет написать собственный компилятор на себе самом. И для многих компилируемых языков компиляторы действительно написаны на них самих. Но тем не менее, самый первый компилятор все равно придется написать на другом языке, в современном мире для этого очень часто выбирают OCaml, хотя и другие языки вполне подойдут.
    Интерпретируемые языки нуждаются в интерпретаторе, который пишется на компилируемых языках. Простор выбора тут огромен, но чаще все же встречается или C или C++.
    Так же еще встречается JIT компиляция (js (не всегда), lua), при которой весь процесс компиляции происходит непосредственно перед выполнением, а так же гибридная AOT+JIT компиляция (C#, Java), когда исходный код компилируется в байткод при разработке (AOT), а перед исполнением байткод компилируется в машинный код (JIT), что позволяет получить плюсы от обоих типов компиляции. JIT компиляторы как и интерпретаторы как правило пишут на AOT-компилируемых языках.
    Ну и надо не забывать, что почти у каждого языка бывает стандартная библиотека, которая может быть написана как на самом языке (C, C++, Go, Rust), на самом языке + на другом, чаще на C или C++ (js (не во всех движках), C#, Java, python (не уверен, что он не к следующему типу больше)), либо полностью на другом языке (php, python (?)). Тут все сильно зависит, на сколько в языке доступно низкоуровневое общение с ОС и железом, а так же на сколько это быстро можно выполнить не ломая "сахара" языка.
    Ответ написан
    Комментировать