Które parsery są dostępne do analizowania kodu C #?
Szukam parsera C #, który może być używany w C # i daje mi dostęp do informacji o wierszach i plikach o każdym artefakcie analizowanego kodu.
Działa na kodzie źródłowym:
Prace przy montażu:
Problem z "parsowaniem" asemblera polega na tym, że mamy mniej informacji o liniach i plikach (informacje bazują na pliku .pdb, a Pdb zawiera informacje o liniach tylko dla metod)
Osobiście polecam Mono.Cecil i NRefactory .
Mono (open source) zawiera kompilator C # (i oczywiście parser)
źródło
Jeśli zamierzasz skompilować C # v3.5 do zestawów .net:
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
źródło
CodeDomProvider.Parse()
metodę.Jeśli znasz ANTLR, możesz użyć gramatyki Antlr C # .
źródło
Zaimplementowałem to, o co prosisz (analizowanie kodu w języku C # AST) w projekcie Platformy OWASP O2 przy użyciu interfejsów API SharpDevelop AST.
Aby ułatwić użytkowanie, napisałem szybkie API, które udostępnia szereg kluczowych elementów kodu źródłowego (przy użyciu instrukcji, typów, metod, właściwości, pól, komentarzy) i jest w stanie przepisać oryginalny kod C # na C # i VBNET .
Możesz zobaczyć ten interfejs API w akcji w tym pliku skryptu O2 XRule: ascx_View_SourceCode_AST.cs.o2 .
Na przykład w ten sposób można przetwarzać tekst kodu źródłowego C # i wypełniać szereg TreeViews & TextBoxes:
Przykład w ascx_View_SourceCode_AST.cs.o2 pokazuje również, jak można następnie wykorzystać informacje zebrane z AST do wybrania w kodzie źródłowym typu, metody, komentarza itp.
Dla odniesienia tutaj jest napisany kod API (zwróć uwagę, że jest to mój pierwszy krok w używaniu parsera C # AST firmy SharpDevelop i wciąż zastanawiam się, jak to działa):
źródło
Niedawno wydaliśmy parser C #, który obsługuje wszystkie funkcje C # 4.0 oraz nową funkcję asynchroniczną: C # Parser i CodeDOM
Ta biblioteka generuje semantyczny model obiektów, który zachowuje komentarze i informacje o formatowaniu oraz może być modyfikowany i zapisywany. Obsługuje również użycie zapytań LINQ do analizowania kodu źródłowego.
źródło
http://www.codeplex.com/csparser
źródło
SharpDevelop , IDE typu open source, zawiera parser kodu oparty na użytkownikach, który działa naprawdę dobrze. Może być używany niezależnie od IDE.
źródło
Rozważ użycie odbicia w skompilowanym pliku binarnym zamiast bezpośredniego analizowania kodu C #. Interfejs API refleksji jest naprawdę łatwy w użyciu i być może uda Ci się uzyskać wszystkie potrzebne informacje?
źródło
Spójrz na Gold Parser . Posiada bardzo intuicyjny IU, który umożliwia interaktywne testowanie gramatyki i generowanie kodu C #. Dostępnych jest wiele przykładów i jest całkowicie darmowy.
źródło
Może mógłbyś spróbować z Irony na irony.codeplex.com.
Jest bardzo szybki, a gramatyka ac # już istnieje.
Sama gramatyka jest napisana bezpośrednio w C # w sposób podobny do BNF (osiągnięty z niektórymi przeciążeniami operatorów)
Najlepsze jest to, że „gramatyka” tworzy AST bezpośrednio.
źródło
Zdecydowanie powinieneś sprawdzić Roslyn, ponieważ MS właśnie otworzył (lub wkrótce otworzy) kod z licencją Apache 2 tutaj . Możesz również sprawdzić sposób analizowania tych informacji za pomocą tego kodu z GitHub .
źródło
Coś, co nabiera rozpędu i jest bardzo odpowiednie do tej pracy, to Nemerle
możesz zobaczyć, jak to może rozwiązać ten problem w tych filmach z NDC:
źródło
Nie w C #, ale pełny parser C # 2/3/4, który buduje pełne AST jest dostępny z naszym zestawem narzędzi DMS Software Reengineering Toolkit .
DMS zapewnia rozległą infrastrukturę do analizowania, budowania drzew, konstrukcji tablic symboli i analiz przepływu, transformacji źródło-źródło i regeneracji kodu źródłowego ze (zmodyfikowanych) AST. (Obsługuje również wiele innych języków niż tylko C #).
EDYCJA (wrzesień) 2013: Ta odpowiedź nie była ostatnio aktualizowana. DMS od dawna obsługuje C # 5.0
źródło
GPPG może się przydać, jeśli chcesz napisać własny parser (co jest zabawne).
źródło