Что нужно иметь в виду при разработке языка программирования - PullRequest
4 голосов
/ 11 января 2011

Я разрабатываю язык программирования для личного использования и обучения.Первые версии эталонного компилятора будут компилировать исходный код на некоторый другой язык, например C. Какие вещи я должен иметь в виду, чтобы гарантировать, что время компиляции будет быстрым как для компиляции с другим исходным кодом, так и для двоичного исполняемого файла?Любые другие вещи, которые полезно знать?

Несмотря на то, что я говорю о скоростях компиляции, основной фокус вопроса - язык, а не компилятор.

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Если вы сосредоточены на изучении дизайна компилятора, я думаю, что скорость компиляции не будет вашим приоритетом.Я предлагаю вам сначала реализовать синтаксический анализатор сверху вниз, используя рекурсивную технику потомков, которая проста и понятна.Также используйте лексер, разработанный вручную с использованием конечного автомата, который также довольно прост, но концептуально очень богат.

При определении синтаксиса вашего языка вы должны убедиться, что он согласован и однозначен.Если вы знакомы с Prolog, вы можете использовать Грамматики Определенных Условий (DCG), чтобы поиграть с вашим языком перед его внедрением.Я нахожу это весьма полезным.

Тогда вы можете рассчитывать на реализацию лексера и анализатора с использованием инструментов для их генерации (таких как Bison, ANTLR, Lemon, Yacc и т. Д.)

Еще один совет:будь проще.Вы можете реализовать подмножество языка, который вы хотите построить, и отшлифовать его, пока не почувствуете себя довольным, затем расширить его, внедрив новые функции и так далее.Вы обнаружите, что расширяете свой язык и свой компилятор, и видите, как он становится больше и полнее, а когда он становится все лучше и лучше, вы будете чувствовать себя более уверенно и удовлетворенно.В конце концов, это красивый и красивый вызов.

Веселитесь.Изучение дизайна компилятора - это просто увлекательная и очень интересная тема!

PS.Прочитайте книгу дракона

0 голосов
/ 11 января 2011

Если вы серьезно не ошиблись в проектировании, скорость компиляции языка вряд ли станет проблемой. Вы должны сосредоточиться на синтаксисе и семантике, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...