2009-08-27 14 views
6

Potrzebuję parser lub gramatyki dla C# 3.0 (open-source license). Jaki jest najlepszy wybór dzisiaj?Najlepszy analizator składni dla języka C#?

+0

Wystarczy ciekawy .. Dlaczego chcesz jednego? – RCIX

+0

Eksperymentowanie z transformacjami kodu. – skevar7

+0

Jeśli używasz pakietu Visual Studio SDK, możesz uzyskać pełny model obiektu dokumentu projektu C#, aby wykonać takie transformacje. VS używa go już do refraktorowania, a intellisense i wiele dodatków również tego używa. –

Odpowiedz

3

Wyjazd Metaspec's C# parser:

Metaspec C# parser jest w pełni zgodny z ECMA-334 i ECMA-335 standardów . Ponadto obsługuje rozszerzenia specyficzne dla Microsoft. Aby uzyskać szczegółowe informacje na temat biblioteki parserów C#, , zobacz dokumentację online (wydanie C# lub C++).

C# 3.0 obsługiwane funkcje:

  • nowy C# 3.0 typ algorytmu wnioskowania
  • niejawnie wpisywanych zmiennych lokalnych
  • obiektów inicjalizatory
  • inicjalizatory kolekcja
  • anonimowy stworzenie obiektu wyrażenia
  • lambda wyrażenia
  • anonimowe typy
  • rozszerzenie metod
  • zapytania wyrażeń
  • metody częściowych

C# 2.0 Obsługiwane funkcje:

  • leków generycznych
  • dopuszczające wartość null typy
  • anonimowe metody
+0

Czy to * open source *? – skevar7

+0

Nie jestem pewien - należy skontaktować się z Metaspec w celu uzyskania kopii licencji. –

0

Zależy czego optimzing dalej.

Jeśli optymalizujesz możliwość przekształcania C#, , zobacz C# Front End dla analizatora składni obsługującego C# 1.2, 2.0 i 3.0 (w tym składni LINQ). C# Front End jest zbudowany na bazie DMS Software Reengineering Toolkit, który zapewnia parsowanie, automatyczne budowanie AST, obsługę tablic symboli, transformację programu źródłowego do źródła przy użyciu składni na poziomie źródłowym z wzorami i AST z powrotem do źródłowego tekstu. Jeśli chcesz przekształcić kod C#, jest to narzędzie do tego. (DMS służy również do analizy i transformacji kodu w językach Java, C, C++, JavaScript, COBOL i wielu innych językach).

Jeśli optymalizujesz na otwartym kodzie źródłowym, to nie jest to narzędzie, które chcesz.

1

Polecam przynajmniej patrząc na projekt LINQOverC# hostowany na codeproject.com.

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

Istnieją pewne (drobne?) znane problemy, a numer nie był aktualizowany od stycznia 2008 roku (co może być dość dużym problemem), ale kod źródłowy dla parsera C# 3.0 (szybki i 100% .NET) jest do zrobienia.

Moje ulubione rzeczy o tym parser:

  1. Można załadować plik projektu Visual Studio (csproj) praktycznie po wyjęciu z pudełka, i analizować całą shebang (włącznie z numerem montażowych).

  2. Możesz zapytać, wyliczyć, przefiltrować itd. Przeanalizowany model obiektu (drzewo) za pomocą LINQ. Co sprawia, że ​​prawie trywialne jest przechodzenie w górę i w dół oraz wszystko, co analizujesz.

Oto zapytań LINQ próba znalezienia zmiennej lub parametru w metodzie, gdzie nazwa zmiennej = 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(); 
Powiązane problemy