Ben bir şablon ayrıştırıcı inşa ediyorum.
Şablon çözümleyici bu gibi çalışır:
- Tokenize (şablon kodu bir belirteç her bölümü için yapmak)
- Parse
- Benim ParserHelper sınıfını kullanın. Bu sistem için kurallar ekleyebilirsiniz, ve sonra geçerli bir dilbilgisi için belirteç listesini denetler.
- Ekle / Ekstra işlevsellik için bazı belirteçleri değiştirmek
- () Html hızlı dönüstürüldügü için (php tercüme) derlemek
Ayrıştırıcı yardımcı bu yapı ile bir sınıf:
- koruma fonksiyonu parseRecursive (& $ offset, $ ruleName)
- koruma fonksiyonu tryOption (& $ offset, vdParserHelperRuleOption & $ seçenek)
- koruma fonksiyonu tryItem (& $ offset, vdParserHelperRuleOptionItem & $ kalemi, $ sayımı)
Offset belirteci için standları offset (yani ofset = 0, vb ayrıştırmak için ilk belirteci anlamına gelir)
Benim ayrıştırıcı yardımcı kurallar bu yapıya sahiptir:
- Rule
- Options
- Öğeler
- Options
Insanlar için nasıl bir bağlam ücretsiz bir gramer ne olduğunu bilir:
kuralı -> < seçenek1> | < opsiyonu2> | ... | < optionN>
optionX ile Labda (boş seçenek) veya bir listesi:
- bir 'kural bağlantı' (başka bir kural bir bağlantı (özyineleme olabilir)) veya
- bir 'simge'
Yani fonksiyon parseRecursive tryOption tryItem çağırır ve tryItem parseRecursive agian çağırabilirsiniz, tryOption çağırır.
Hata fonksiyonu tryItem şöyledir:
...
// Try item
if($item->getType()==vdParserHelperRuleOptionItem::RuleLink){
///// The next line !!!!!!!!!!!!!
if(!$this->parseRecursive($currentOffset, $item->getData())){
///// The previous line !!!!!!!!!
return $item->isOptional();
}
}else if($item->getType()==vdParserHelperRuleOptionItem::Type){
...
}
...
Ben çıkardığınızda (için değiştirin (true) {ya da eğer öyleyse) 'yorumlarına arasındaki çizgi php kodu yürütülür. Ama bu çizgi php kaldırmak dont zaman benim kod ve çıkışlarını hiçbir yürütmek Yüklü ve ben hiç hatası alıyorum. Ben apache log dosyasına baktığımda bu hatayı alıyorum:
[notice] child pid 11957 exit signal Segmentation fault (11)
Bu php bir arıza mı, ya da doğrudan özyineleme işleyemez php mi? Yoksa başka bir şey mi?