Normal bir ifade motoru yazmaya çalışıyorum. Elle yinelemeli bir soy ayrıştırıcısı yazmak istiyorum. Düzenli ifadelerin dili (normal ifadelerle tanımlanabilecek diller değil) için özyinelemeye yer bırakmadan bağlam-içermeyen bir dilbilgisi nasıl görünürdü? Sözdizimsel şekeri yeniden hesaplamak en kolayı olur mu yani a+
aa*
? Şimdiden teşekkürler!Bağlamsız gramer normal ifadeleri açıklıyor mu?
cevap
Sol özyineleme:
Expression = Expression '|' Sequence
| Sequence
;
Sequence = Sequence Repetition
| <empty>
;
Sağ özyineleme:
Expression = Sequence '|' Expression
| Sequence
;
Sequence = Repetition Sequence
| <empty>
;
Muğlak formu:
Expression = Expression '|' Expression
| Sequence
;
Sequence = Sequence Sequence
| Repetition
| <empty>
;
Left Recursion'daki wikipedia makalesi, bunu nasıl çekeceğiniz konusunda oldukça iyi bilgiler verir.
Bir dilbilgisini sol özyinelemeyle yeniden hesaba katmam gerekmiyor, aksine dilbilgisinin genel olarak neye benzemesi gerektiği konusunda bir fikir edinmeye çalışıyorum. Onlar hakkında çok şey okurken, aslında hiç konuşmam için bağlamda bir dilbilgisi grameri kullanmamıştım. – wkf
Sen source code for Plan 9 grep bakabilir. Düzenli ifadeler için grep.y dosyası yacc (doğru hatırlıyorsam LALR (1)) dilbilgisine sahiptir. Yacc dilbilgisinden başlayabilir ve tekrarlayan soy ayrıştırma için yeniden yazabilirsiniz.
- 1. Flask, URL yönlendirmesinde normal ifadeleri destekliyor mu?
- 2. JavaScript normal ifadeleri nasıl algılar?
- 3. CSS ifadeleri ... doğru mu?
- 4. Bash komut dosyalarında normal ifadeleri nasıl kullanırım?
- 5. R'de normal ifadeleri kullanarak parantezleri nasıl değiştiririm?
- 6. NetBeans'teki normal ifadeleri bulun ve değiştirin
- 7. Jinja2'deki normal ifadeleri nasıl kullanırım?
- 8. Python'daki ifadeleri kaldırmak için Normal İfade
- 9. Bağlam Serbest Gramer (CFG) Ayrıştırıcı İçinde
- 10. DrRacket BNF gramer
- 11. MongoDB için normal boyut mu?
- 12. IF ifadeleri olmadan bir eşleşme bulunsun mu?
- 13. boost :: ruhu gramerlerden gramer yaratma
- 14. C++ için gramer denetleyicisi kitaplığı
- 15. Eclipse normal ifadesi, normal ifadelerden sonra değiştirilmiyor/değiştirilmiyor mu?
- 16. Birisi neden burada belirsizliği açıklıyor, lütfen?
- 17. Normal ifade ikili dosya ayrıştırılıyor mu?
- 18. Haskell'in 'değerlendirmesini' normal veya WHNF'ye düşürüyor mu?
- 19. İfadeleri python
- 20. Java Lambda İfadeleri "Gizli" veya Yerel Paket İthalatlarından Yararlanıyor mu?
- 21. Ben kesin bir gramer bu dilbilgisi dönüştürmek istediğiniz
- 22. Normal İfadelerle İlgili Yorumlar
- 23. Metacharacters normal bir ifadede normal karakter olarak kullanılabilir mi?
- 24. 'CreateMap' ifadeleri nereye gitmeli?
- 25. Pymongo ile düzenli ifadeleri gerçekleştirme
- 26. Mathematica'da Normal İfadeyi Basitleştirin
- 27. "Lambda ifadeleri" nin avantajı nedir?
- 28. SET ifadelerini normal ifadelerle birleştirin
- 29. C++, değişken şablon parametrelerinden sonra normal parametrelere izin veriyor mu?
- 30. Ekstraksiyon yakalama grubu normal ifadelerden eşleşiyor mu? (veya: gregexec nerede?)
Sağ üzerinde; Bu akşam bütün sorularıma cevap verdin. Teşekkürler! – wkf