Методологии проектирования простого языка программирования - PullRequest
5 голосов
/ 30 июля 2009

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

Ответы [ 3 ]

3 голосов
/ 30 июля 2009

Есть так много способов ...

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

Вы можете посмотреть на функциональные языки. Большинство из них основаны на нескольких простых понятиях и имеют простой анализ. И, тем не менее, они очень мощные.

А потом традиционные языки. Они самые тяжелые. Вам нужно будет узнать о лексических анализаторах, синтаксических анализаторах, грамматиках LALR, грамматиках LL, EBNF и обычных языках, чтобы просто пройти синтаксический анализ.

Ориентация на байт-код - это не просто хорошая идея, иначе все просто безумно и, как правило, бесполезно в учебном упражнении.

Сделайте себе одолжение и найдите книги и учебные пособия по компиляторам.

Подойдет либо C, либо Java. Java, вероятно, имеет преимущество, так как объектная ориентация хорошо подходит для задач такого типа. Моя личная рекомендация - это Скала. Это хороший язык для такого рода вещей, и он научит вас интересным вещам о языковом дизайне.

1 голос
/ 30 июля 2009

Рекомендую прочитать следующие книги:

ANTLR

Шаблоны проектирования языков

Это даст вам инструменты и методы для создания синтаксических анализаторов, лексеров и компиляторов для пользовательских языков.

1 голос
/ 30 июля 2009

Возможно, вы захотите сначала прочитать книгу о компиляторах .

Чтобы действительно понять, что происходит, вы, вероятно, захотите написать свой код на C.

Java не был бы плохим выбором, если вы хотите написать интерпретируемый язык, такой как Jython . Но так как кажется, что вы хотите скомпилировать до машинного кода, это может быть проще в C.

...