2010-10-24 16 views
9

C# ile yazılmış bir editördeki sözdizimi vurgulama ve akıllılığı desteklemek için kod dosyalarını ayrıştırma yollarını, araçlarını ve tekniklerini araştırıyorum.Kod ayrıştırma C#

Bunun için herhangi bir fikri/modeli olan & uygulama/araç/gereç var mı?

DÜZENLEME: ilgilenen herkes için bilgi Güzel bir kaynak: Bağlam içermeyen gramerlerin ISBN 978-3-642-14845-3

+0

mümkün yinelenen yazarken sözdizimi vurgulama ve otomatik tamamlama sağlamak için bir ayrıştırıcı uygulamak vardır ] (http://stackoverflow.com/questions/81406/parser-for-c) – Gabe

+1

C# ile ayrıştırmaya mı çalışıyorsunuz yoksa C# 'da ayrıştırıcı mı yazıyorsunuz? Her ikisi de – Gabe

+1

@ Gabe. Ben bir ayrıştırıcı x # ayrıştırmak için çalışıyorum, C# umarım başka bir şey :) – sTodorov

cevap

3

iki temel yaklaştığında vardır:
1) Çözümün tamamını ve başvurulan her şeyi,
kodunda yer alan tüm türleri anlayabilmeniz için çözümleyin. 2) Yerel olarak ayrıştırın ve hangi türlerin vs. olduğunu tahmin etmek için elinizden gelenin en iyisini yapın.

(2) ile ilgili sorun, tahmin etmeniz gereken bir şeydir ve bazı durumlarda, kod snippet'inden herşeyin tam olarak ne olduğunu tam olarak söyleyemezsiniz. Ancak (örn.) Yığın Taşması üzerinde gösterilen sıralamalı oif sözdizimi vurgularından memnunsanız, bu yaklaşım kolay ve oldukça etkilidir.

o zaman (zorluk azalan sırada) birini yapmak gerekir (1) yapmak için:

  • ayrıştırmak tüm kaynak kodunu. Üçüncü taraf toplantılarına başvurursanız mümkün değildir.
  • Kaynağı ayrıştırırken kullanabileceğiniz tür bilgisi almak için derlenmiş koddaki yansımayı kullanın.
  • Kullanım konak IDE en (avaiable eğer! - senin durumunda uygulanabilir çok değil) kodu elemanı arayüzleri bilgi vermek için size
+1

için dilbilgisi oluşturabileceğiniz her şeyi ayrıştırır. OP birden fazla dilin ayrıştırılmasını ister. İşlem yapmak istediğiniz diller için gerçekten çalışma dilbilgisi almanın "küçük" problemi var. Eski kuşaklar bunu yapmak için zordur, çünkü standartlar komiteleri onları goo ile süslemektedir; IBM Enterprise COBOL veya Fortran 2005'e göz atın. Modern langaujlar biraz daha kolay, ancak başka şeyler eklemek için de baskı yapıyorlar; modern VB.net'i ayrıştırmayı deneyin. Çok çeşitli diller (yani bahsettiklerim dahil) için unifed instructure kullanarak parserleri inşa etme konusunda 15 yılım var ve henüz pek tamamlanmadım: - { –

+1

@Ira: OP hangi dillerin çok açık olduğunu göstermiyor gerekli, ama benim cevabımın çoğu herhangi bir dil için eşit derecede iyi duruyor. Ama haklısın, çok sıradan bir problem. Visual Studio Intellisense uzun yıllardır deneyimli bir ekip tarafından geliştirildi ve sadece .net dillerinde çok iyi çalışıyor - temel sözdizimi vurgulamanın ötesinde, diğer birçok dilde destek oldukça zayıf, bu da sorunun zorluğunun iyi bir göstergesi. OP, ele almaya çalışacaktır. –

+0

@Bu sesleri çok ciddi şekilde başarmaya çalıştığınız feat. Hepinize başarılar diliyorum. Ancak, araştırdığım şey çoğunlukla C#, Ruby, Python, VB için destek. net, java. Ben sadece, eski dillere ayrılmayla ilgili zorlukları hayal edebiliyorum. – sTodorov

6

ötesinde

Ayrıştırma C# için en sevdiğim ayrıştırıcı İroni geçerli: http://irony.codeplex.com/ - i büyük bir başarı İşte

ile o listeleyen bir wikipedia sayfasını birkaç kez olduğunu kullandık daha birçok: http://en.wikipedia.org/wiki/Compiler-compiler

+0

Irony çoklu dil ayrıştırmayı destekliyor mu? – sTodorov

+0

Irony, ayırıcıları oluşturmak içindir, bu nedenle evet - –