it-swarm-pt.tech

Analisador para C #

Quais analisadores estão disponíveis para analisar o código C #?

Estou procurando um analisador de C # que possa ser usado em C # e me dê acesso a informações de linha e arquivo sobre cada artefato do código analisado.

99
Julien Hoarau

Funciona no código fonte:

Trabalhos em montagem:

O problema com a "análise" do Assembly é que temos menos informações sobre linha e arquivo (as informações são baseadas no arquivo .pdb e o Pdb contém informações de linhas apenas para métodos)

Eu pessoalmente recomendo Mono.Cecil e NRefactory .

116
Julien Hoarau

Mono (código aberto) inclui o compilador C # (e, é claro, o analisador)

7
aku

Se você for compilar o C # v3.5 para assemblies .net:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://msdn.Microsoft.com/en-us/library/Microsoft.csharp.csharpcodeprovider.aspx

6
zproxy

Se você conhece o ANTLR, pode usar gramática Antlr C # .

5
prosseek

Eu implementei exatamente o que você está perguntando (análise AST do código C #) no projeto OWASP O2 Platform usando as APIs SharpDevelop AST.

Para facilitar o consumo, escrevi uma API rápida que expõe vários elementos-chave do código-fonte (usando instruções, tipos, métodos, propriedades, campos, comentários) e é capaz de reescrever o código C # original no C # e no VBNET .

Você pode ver esta API em ação neste arquivo de script do O2 XRule: ascx_View_SourceCode_AST.cs.o2 .

Por exemplo, é assim que você processa um texto de código-fonte C # e preenche um número de TreeViews & TextBoxes:

    public void updateView(string sourceCode)
    {   
        var ast = new Ast_CSharp(sourceCode);
        ast_TreeView.show_Ast(ast);
        types_TreeView.show_List(ast.astDetails.Types, "Text");
        usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
        methods_TreeView.show_List(ast.astDetails.Methods,"Text");
        fields_TreeView.show_List(ast.astDetails.Fields,"Text");
        properties_TreeView.show_List(ast.astDetails.Properties,"Text");
        comments_TreeView.show_List(ast.astDetails.Comments,"Text");

        rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
        rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");                                
    }

O exemplo em ascx_View_SourceCode_AST.cs.o2 também mostra como você pode usar as informações coletadas no AST para selecionar no código-fonte um tipo, método, comentário, etc.

Para referência, aqui está o código da API que escreveu (observe que esta é minha primeira passagem no uso do analisador C # AST da SharpDevelop, e ainda estou tentando entender como funciona):

4
Dinis Cruz

Lançamos recentemente um analisador de C # que lida com todos os recursos do C # 4.0, além do novo recurso assíncrono: Analisador de C # e CodeDOM

Essa biblioteca gera um modelo de objeto semântico que retém comentários e informações de formatação e pode ser modificado e salvo. Ele também suporta o uso de consultas LINQ para analisar o código-fonte.

3
Ken Beckett
2
Galwegian

SharpDevelop , um IDE de código aberto, vem com um analisador de código baseado em visitante que funciona muito bem. Pode ser usado independentemente do IDE.

2
Akselsson

Considere usar a reflexão em um binário construído em vez de analisar o código C # diretamente. A API de reflexão é realmente fácil de usar e talvez você possa obter todas as informações necessárias?

2
Hallgrim

Talvez você possa tentar com o Irony em irony.codeplex.com.

É muito rápido e já existe uma gramática c #.

A gramática em si é escrita diretamente em c # de uma maneira semelhante ao BNF (obtida com sobrecargas de alguns operadores)

A melhor coisa é que a "gramática" produz o AST diretamente.

2
SeeSoft

Dê uma olhada em Analisador de Ouro . Ele possui uma UI muito intuitiva que permite testar interativamente sua gramática e gerar código C #. Existem muitos exemplos disponíveis e é totalmente gratuito.

2
sbeskur

Você deve definitivamente conferir o Roslyn, já que o MS acabou de abrir (ou abrirá em breve) o código com uma licença Apache 2 aqui . Você também pode verificar uma maneira de analisar essas informações com este código em GitHub .

2
Jason

Algo que está ganhando força e muito apropriado para o trabalho é Nemerle

você pode ver como isso poderia ser resolvido nesses vídeos da NDC:

1
Stéphane

Não em C #, mas um analisador C # 2/3/4 completo que cria ASTs completos está disponível em nosso DMS Software Reengineering Toolkit .

O DMS fornece uma vasta infraestrutura para análise, construção de árvores, construção de tabelas de símbolos e análises de fluxo, transformação de fonte a fonte e regeneração do código fonte dos ASTs (modificados). (Ele também lida com muitos outros idiomas além do C #.)

EDIT (setembro) 2013: esta resposta não foi atualizada recentemente. O DMS manipula há muito tempo o C # 5.0

1
Ira Baxter