Pengurai mana yang tersedia untuk penguraian kode C #?
Saya mencari parser C # yang dapat digunakan di C # dan memberi saya akses ke informasi baris dan file tentang setiap artefak dari kode yang dianalisis.
Bekerja pada kode sumber:
Bekerja pada perakitan:
Masalah dengan assembly "parsing" adalah kami memiliki lebih sedikit informasi tentang baris dan file (informasi didasarkan pada file .pdb, dan Pdb berisi informasi baris hanya untuk metode)
Saya secara pribadi merekomendasikan Mono.Cecil dan NRefactory .
Mono (open source) termasuk kompiler C # (dan tentu saja parser)
sumber
Jika Anda akan mengkompilasi C # v3.5 ke rakitan .net:
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
sumber
CodeDomProvider.Parse()
metodenya.Jika Anda terbiasa dengan ANTLR, Anda dapat menggunakan tata bahasa Antlr C # .
sumber
Saya telah mengimplementasikan apa yang Anda minta (Parsing AST dari kode C #) di proyek OWASP O2 Platform menggunakan SharpDevelop AST API.
Untuk membuatnya lebih mudah untuk dikonsumsi, saya menulis API cepat yang mengekspos sejumlah elemen kode sumber utama (menggunakan pernyataan, jenis, metode, properti, bidang, komentar) dan mampu menulis ulang kode C # asli ke dalam C # dan menjadi VBNET .
Anda dapat melihat API ini beraksi pada file skrip O2 XRule ini: ascx_View_SourceCode_AST.cs.o2 .
Misalnya, begini cara Anda memproses teks kode sumber C # dan mengisi sejumlah TreeView & TextBoxes:
Contoh pada ascx_View_SourceCode_AST.cs.o2 juga menunjukkan bagaimana Anda kemudian dapat menggunakan informasi yang dikumpulkan dari AST untuk memilih jenis, metode, komentar, dll .. pada kode sumber.
Untuk referensi di sini adalah kode API yang menulis (perhatikan bahwa ini adalah kesempatan pertama saya menggunakan parser C # AST SharpDevelop, dan saya masih memikirkan cara kerjanya):
sumber
Kami baru saja merilis parser C # yang menangani semua fitur C # 4.0 ditambah fitur asinkron baru: C # Parser dan CodeDOM
Pustaka ini menghasilkan model objek semantik yang menyimpan komentar dan informasi pemformatan dan dapat dimodifikasi dan disimpan. Ini juga mendukung penggunaan kueri LINQ untuk menganalisis kode sumber.
sumber
http://www.codeplex.com/csparser
sumber
SharpDevelop , sebuah IDE open source, hadir dengan parser kode berbasis pengunjung yang bekerja dengan sangat baik. Ini dapat digunakan secara independen dari IDE.
sumber
Pertimbangkan untuk menggunakan refleksi pada biner yang dibangun daripada mengurai kode C # secara langsung. API refleksi sangat mudah digunakan dan mungkin Anda bisa mendapatkan semua informasi yang Anda butuhkan?
sumber
Lihat Gold Parser . Ini memiliki IU yang sangat intuitif yang memungkinkan Anda menguji tata bahasa Anda secara interaktif dan menghasilkan kode C #. Ada banyak contoh yang tersedia dengannya dan sepenuhnya gratis.
sumber
Mungkin Anda bisa mencoba Irony di irony.codeplex.com.
Sangat cepat dan tata bahasa ac # sudah ada.
Tata bahasanya sendiri ditulis langsung di c # dengan cara seperti BNF (dicapai dengan beberapa operator kelebihan beban)
Hal terbaiknya adalah bahwa "tata bahasa" menghasilkan AST secara langsung.
sumber
Anda pasti harus memeriksa Roslyn karena MS baru saja membuka (atau akan segera membuka) kode dengan lisensi Apache 2 di sini . Anda juga dapat melihat cara untuk mengurai info ini dengan kode ini dari GitHub .
sumber
Sesuatu yang sedang mendapatkan momentum dan sangat cocok untuk pekerjaan itu adalah Nemerle
Anda dapat melihat bagaimana itu bisa menyelesaikannya dalam video berikut dari NDC:
sumber
Tidak dalam C #, tetapi pengurai C # 2/3/4 lengkap yang membuat AST lengkap tersedia dengan Perangkat Rekayasa Ulang Perangkat Lunak DMS kami .
DMS menyediakan infrastruktur yang luas untuk penguraian, pembangunan pohon, pembuatan tabel simbol dan analisis aliran, transformasi sumber-ke-sumber, dan regenerasi kode sumber dari AST (yang dimodifikasi). (Ini juga menangani banyak bahasa lain selain C #.)
EDIT (September) 2013: Jawaban ini belum diperbarui baru-baru ini. DMS telah lama menangani C # 5.0
sumber
GPPG mungkin berguna, jika Anda ingin menulis parser Anda sendiri (yang menyenangkan).
sumber