2010-10-24 9 views
9

Je recherche des moyens, des outils et des techniques pour analyser les fichiers de code afin de supporter la coloration syntaxique et l'intellisence dans un éditeur écrit en C#.Analyse de code C#

Est-ce que quelqu'un a des idées/modèles & pratiques/outils/techniques pour cela.

EDIT: Une belle source d'information pour les personnes intéressées:

Parsing au-delà grammaires Contexte ISBN 978-3-642-14845-3

+0

double possible de [Parser pour C# ] (http://stackoverflow.com/questions/81406/parser-for-c) – Gabe

+1

Essayez-vous d'analyser C# ou d'écrire un analyseur en C#? – Gabe

+1

@Gabe, les deux. J'essaye d'écrire un analyseur dans C# qui analysera xml, C# heureusement quelque chose d'autre :) – sTodorov

Répondre

3

il y a deux aproaches de base:
1) Analyser l'ensemble de la solution et tout ce qu'il référence afin de comprendre tous les types impliqués dans le code
2) Analyser localement et faire de votre mieux pour deviner quels types sont etc. Le problème avec (2) est que vous devez deviner, et dans certaines circonstances, vous ne pouvez pas dire exactement à partir d'un extrait de code ce que tout est. Mais si vous êtes satisfait de la mise en surbrillance de la syntaxe de type Oif affichée sur (par exemple, Stack Overflow), cette approche est facile et très efficace.

faire (1), vous devez faire l'une des (par ordre décroissant de difficulté):

  • Parse tout le code source. Pas possible si vous faites référence à des assemblées tierces.
  • Utilisez la réflexion sur le code compilé pour recueillir des informations de type que vous pouvez utiliser lors de l'analyse de la source.
  • Utilisez le IDE de l'hôte (si disponible, - donc pas applicable dans votre cas) les interfaces des éléments de code pour fournir les informations dont vous avez besoin
+1

OP veut analyser plusieurs langues. Il y a le «petit» problème d'obtenir des grammaires de travail pour les langues que vous voulez traiter. Les langauges d'héritage sont difficiles à faire parce que les comités de normalisation les ont décorés avec du goo; consultez IBM Enterprise COBOL ou Fortran 2005. Les langauges modernes sont un peu plus faciles mais elles ont même besoin d'ajouter des choses; essayez d'analyser VB.net moderne. J'ai 15 ans dans la construction de parseurs en utilisant une structure unifiée pour un large éventail de langues (y compris ceux que j'ai mentionné) et je n'ai pas encore terminé: - { –

+1

@Ira: OP ne fait pas très clair quelles sont les langues requis, mais la plupart de ma réponse se tient également bien pour n'importe quelle langue. Mais vous avez raison, c'est un problème très non trivial. Visual Studio Intellisense a été développé pendant de nombreuses années par une équipe expérimentée, et ne fonctionne vraiment bien dans les langages .net - au-delà de la coloration syntaxique de base, le support est plutôt pauvre dans la plupart des autres langues, ce qui est un bon indicateur l'OP tente d'adresser. –

+0

@Ira l'exploit que vous essayez d'accomplir des sons très sérieux. Je vous souhaite tout le succès avec. Cependant, ce que je recherche est principalement le support de C#, Ruby, Python, VB. net, Java. Je ne peux qu'imaginer les difficultés liées à l'analyse syntaxique des langages existants – sTodorov

6

Mon analyseur préféré pour C# est Irony: http://irony.codeplex.com/ - Je l'ai utilisé plusieurs fois avec succès

Voici une page wikipedia liste beaucoup plus: http://en.wikipedia.org/wiki/Compiler-compiler

+0

Irony prend-il en charge l'analyse syntaxique en plusieurs langues? – sTodorov

+0

Irony est pour la création de parseurs, donc oui - il analyse tout ce que vous pouvez construire une grammaire pour –