Дизайн языка программирования - PullRequest
3 голосов
/ 05 апреля 2011

Я создал язык программирования и написал его на своем компьютере.Это экспериментальный непрофессиональный язык программирования, который я создал для удовольствия.

Для языка нужен самый важный компонент - компилятор.

Это хорошая идея для преобразования исходного кода в C/ ++ и вызывать GCC?

Мой язык похож на C ++ и Java, его не сложно преобразовать без синтаксического анализатора.

Моя цель не состоит в том, чтобы что-либо оптимизировать и генерироватьбинарный для каждой платформы.Если я создаю источник C, я могу скомпилировать его для многих платформ и использовать оптимизации GCC.

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

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

Спасибо

Ответы [ 3 ]

4 голосов
/ 05 апреля 2011

Чтобы противостоять Mehrdad, преобразование вашего языка в C - хорошая идея. Многие языковые компиляторы компилируются в C, используя его в качестве «переносимой сборки». Теперь создание внешнего интерфейса для GCC - хорошая идея, но она поднимает планку с точки зрения начальной сложности. Создание кода на C намного проще, чем внешний интерфейс для GCC.

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

Грамматическая часть вашего языка может быть не очень веселой, но, скорее всего, это будет вашим первым разочарованием. Поэтому стоит уделить немного внимания тому, что делают другие языки, и взглянуть на их грамматику. Рассмотрим несколько простых рекурсивных приличных парсеров Pascal, если вы думаете, что ваш язык может с этим работать. Или поищите грамматики Yacc и ANTLR.

То, что изначально большинство людей находит разочаровывающим, это просто выражения.

a + b * ( c - sqrt(12 / 4) + sin(30))

У многих людей проблемы с выражениями. После того, как вы получите работу с выражениями, все остальные могут легко встать на свои места (при условии, что язык, подобный Algol / C, по сравнению с другим стилем синтаксиса, над которым вы работаете).

2 голосов
/ 05 апреля 2011

Если ваша настоящая цель - и помните, под целью я имею в виду, что вы думаете, над чем будет весело работать ;-) - это языковой дизайн, то я бы сказал, что совершенно нормально избегать написания своего собственного полного компилятор удара. Вопрос только в том, намного ли проще написать переводчик с вашего языка на C (++)? Вероятно, это проще, чем написать интерфейс для gcc или LLVM (хотя это серьезные подходы, если ваша цель иная).

Мой совет - начать с переводчика C / C ++.

2 голосов
/ 05 апреля 2011

Я не совсем эксперт по этой теме, но, насколько я знаю, "преобразование" вашего кода в C или C ++ - довольно плохая идея, особенно , когда используя GCC.

GCC имеет архитектуру "плагинов". Вместо этого вам следует создать front-end для компилятора GCC, который может обрабатывать код на вашем языке, и позволить back-end GCC позаботиться о генерация и оптимизация кода.

(Я сам этого не делал, поэтому не знаю деталей, как это будет работать.)

...