Ayrıştırma ağacını güncellemek için etkili algoritma


14

Diyelim ki zaten lexed ve ayrıştırılmış büyük bir kod bloğum var.
Sadece bir karakterin değiştiğini varsayalım; Ayrıştırmamı güncellemek istiyorum, ancak değişiklik her şeye kıyasla çok küçük olduğundan, her şeyi tekrar ayrıştırmanın mümkün olup olmadığını, ancak yeniden ayrıştırma aralığını belirlemek için algoritmalar varsa bilmek istiyorum ve hareketli jeton sınırları ile düzgün bir şekilde ilgilenmek.

Şimdiden teşekkürler!


1
Merhaba, hoş geldiniz! Bu konuda uzman değilim, ancak aradığınız anahtar kelimenin artımlı ayrıştırma veya artımlı derleme olduğunu düşünüyorum .
MS Dousti

@Sadeq ibre için teşekkürler! Bazı ayrıntıları içeren bir cevap eklemeyi düşünür müsünüz? Çok takdir edilecektir!
Agos

Yanıtlar:


9

@Agos isteğine göre, yorumu bir cevaba dönüştürdüm.

İlk olarak, bu alanda gerçekten bilgili olmadığımı itiraf etmeliyim. Yine de, 2000'den önce artımlı ayrıştırma için hangi algoritmaların kullanıldığına dair bir görüşe sahip olmak için Dostu ayrıştırıcılar ve Verimli ve Esnek Artımlı Ayrıştırma oluşturma makalelerini okumanızı öneririm .

Güncellenmiş tedaviler için şu makalelere göz atabilirsiniz:

Daha fazla bilgi: Ayrıştırma / derleme için (en azından) iki yaklaşım vardır:

  • Toplu kod bütün blok ayrıştırılır edildiği yaklaşım / derlenmiş.
  • Artımlı belgenin ilk ayrıştırılır edildiği yaklaşım / parti modunda derlenmiş ve değişiklikler tespit edilir ve en az yeniden ayrıştırma / yeniden derlenmesi uygulanır. Bu yaklaşım yalnızca ayrıştırma / derleme hızını arttırmakla kalmaz , tembel derleme ile ilgili arka plan derleme gibi IDE şık özelliklerine de yardımcı olur . ( IntelliSense gibi ticari özellikleri de arayabilirsiniz ).

1

artımlı ayrıştırıcınız satırın her iki ucunda da durumu kaydederse, yalnızca son geçerli ayrıştırıcı durumundan ayrıştırırsınız (en iyi durumda, örneğin tam ayrıştırmadan sonra bu, yalnızca değişikliğin başladığı satırın başlangıcıdır) ve sonunda ayrıştırmayı durdurursunuz modifikasyonun bittiği satır (dahili ayrıştırıcı, yapıyı doğru bir şekilde tanımak için modifikasyonun ötesine bakabilir)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.