Boşluk ve yorumlarla nasıl baş edersiniz? Sözdizimsel analiz aşamasında genellikle kopan parçalar mı? Belgemde her yerde ayrıştıracağım yorumları etkinleştirmek istiyorum. Bunları tek seçenek olarak tanımladığım her temel ayrıştırıcısına ekliyor mu?parsec: Dilbilgisinde her yere yorum/boşluk yazmanın kolay bir yolu var mı?
cevap
o Text.Parsec.Token
yapılır böylece her belirteç boşluk ve onu takip yorumlarınızı tüketmek sahip olmaktır.
Bu lexeme
combinator yardımı aracılığıyla yapılır: Bir ayrıştırıcı p
çalışır
lexeme p = do { x <- p; whitespace; return x }
, onu ve p
döndü ne olursa olsun döner aşağıdaki boşluk tüketir.
Eğer makeTokenParser
(link) kaynağına baktığınızda lexeme
bağdaştırıcının kullanılarak sarılır belirteç ayrıştırıcıları, örneğin çoğunun görürsünüz: dışarı lexeme
(link) noktası için bu yaklaşımı, yorum Kullanılması
symbol name
= lexeme (string name)
ayrıştırıcınızın açık bir şekilde beyaz boşluk tüketmesi gereken zamanın, ilk belirtecin önündeki herhangi bir beyaz alanı atlamak için girdinin başında olduğunu unutmayın.
bir “belirteç ayrıştırıcı” tanımlamak için parsekten yeteneklerini kullanmalıdır. Buradaki fikir, dilinizin özelliklerini LanguageDef
'da tanımlamanız ve sonra elde edilen TokenParser
türetilmiş ayrıştırıcıları kullanmanızdır. identifier
, integer
vb tüm sondaki boşluğu yutar birine gelebilecek tüm ayrıştırıcı açmak için TokenParser
den lexeme
fonksiyonunu alabilir.
fazla ayrıntı için makeTokenParser bakınız.
bir örnek yazdım this code olduğunu. Bu iyi bir öğretici olarak yetiştirmek şekilde belki gerçek dünya-kod değil, ama ben lang = makeTokenParser...
tanımlamak ve aşağıdaki ayrıştırıcıları içinde whiteSpace lang
, parens lang
gibi ayrıştırıcıları nasıl kullandığını görebilirsiniz. parseTime
, bir "normal" çözümleyici etrafında lexeme
kullanıyorum bir örnektir.
Jetonu nasıl kullanacağınıza dair bir örnek var mı? – mb14
- 1. Bunu F # yazmanın bir yolu var mı?
- 2. Bir dilbilgisinde belirsizliği belirlemenin bir yolu var mı?
- 3. Masaüstünde javascript programlarını yazmanın en kolay yolu?
- 4. GUI'de python'da üst simgeler yazmanın bir yolu var mı?
- 5. Bunu yazmanın daha iyi bir yolu var mı?
- 6. C'deki pencere olay günlüğüne yazmanın bir yolu var mı?
- 7. Bu kodu kısa yoldan yazmanın bir yolu var mı?
- 8. İkili modda stdout'a yazmanın en kolay yolu nedir?
- 9. xcode'ta blok değişkenlerini otomatik tamamlamanın kolay bir yolu var mı?
- 10. Scaladoc'u IntelliJ Idea'ye entegre etmenin kolay bir yolu var mı?
- 11. Ekspres bir uygulamayı meteor'a dönüştürmenin kolay bir yolu var mı?
- 12. Bir mermi arşivi eserlerini temizlemenin kolay bir yolu var mı?
- 13. Libgdx: Bir düğmeye her bir eksende metin yerleştirmenin kolay bir yolu var mı?
- 14. jQuery chaining parent(), daha kolay bir yolu var mı?
- 15. Görüntülerin eğimli hale getirilmesinin kolay bir yolu var mı?
- 16. TypeScript tanımlarını kurmanın kolay bir yolu var mı?
- 17. Symfony'de ServerName'i almanın kolay bir yolu var mı?
- 18. Parsec kullanıcı durumunun türünü değiştirmek için kolay bir yol?
- 19. Bunu yazmanın daha iyi yolu?
- 20. kolay yolu
- 21. kolay yolu
- 22. Bu CSS'yi yazmanın daha iyi bir yolu?
- 23. Bu boş denetimi ve boş olmayan bir çek yazmanın daha iyi bir yolu var mı?
- 24. Liste kavramasını bir döngü olarak yeniden yazmanın bir yolu var mı?
- 25. Javascript'teki her işleve try-catch eklemenin bir yolu var mı?
- 26. ListView'ın kaydırma çubuğunu her zaman göstermenin bir yolu var mı?
- 27. $ - Bu her yerde önlemek için bir yolu var mı?
- 28. Mongodb indekslerinin hala kullanılmakta olup olmadığını anlamanın kolay bir yolu var mı?
- 29. Her öğe için aynı değere sahip bir Java dizisi bildirmenin temiz bir yolu var mı?
- 30. Bunu yazmanın D yolu nedir?
Bunu yapmanın en yaygın (kitaplıktan bağımsız) yolu, gerçek ayrıştırmadan önce yalnızca bir belirteç adımına sahip olmak ve tüm boşlukları ve yorumları atmaktır. – Cubic