Как создать язык программирования .Net?
Я создал несколько разных полных языков программирования, используя некоторые из доступных инструментов разбора. Однако, как бы кто-то создал язык программирования, который запускает инфраструктуру .Net? Должен ли я выводить .Net IL и компилировать это или есть более высокий уровень абстракции?
Кроме того, есть ли простой способ получить язык, который работает в Visual Studio?
Ответы
Ответ 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, который будет использоваться для сборки кода с использованием блоков), если вам интересно.