2013-03-13 23 views
6

So che potrebbe non valerne la pena, ma solo per scopi didattici voglio sapere se c'è un modo per iniettare le tue parole chiave in linguaggi .NET.È possibile aggiungere una parola chiave a C# o VB.NET?

Ad esempio, ho pensato che fosse utile avere una parola chiave C++ asm in C#.
Ricorda che non sto parlando di come implementare la parola chiave asm ma un modo generale per aggiungere una parola chiave a C#.

Il mio codice immaginato:

asm{ 
    mov ax,1 
    add ax,4 
} 

Quindi c'è un modo per raggiungere questo obiettivo?
Le risposte che coprono l'implementazione di keyword{ } sono sufficienti per questa domanda.

+8

Solo se si è pronti a scrivere il proprio compilatore C#. –

+0

L'unico modo che conosco è l'assegnazione di alias a tipi noti. –

+0

Penso che questo abbia bisogno di qualche variante di un tag "Intermediate Language" ... tutto .NET va al codice IL – LamonteCristo

risposta

4

Al momento non è possibile. Tuttavia, è in sviluppo un progetto Microsoft chiamato Roslyn che può essere riepilogato come "il compilatore come servizio". Permette, tra le altre cose, di estendere o modificare il comportamento del compilatore attraverso un'API.

Quando Roslyn diventa disponibile, credo che questo dovrebbe essere qualcosa che (con cautela!) È abbastanza fattibile.

+0

+1 Bella informazione. – SysDragon

+0

Da quando è stato rilasciato Roslyn, qualcuno può fornire una risposta migliore (aggiornata) ora? –

2

Purtroppo questo non è possibile. Non è possibile estendere o alterare le lingue in alcun modo.

È possibile utilizzare in modo oscuro PostSharp per leggere e analizzare stringhe e trasformarle in codice personalizzato in fase di compilazione (un pre-processore). Ma non ne saresti molto felice, poiché è molto incline agli errori e non otterrai alcun tipo di intellisenso o completamento del codice per le tue stringhe magiche.

0

Secondo MSDN le parole chiave sono predefinite e non possono essere modificate. Quindi non puoi aggiungerne nessuno, perché dovresti dire al compilatore come gestirli. Pertanto, no non puoi.

2

È possibile utilizzare qualsiasi strumento che si desidera pre-elaborare il codice prima di inviarlo al compilatore C#. Ad esempio, è possibile utilizzare i macro VS per eseguire la pre-elaborazione, mappando una sintassi specifica che è stata inventata in qualcosa che compila nel codice C#, probabilmente generando un errore in caso di problemi. Se le macro VS non sono abbastanza potenti per te allora puoi sempre usare il tuo IDE che fa tutto ciò che devi scrivere sul testo prima di inviarlo al compilatore.

Non esiste un supporto integrato nel compilatore per specificare le proprie parole chiave/sintassi; avresti bisogno di gestirlo interamente indipendente dal compilatore.

+0

Non c'è ancora, ma ci sarà presto - Roslyn ti permetterà di modificare il comportamento del compilatore se lo desideri. I campioni che ho visto finora sono ... beh, piuttosto spaventosi, soprattutto! ;-) –

+0

Quanto è triste che le macro vengano ritirate da VS 2012 – Apocatastasis

+1

@Apocatastasis Bene, puoi usare un add-in, o qualche altra forma di estensione, anche se non è lo stesso sapore delle macro. – Servy

Problemi correlati