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

Как создать язык программирования .Net?

Я создал несколько разных полных языков программирования, используя некоторые из доступных инструментов разбора. Однако, как бы кто-то создал язык программирования, который запускает инфраструктуру .Net? Должен ли я выводить .Net IL и компилировать это или есть более высокий уровень абстракции?

Кроме того, есть ли простой способ получить язык, который работает в Visual Studio?

4b9b3361

Ответ 1

Вы хотите взглянуть на проект Проект Microsoft Common Common Compiler Infrastructure (CCI). Он предоставляет все необходимое для создания метаданных и MSIL для сборки. И отладочный файл .pdb, довольно важный, чтобы заставить ваш язык двигаться.

Там может быть полезен сестра-проект, модель кода CCI и AST, которая зависит от того, насколько далеко вы достигли.

Ответ 2

В С# есть компилятор LOLCode, который может быть хорошей отправной точкой.

http://code.google.com/p/lolcode-dot-net/

Что касается реализации в Visual Studio, есть механизм просмотра с открытым исходным кодом Spark (http://www.sparkviewengine.com/), который сделал некоторую работу с получением intellisense работать. Контекст отличается, но урок один и тот же, это трудно, и это не очень хорошо документированный процесс.

Ответ 3

Ваш компилятор отвечает за преобразование кода, который он получает в ILCode. ILCode - это общий язык, с которым компилируются все языки .net. Этот код интерпретируется JIT-компилятором во время выполнения. Конечно, он может полагаться на классы CodeDom в рамках, чтобы это сделать, если вы пишете компилятор в С#, например.

Ответ 4

Не уверен, что это то, что вы ищете, но после того, как я имел вопрос о SO, я создал .NET Компилятор для Brainf ** k в качестве excersize (Часть 6 содержит фактический компилятор Исходный код, а также на GitHub)

По существу, фактический компилятор может быть написан на любом языке .net и использовать пространство имен System.Reflection.Emit для создания сборок, классов, методов и т.д. и испускать IL в них.

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

Вы хотите прочитать ECMA-335, чтобы узнать, как работает CLI: какие типы данных он поддерживает и какие команды он действительно делает.

Ответ 5

Ваш компилятор может выводить либо язык сборки CIL, либо файл сборки (.dll/.exe).

Взгляните на стандарт CLI (Common Language Infrastructure), в котором описывается CLI (целевая платформа), CIL (язык ассемблера) ) и формат бинарных файлов сборок.

Кстати, стандарт также доступен как книга с аннотациями.

Ответ 6

Отличным примером интеграции вашего собственного языка в Visual Studio является проект Lua Language Support.

Ответ 7

или есть более высокий уровень абстракции?

Чтобы быть полным, вы можете выводить С# или VB.NET. Оба компилятора являются частью среды выполнения.

Несомненно, если бы это был "настоящий" компилятор.

Ответ 8

Я изучал промежуточный язык .net, CLI (или как он там назывался) (версию С# (потому что это то, на чем я основываю свой язык)) и компилятор "конвертировал" код в этот язык. Я также планирую в будущем построить ab IDE (E-Dev, который будет использоваться для сборки кода с использованием блоков), если вам интересно.