Melhor analisador para C #?

votos
6

Eu preciso de um analisador ou gramática para C # 3.0 (licença open-source). Qual é a melhor escolha hoje?

Publicado 27/08/2009 em 03:52
fonte usuário
Em outras línguas...                            


4 respostas

votos
3

Confira C # analisador de Metaspec :

O # analisador Metaspec C é totalmente compatível com ECMA-334 e ECMA-335 normas. Além disso, ele suporta extensões específicas da Microsoft. Para obter detalhes sobre a biblioteca C # analisador, consulte a documentação on-line (C # edição ou edição C ++).

C # 3.0 recursos suportados:

  • novo algoritmo de inferência C # 3.0 Tipo
  • digitada implicitamente variáveis ​​locais
  • inicializadores de objeto
  • inicializadores de coleção
  • expressões de criação de objetos anônimos
  • expressões lambda
  • tipos anônimos
  • métodos de extensão
  • expressões de consulta
  • métodos parciais

C # 2.0 recursos suportados:

  • genéricos
  • tipos anuláveis
  • métodos anônimos
Respondeu 27/08/2009 em 03:58
fonte usuário

votos
2

Confira o projeto ANTLR. http://www.antlr.org/

Você pode obter C # gramática a partir daqui: http://www.antlr.org/grammar/list

Respondeu 27/08/2009 em 04:13
fonte usuário

votos
1

Eu recomendo pelo menos olhando para o projeto LINQOverC # hospedado em codeproject.com.

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

Há alguns (menor?) Problemas conhecidos, e ele não foi atualizado desde janeiro 2008 (que poderia ser um muito grande problema), mas o código fonte para um (rápido e 100% .Net) C # 3.0 analisador está lá para a tomada.

Minhas coisas favoritas sobre este analisador:

  1. Ele pode carregar um arquivo de projeto Visual Studio (csproj) praticamente fora da caixa, e analisar a coisa toda (incluindo referências de assembly).

  2. Você pode consultar, enumerar, filtro, etc, o modelo de objeto analisado (árvore) usando LINQ. Que se torna quase trivial para percorrer para cima e para baixo e todo o que você está analisando.

Aqui está um exemplo de consulta LINQ para encontrar uma variável ou parâmetro em um método, onde o nome da variável = variável:

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();
Respondeu 24/09/2009 em 17:31
fonte usuário

votos
0

Depende do que você está optimzing diante.

Se você está otimizando a capacidade de transformar C #, consulte o C # Front End para um analisador que lida com C # 1.2, 2.0 e 3.0 (incluindo a sintaxe LINQ). A C # Front End é construído em cima de DMS Software Reengineering Toolkit que fornecem análise, construção automática de ASTs, suporte para tabelas de símbolos, transformação programa de código-fonte usando a sintaxe de nível de origem com padrões, e AST de volta para prettyprinting texto de origem. Se você estiver olhando para transformar código C #, esta é a ferramenta para fazê-lo. (DMS também é usado para analisar e transformar o código em Java, C, C ++, JavaScript, COBOL e muitas outras langauges).

Se você está otimizando em código aberto, esta não é a ferramenta que você deseja.

Respondeu 27/08/2009 em 04:21
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more