Подтвердить что ты не робот

Как сделать собственный язык программирования?

Возможный дубликат:
Обучение написанию компилятора

Я огляделся, пытаясь узнать больше о развитии языка программирования, но не смог найти много онлайн. Я нашел несколько обучающих видеороликов, но не так много для текстовых руководств, часто задаваемых вопросов, советов и т.д. Мне действительно интересно, как создать собственный язык программирования. Это приводит меня к SO, чтобы спросить:

Как вы можете сделать свой собственный язык программирования?

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

С чего начать? Построение синтаксиса? Построение компилятора? Какие навыки необходимы? Много сбоев и понимания операционной системы? На каких языках написано большинство компиляторов и языков? Я предполагаю, что C.

4b9b3361

Ответ 1

Я бы сказал, что прежде чем вы начнете, вы можете взглянуть на Dragon Book и/или Язык программирования Pragmatics. Это обусловит вас в теории языков программирования. Книги охватывают компиляцию и интерпретацию и позволят вам создать все инструменты, необходимые для создания базового языка программирования.

Я не знаю, какой язык ассемблера вам известен, но если вам не нравится какой-либо диалект программирования на ассемблере, я бы посоветовал вам не пытаться написать компилятор, который компилируется до кода сборки, так как он довольно немного сложной задачей. Вы упомянули ранее, что знакомы как с C, так и с С++, поэтому, возможно, вы можете написать компилятор, который компилируется до C или С++, а затем использовать gcc/g++ или любой другой компилятор C/С++ для преобразования кода в собственный исполняемый файл. Это то, что делает язык программирования Vala (он преобразует синтаксис Вала в код C, который использует библиотеку GObject).

Что касается того, что вы можете использовать для написания компилятора, у вас есть много вариантов. Вы можете написать его вручную на C или С++, или для упрощения разработки вы можете использовать язык более высокого уровня, чтобы вы могли сосредоточиться на написании компилятора больше, чем выделения памяти и такие, которые необходимы для работы со строками в C.

Вы можете просто сгенерировать грамматики и Flex и Bison генерирует анализатор и лексический анализатор. Это действительно полезно, так как позволяет вам выполнять итеративную разработку, чтобы быстро работать над получением рабочего компилятора.

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

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

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

Я надеюсь, что это поможет вам.

EDIT: Я многому научился с тех пор, как написал этот ответ. Я принимал онлайн-курс

Ответ 2

Все зависит от того, каким будет ваш язык программирования.

  • Вы определенно хотите, чтобы он был скомпилирован? Также существуют интерпретированные языки... или вы можете реализовать компиляцию во время выполнения

  • Что вы хотите, чтобы целевая платформа была? Некоторые параметры:

    • Исходный код (какие архитектуры и операционные системы?)
    • JVM
    • Обычный .NET
    • .NET с использованием динамического языка Runtime (например, IronRuby/IronPython)
    • Parrot

Лично я бы сильно подумал о таргетинге на JVM или .NET, просто потому, что тогда вы получаете много "безопасности" бесплатно, а также огромный набор библиотек, которые может использовать ваш язык. (Очевидно, что с собственным кодом есть много библиотек, но я подозреваю, что правильное взаимодействие между ними может быть более сложным.)

Я не вижу причин, по которым вам особенно хотелось бы написать компилятор (или другую часть системы) на C, особенно если он предназначен только для образовательных целей (так что вам не нужны 100-миллионные строки -секундный компилятор). На каком языке вы лично наиболее продуктивны?

Ответ 3

Посмотрите ANTLR. Это потрясающий компилятор-компилятор, который вы используете для создания парсера для языка.

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

Вы также можете взглянуть на классическую "Книгу Дракона" (книгу о компиляторах, в которой есть рыцарь, убивающий дракона на первой странице). (Google it).

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

Ответ 4

Существуют различные обучающие онлайн-программы, такие как Напишите себе схему через 48 часов.

Одно место для начала "может быть со" встроенным доменным языком "( EDSL). Это язык, который фактически работает в среде другого, но вы создали ключевые слова, операторы и т.д., Особенно подходящие для объекта (домена), в котором вы хотите работать.