Задать вопрос
Ответы пользователя по тегу Трансляторы
  • Какие есть книги/руководства по разработке "простого языка программирования" для новичка?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Рекомендую начать с Форта: минимальный интерпретатор пишется за один-два вечера за чашкой чая. Форт очень простой, гибкий и очень мощный. Он позволяет реализовывать достаточно простым способом проблемно-ориентированные ЯП (DSL). У него крайне простой синтаксис - это просто слова, отделенные разделителем (пробелом). И всё! Проще не бывает. Для передачи аргументов используется стек. Математика реализуется обратной польской записью: число, число, оператор. Типа 1 2 +. Если смотреть с классической позиции, то Форт - это интерпретируемый И компилируемый процедурный ЯП высокого И низкого уровня. Почему одновременно и высокого и низкого? Потому что существуют Форт-процессоры в кремнии, для которых Форт - ассемблер (т.е. все слова сразу интерпретируются/компилируются в машинные коды без дополнительной прослойки). А ассемблер - это ЯП низкого уровня. Процедурный - потому что слово может как забрать любое число элементов со стека, так и оставить на стеке любое их число (а не только один аргумент как в функциях). Гибкость же языка реализуется открытостью его движка - можно на лету менять правила интерпретации, компиляции и даже в рантайме все это переписывать, перекомпилировать и прочее. Например, знаменитое сишное определение #define TRUE FALSE заиграет новыми красками, ибо его можно провернуть в рантайме не особо напрягаясь. А еще можно управлять стеком возвратов (это список адресов, куда продолжается поток управления после завершения процедуры) - GOTO в сравнении с этим в ужасе трясется под лавкой. Самое известное приложение для Windows, в котором раскрыты все возможности форта - это nnCron: один из мощнейших автоматизаторов для Windows.
    В качестве дипломной работы реализация Форта подойдет великолепно и чего-то лучше вы вряд-ли найдёте (проверено лично, если что).
    Литература


    Ссылки на англоязычные ресурсы из мана ннкрона:

    И наше русское Форт-сообщество находится вот тут: fforum.winglion.ru
    Ответ написан
    2 комментария
  • Как реализовать условные конструкции в языке Форт?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Как мне реализовать оператор ветвления так, чтобы он поддерживал вложенность.

    Стеком, конечно. Для этого, обычно, используется т.н. стек управления или управляющих структур. Он существует только во время компиляции. Точный механизм не помню, но то ли кладем в этот стек код операции то ли адрес точки ветвления для вычисления смещения ветвления то ли все вместе.
    И ещё, не подскажите ли, как разбить код на функции? А то функция eval-forth-program слишком большая и сложная.

    Традиционно форт реализуется с использованием т.н. шитого кода. Так же есть и вариации шитого кода и другие механизмы. В целом логика такая: есть список - это словарь слов. Логика интерпретатора крайне проста:
    1. Получить следующий символ из входного потока
    2. Если ноль или конец строки - выход
    3. Если не разделитель - перейти к следующему символу
    4. Если разделитель - искать слово в словаре
    5. Если слово найдено - выполнить его
    6. Не найдено - сообщить об ошибке

    Далее, организовываем два стека - основной, возврата, переменную STATE (интепретация/компиляция), основной словарь или список словарей, минимальный набор слов для компиляции - двоеточие, точка с запятой и далее по мере надобности все остальное. Главное запустить интерпретатор, от него компилятор, а далее уже можно средствами самого форта реализовать остальной минимальный набор слов, затем учим форт компилировать и собирать самого себя и получаем самодостаточную систему. Рекомендую книги Лео Броуди к прочтению и регистрацию на форт-форуме - там тоже очень много материалов по теме реализации форта )
    Ответ написан
    1 комментарий
  • Есть ли отдельный компилятор для c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Гугл -> MonoDevelop, Xamarin, .Net Core.

    Но мне нужно язык строго типизированный Gargabe Collector чтобы сам не убирал, а оставлял мне.
    В С# GC работает автоматически как бы и программисту нет необходимости вручную выделять/освобождать память. Чем он не устраивает? Каковы задачи в целом? Каждый ЯП решает какие-то определенные задачи. В общем случае вам подойдет С++ и иже с ним.

    Не подскажите после изучение синтаксиса языка чтобы прогать что нужно?
    Опыт решения реальных задач.
    Ответ написан
    8 комментариев