J'ai besoin d'un analyseur ou d'une grammaire pour C# 3.0 (licence open-source). Quel est le meilleur choix aujourd'hui ?
Réponses
Trop de publicités?Consultez le projet ANTLR. http://www.antlr.org/
Vous pouvez obtenir la grammaire C# ici : http://www.antlr.org/grammar/list
Je recommande au moins de regarder le projet LINQOverC# hébergé sur codeproject.com.
URL : http://www.codeplex.com/LinqOverCSharp
Il y a quelques problèmes (mineurs ?) connus, et il n'a pas été mis à jour depuis janvier 2008 (ce qui pourrait être un problème assez important), mais le code source d'un analyseur C# 3.0 (rapide et 100% .Net) est disponible.
Ce que je préfère dans cet analyseur :
-
Il est capable de charger un fichier de projet Visual Studio (csproj) et d'analyser l'ensemble du code (y compris les références d'assemblage).
-
Vous pouvez interroger, énumérer, filtrer, etc., le modèle d'objet analysé (arbre) en utilisant LINQ. Ce qui rend presque trivial le fait de traverser de haut en bas et tout autour de ce que vous analysez.
Voici un exemple de requête LINQ pour trouver une variable ou un paramètre dans une méthode, où le nom de la variable = VariableName :
variable = (from v in method.Variables
where string.Compare(v.Name, VariableName, false) == 0
select v as LanguageElement).Union(
from p in method.FormalParameters
where string.Compare(p.Name, VariableName, false) == 0
select p as LanguageElement).FirstOrDefault();
Cela dépend de ce sur quoi vous optimisez.
Si vous optimisez sur la capacité à transformer le C#, voyez le C# Front End pour un analyseur qui gère C# 1.2, 2.0 et 3.0 (y compris la syntaxe LINQ). Le frontal C# est construit sur la base de Boîte à outils de réingénierie des logiciels DMS qui fournissent l'analyse syntaxique, la construction automatique d'AST, la prise en charge des tables de symboles, la transformation de programmes source à source en utilisant la syntaxe au niveau de la source avec des motifs, et l'impression du texte source à partir de l'AST. Si vous cherchez à transformer du code C#, c'est l'outil qu'il vous faut. (DMS est également utilisé pour analyser et transformer le code en Java, C, C++, JavaScript, COBOL et de nombreux autres langages).
Si vous optimisez un logiciel libre, ce n'est pas l'outil qu'il vous faut.