Her şeyden önce, sizin değişken yeniden yazılmasında yeniden düşünmek gerekir. Eğer bunların arasında bazı bağımlılıkları olduğunda beklendiği gibi yöntem bitmiyor çeşitli durumlarda, var. Ek olarak, her ne olursa olsun, bir döngü ya da bir değişkenin yerini alır.
Eğer gibi bir şey istiyorsanız kodu {/ while}, sen özyineleme da mümkün olduğunu farkında olmak gerekir ve bu nedenle bunun üzerinde bir regex eşleştirme gibi basit değil {(koşul) ise}.
Basit bir yaklaşım şu olacaktır:
- Bir belirteç (değişken, whileloop) başlangıcını bulmak ve onu bulmak konumunu hatırlamak
- Bir yedek yaparak bu bir değişken olduğunu ve en çok dış kapsamında ise (bir döngüde), işliyoruz. Eğer istemediğiniz şeyleri değiştirmekten kaçınmak için sonradan değiştirme okumaz böylece işaretçi ayarlayın.
- If it is a loop
- parantez arasındaki durumunu ayıklamak ve saklamak somewher
- Ek olarak, mevcut konumunu saklamak
- Geçerli yineleme seviyesini hatırlamak için bir yığına belirteci itin.
- Eğer {/ while} belirteci karşılaştığınızda yığından bir belirteç çıkarın.
- Şimdi yığını tüm iç içe döngü belirteçleri iterek ve biterler gibi bunları kaldırarak, ardışık devam edin. Tekrar dıştaki düzeyde durun.
- Döngü durumunu değerlendirmek. Sürece bu doğrudur gibi, başlangıç belirteç arasındaki kaynak metin ve simge sonundan itibaren yeni kopyalarını oluşturmak ve özyineleme kullanarak bunları işlemek.
- Ara sonuçları birleştirmek ve bu birleştirme ile {} iken gelen {/} ise her şeyi değiştirin. Eğer döngü sonra işaret ediyoruz böylece işaretçi ayarlayın ve devam edin :)
Bu yardımcı olur umarım. Ben biraz acı geliyor biliyorum, ama kavramını anlamak, bunu yapmak gerekir (süper-verimli olmasa ve sadece bir kez şablon dosyasını ayrıştırmak beri smarty gibi template motorları derleme her zaman önceden olacak ve) PHP kodu derlemek.
@ Daff: Düzenli ifadeler ile belirteçleri bulabiliriz, ama (senin regex bir özyinelemeli uzantısı olmadığı sürece) bir bütün döngü yapısı üzerinde maç için regex kullanarak nedeniyle recursions için çalışmaz.