2009-08-27 9 views
6

J'ai besoin d'un analyseur ou d'une grammaire pour C# 3.0 (licence open-source). Quel est le meilleur choix aujourd'hui?Meilleur analyseur pour C#?

+0

curiosité .. pourquoi voudriez-vous un? – RCIX

+0

Expérimentation avec des transformations de code. – skevar7

+0

Si vous utilisez Visual Studio SDK, vous pouvez obtenir un modèle d'objet document complet du projet C# pour effectuer de telles transformations. VS l'utilise déjà pour la réfraction et l'intellisense et beaucoup d'addines l'utilisent aussi. –

Répondre

3

Check out Metaspec's C# parser:

L'analyseur Metaspec C# est entièrement conforme à la norme ECMA-334 et les normes ECMA-335 . En outre, il prend en charge les extensions spécifiques à Microsoft. Pour plus de détails sur la bibliothèque de l'analyseur C#, , voir la documentation en ligne (édition C# ou édition C++).

C# 3.0 fonctionnalités prises en charge:

  • nouveau C# 3.0 inférence de type algorithme
  • variables locales implicitement typées
  • initializers objet
  • collection initializers
  • création d'un objet anonyme expressions
  • lambda expressions
  • types anonymes
  • Méthodes d'extension
  • expressions requête
  • méthodes partielles

C# 2.0 Caractéristiques supportées:

  • génériques
  • types nullables
  • méthodes anonymes
+0

Est-ce * open source *? – skevar7

+0

Je ne suis pas sûr - vous devrez contacter Metaspec pour obtenir une copie de leur licence. –

0

Cela dépend de ce que vous optimzing sur.

Si vous optimisez sur la capacité à transformer C#, voir 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 au-dessus de DMS Software Reengineering Toolkit qui fournit l'analyse, la construction automatique d'AST, la prise en charge des tables de symboles, la transformation source-source du programme en utilisant la syntaxe au niveau source avec des motifs et AST en arrière-plan. Si vous cherchez à transformer le code C#, c'est l'outil pour le faire. (DMS est également utilisé pour analyser et transformer du code en Java, C, C++, JavaScript, COBOL et beaucoup d'autres langages).

Si vous optimisez sur open source, ce n'est pas l'outil que vous voulez.

1

Je recommande au moins de regarder le projet LINQOverC# hébergé sur codeproject.com.

URL: http://www.codeplex.com/LinqOverCSharp

Il y a quelques (mineur?Problèmes connus, et n'a pas été mis à jour depuis Janvier 2008 (ce qui pourrait être un gros problème), mais le code source d'un parseur C# 3.0 (rapide et 100% .Net) est là pour le prendre.

Mes choses préférées sur cet analyseur:

  1. Il peut charger un fichier de projet Visual Studio (csproj) à peu près hors de la boîte, et d'analyser tout le tralala (y compris les références de montage).

  2. Vous pouvez interroger, énumérer, filtrer, etc. le modèle d'objet analysé (arborescence) à l'aide de LINQ. Ce qui le rend presque trivial à parcourir de haut en bas et tout ce que vous êtes en train d'analyser.

Voici un exemple de requête de 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();