Salut,
Je voulais développer un petit traducteur C# <=> VB (j'en ai marre d'écrire du code VB pour mettre des exemples dans les posts, je me rappelle jamais la syntaxe...), et je pensais utiliser les classes "magiques" de System.CodeDom... en regardant la doc, j'ai vu qu'un CodeDomProvider pouvait parser et compiler du code, ou en générer, donc je me suis dit, "cool, c'est facile !". Grave erreur, comme je m'en suis rendu compte par la suite...
Je commence à faire mon petit programme, qui consiste à créer un CodeCompileUnit avec le provider du langage source et à générer du code à patir de ce CodeCompileUnit en utilisant le provider du langage cible. Vraiment pas long comme vous pouvez le voir:
Je lance mon truc, et là, surprise : NotImplementedException sur l'appel à la méthode Parse
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 public partial class Form1 : Form { private CodeDomProvider cdpCS; private CodeDomProvider cdpVB; public Form1() { InitializeComponent(); cdpCS = CodeDomProvider.CreateProvider("C#"); cdpVB = CodeDomProvider.CreateProvider("VB"); } private void btnVB2CS_Click(object sender, EventArgs e) { txtOutput.Text = Translate(txtInput.Text, cdpVB, cdpCS); } private string Translate(string source, CodeDomProvider cdpSource, CodeDomProvider cdpTarget) { StringBuilder output = new StringBuilder(); CodeCompileUnit compileUnit = cdpSource.Parse(new StringReader(source)); CodeGeneratorOptions options = new CodeGeneratorOptions(); cdpTarget.GenerateCodeFromCompileUnit(compileUnit, new StringWriter(output), options); return output.ToString(); } private void btnCS2VB_Click(object sender, EventArgs e) { txtOutput.Text = Translate(txtInput.Text, cdpCS, cdpVB); } }
Apparemment cette méthode n'est pas redéfinie dans CSharpCodeProvider et VBCodeProvider... Tout dans la doc semble indiquer qu'on peut faire ça, il n'est jamais mentionné que ce n'est pas implémenté...
Donc voilà, j'ai un peu l'impression d'avoir perdu mon temps... au passage j'ai trouvé un article amusant sur le sujet (en anglais)
Enfin bref, maintenant que j'ai commencé mon truc, j'aimerais bien le terminer... mais mes cours sur la compilation, lex, yacc, tout ça, c'est un peu loin dans ma tête, j'ai pas trop envie de me replonger là dedans...
Est-ce qu'il existerait une autre manière de parser du code VB ou C#, genre une librairie tierce partie ?
Toute idée constructive est la bienvenue![]()
Partager