2013-03-13 2 views
6

Я знаю, что это может не стоить того, но только для образовательных целей. Я хочу знать, есть ли способ внедрить ваши собственные ключевые слова на языки .NET.Можно ли добавить ключевое слово на C# или VB.NET?

Например, я подумал, что хорошо иметь ключевое слово C++ asm в C#.
Помните, что я не говорю о том, как реализовать ключевое слово asm, но общий способ добавления ключевого слова в C#.

Мой вообразил код:

asm{ 
    mov ax,1 
    add ax,4 
} 

Так есть ли способ для достижения этой цели?
Ответы, которые охватывают выполнение keyword{ } костюмов достаточно для этого вопроса.

+8

Только если вы готовы написать свой собственный компилятор C#. –

+0

Единственный способ, которым я знаю, это присвоение псевдонимов известным типам. –

+0

Я думаю, что для этого нужен какой-то вариант тега «Промежуточный язык» ... все .NET переходит к IL-коду – LamonteCristo

ответ

4

В настоящее время это невозможно. Тем не менее, есть проект Microsoft в разработке под названием Roslyn, который можно суммировать как «компилятор как услуга». Это позволяет, помимо прочего, расширять или изменять поведение компилятора с помощью API.

Когда Рослин станет доступным, я считаю, что это должно быть нечто, что (с осторожностью!) Вполне выполнимо.

+0

+1 Хорошая информация. – SysDragon

+0

С выпуском Roslyn, может ли кто-нибудь предоставить лучший (обновленный) ответ сейчас? –

2

К сожалению, это невозможно. Вы не можете расширять или изменять языки каким-либо образом.

Вы можете каким-то неясным способом использовать PostSharp для чтения и анализа строк и преобразования их в пользовательский код во время компиляции (предварительный процессор). Но вы бы не очень обрадовались этому, так как он очень подвержен ошибкам, и вы не получите никакого совершенства или завершения кода для ваших магических строк.

0

Согласно MSDN ключевые слова предопределены и не могут быть изменены. Поэтому вы не можете добавить их, потому что вам нужно будет сообщить компилятору, как их обрабатывать. Если вы не можете этого сделать.

2

Вы можете использовать любые инструменты, которые хотите обработать код перед отправкой в ​​компилятор C#. Например, вы можете использовать макросы VS для предварительной обработки, сопоставляя данный синтаксис, который вы изобрели, в то, что делает, скомпилировать в код C#, возможно, создавая ошибку, если есть проблема. Если макросы VS недостаточно мощны для вас, вы всегда можете использовать свою собственную среду разработки, которая делает все, что вы ее кодируете, перед текстом перед отправкой в ​​компилятор.

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

+0

Пока нет, но скоро будет - Roslyn позволит вам изменить поведение компилятора, если вы выберете. Образцы, которые я видел до сих пор ... ну, довольно страшно, в основном! ;-) –

+0

Насколько печально то, что макросы уходят на пенсию, так как VS 2012 – Apocatastasis

+1

@Apocatastasis Ну, вы можете использовать добавление или какую-либо другую форму расширения, даже если это не тот же самый вкус макросов. – Servy