@isisTance
Python, C#, C++, HTML, CSS, backend developer.

Написать компилятор на C# или C++ или Python?

На чем из них лучше написать свой компилируемый ЯП. Если можно, написать плюсы и минусы каждого из них. Спасибо.
p.s. Очень желательно с объективными причинами.
  • Вопрос задан
  • 3690 просмотров
Решения вопроса 6
@denismaster
Видел парня на хабре. В 11 лет не каждый может такого достичь, как он, но все же.

Итак, вы хотите написать компилятор. Это не так сложно, как кажется(иначе не было бы такого количества языков).
  1. Понадобится выучить, что такое грамматики, формальные и регулярные языки, контекстно-свободные грамматики и так далее. Необходимо достаточно глубоко понимать, что это и для чего. Также нужны знания структур данных, ассемблера, паттернов проектирования.
  2. Для опыта необходимо посмотреть грамматики современных языков, благо, они есть в свободном доступе. Пример раз, пример 2
  3. На основе полученных знаний, а также опыта изучения грамматик существующих языков необходимо написать свою грамматику
  4. К этому моменту вы сильно подрастете, если не физически, то скиллом уж точно, поэтому заведите себе хобби или девушку, чтобы отвлекаться от этой дребедени, иначе сойдете с ума.
  5. На основе данной грамматики пишется на любом известном вам языке лексер и парсер, которые переводят эту грамматику в набор токенов(задача лексера), а парсер эти токены в Абстрактное Синтаксическое Дерево (Abstract Syntax Tree)
  6. На основе данного дерева вы можете проводить анализ кода, проверку на ошибки, оптимизации.
  7. Данное дерево мы можем трансформировать в другую форму. После чего на его основе сгенерировать код, который мы хотим получить.
  8. Крайне советую посмотреть исходники открытых компиляторов, например, Roslyn для шарпа или аналогов для других языков, чтобы посмотреть, как оно вообще работает.


В одиночку написать компилятор для языка высокого уровня достаточно сложно, поэтому советую выбрать язык, который вам нравится, но который вы хотели бы поменять, изучить теоретическую часть, а дальше идти на гитхаб к проекту компилятора для вашего языка и делать пулл-реквесты. Заодно вы получите опыт командной разработки, глубокие знания самого языка, который вам нравится.

И да, придется оооочень много читать, а также хороший английский, на русском намного меньше литературы по данной специфике.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
Какая разница на чем писать? Пишите на том, что знаете.
Компилятор он просто парсер исходного кода в исполняемый код, от него не особо что-либо зависит.

Как вам пишут выше, этот вопрос показывает, что вам рано писать компилятор. Напишите лучше несколько прикладных программ, можно даже банальных парсеров.
Ответ написан
Комментировать
sim3x
@sim3x
Ни на чем
Сначала сделайте свою грамматику и парсер для нее

На чем угодно

Если осилите, такие вопросы не будут возникать
Ответ написан
Комментировать
ShamanSBubnom
@ShamanSBubnom
С++ быстрее С# и намного быстрее Python ( в 20-30 раз) . Так что если тебе не хочется что бы простая программа компилировалась 5-10 минут то С++ или С# . А если тебе нужно просто понять принципы - тогда лучше Python т.к на нем писать легче и быстрее.
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Вообще, можно на любом языке, обычно используют C++. Вам же я посоветую почитать теорию, например в таком порядке: "код. тайный язык информатики", "архитектура ПК" Танненбаума, книга дракона про компиляторы. Можно начать с чуть более простого - написания интерпретатора.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@JustMoose
Программист. Радиолюбитель. Прокрастинатор ;)
Привет. Попробуй почитать голову дракона.
Вот: www.ozon.ru/context/detail/id/3829076
Они там на Си подобном языке фигачат.
Есть ещё Small BASIC у Шилдта: https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D0%BB%D...
(книжку придётся погуглить, я не помню точное название).
Вообще, грамматики - штука не самая понятная. Постфактум могу сказать, что я зря прощелкал лекции по математике (те самые, где говорили про грамматики) в институте. Сейчас бы они весьма пригодились ;((
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы