Nejlepší parser pro C #?

hlasů
6

Musím analyzátor nebo gramatiku pro C # 3.0 (open-source licencí). Jaký je nejlepší volbou dnes?

Položena 27/08/2009 v 03:52
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
3

Podívejte se na Metaspec v C # parser :

Metaspec C # parser je plně v souladu s ECMA-334 a normy ECMA-335. Kromě toho podporuje Microsoft-specifické rozšíření. Pro více podrobností o C # parser knihovny, naleznete v dokumentaci online (C # edition nebo C ++ Edition).

C # 3.0 podporuje funkce:

  • Nový algoritmus závěr typ C # 3.0
  • implicitně napsané lokální proměnné
  • objektů inicializátory
  • kolekce inicializátory
  • Anonymní výrazy tvorba objekt
  • lambda výrazy
  • anonymní typy
  • rozšíření metody
  • výrazy dotazu
  • částečné metody

C # 2.0 podporuje funkce:

  • generik
  • s možnou hodnotou Null typy
  • anonymní metody
Odpovězeno 27/08/2009 v 03:58
zdroj uživatelem

hlasů
2

Podívejte se na projekt ANTLR. http://www.antlr.org/

Můžete získat C # gramatiku odsud: http://www.antlr.org/grammar/list

Odpovězeno 27/08/2009 v 04:13
zdroj uživatelem

hlasů
1

Doporučuji alespoň při pohledu na # projektu LINQOverC hostitelem codeproject.com.

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

Tam jsou některé (menší?) Známé problémy, a to nebyl aktualizován od ledna 2008 (což může být docela velký problém), ale zdrojový kód a (rychlá a 100% Net) C # 3.0 parser je tam k mání.

Moje oblíbené věci, o tomto analyzátoru:

  1. Je možné načíst soubor Visual Studio projektu (csproj) skoro po vybalení z krabice, a analyzovat celou shebang (včetně montážních referencí).

  2. Můžete dotaz, výčet, filtr, atd model analyzovat objekt (strom) pomocí LINQ. Který to dělá to téměř triviální přecházet nahoru a dolů a vše kolem, co jste analýze.

Zde je ukázka LINQ dotaz pro vyhledávání proměnnou nebo parametr v metodě, kde název proměnné = 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();
Odpovězeno 24/09/2009 v 17:31
zdroj uživatelem

hlasů
0

Záleží na tom, co jste optimzing dál.

Pokud jste optimalizaci na schopnost transformovat C # naleznete v C # Front End pro analyzátor, který zpracovává C # 1.2, 2.0 a 3.0 (včetně syntaxe LINQ). C # Front End je postaven na vrcholu DMS Software Reinženýring Toolkit , které poskytují rozebrat, automatické budově ASTS, podpora tabulek symbolů, transformačního programu source-to-zdroje pomocí syntaxe úrovni zdroje se vzory, a AST zpět do zdrojového textu prettyprinting. Pokud hledáte pro transformaci kód C #, je to nástroj, jak to udělat. (DMS se také používá k analýze a transformaci kódu v jazyce Java, C, C ++, JavaScript, COBOL a mnoho dalších langauges).

Pokud jste optimalizaci na open source, to není nástroj, který chcete.

Odpovězeno 27/08/2009 v 04:21
zdroj uživatelem

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