2010-11-10 5 views
4

Предположим, что я разработал новый язык программирования для одной из управляемых кодовых сред (.NET/JVM). Могу ли я теперь реализовать его , просто написав переводчик, который переводит исходный код этого нового языка на основной язык платформы (C#/Java), а затем позволяет компиляторам платформы и другим инструментам обрабатывать остальную часть процесса? Существуют ли простые, доказательство концепции, примеры такого подхода?Внедрение нового языка программирования

+0

Ресурсы для усилий (лексический, синтаксический анализ, построение AST, если вам так хочется, и т.д ...): [Научиться писать компилятор] (HTTP://stackoverflow.com/q/1669/2509). – dmckee

ответ

6

Да, вы можете это сделать до тех пор, пока карта семантики должным образом (обратите внимание, например, на отображение кода JavaScript на такой язык, как C#, поскольку правила определения области обзора различны).

Это не на управляемой платформе, но вы можете посмотреть Vala. Это C# -подобный язык, который компилируется с C. Eiffel также компилируется в C (и поддерживает компиляцию на Java).

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

1

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

+1

Это не так сложно, как кажется на первый взгляд. Просто выполните компиляцию режима «debug», который сохраняет исходный номер строки при выполнении нового кода. Тогда вам просто нужно написать простой отладчик, который улавливает исключение верхнего уровня и выводит последний маркер линии. Затем вы можете получить фантазию и позволить пройти через маркеры или трассировать их в файл журнала. Я думаю, что это относительно легко по сравнению с основной задачей разработки нового языка. – JOTN

1

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

0

Я предлагаю 2 этапа:

Во-первых, сделать переводчик или компилятор с вашего языка C# или Java. Во-вторых, сделайте переводчик на .NET-код (CIL или MSIL) или Java-байт-код.

(другой компилятор & программирования дизайн языка hobbyst)

Смежные вопросы