BNF dilbilgisinden test dizileri oluşturan bir araçla herhangi bir deneyimi var mı, daha sonra bir birim testine gönderilebilir mi?BNF dilbilgisi test örneği oluşturma
cevap
Takım sorusuna bir cevabım yok, ancak herhangi bir metin işleme dilinde (perl/python/etc) bir BNF dilbilgisinden rastgele bir şekilde cümle oluşturmasını ve biraz daha fazla ayrıntı vermenin oldukça kolay olduğunu söyleyeceğim Daha büyük bir dil (Java/C/etc), ama kendi başınızı döndürmek çok zor olmamalı.
Buradaki sorun, elbette, yalnızca dilbilgisinde dizeler oluşturabilmesidir ve dilbilginiz çok basit olmadığı sürece, test alanı sonsuz büyüktür.
Tam olarak hazzen olarak yorumladım (bir kodlama dilinde gömülü bir DSL kullanarak). Hafif derecede ilginç bir egzersizdi, ancak en temel testler hariç, örn. ayrıştırma, çok yararlı değildi. En ilginç testlerimin çoğu, BNF'de (veya herhangi bir bağlam-içermeyen gramerde) kolayca ifade edilenden daha karmaşık ilişkiler ile ilgilidir.
Bir derleyici oluşturuyorsanız, büyük olasılıkla soyut bir sözdizimi ağacı veri türünüz var demektir. Eğer öyleyse, o zaman rastgele bir AST oluşturmak için bir işlev yazabilirsiniz - bununla, bir dizeye yazdırabilir ve bunu birim testinize iletebilirsiniz. , AST'nizle'u başlattığınızdan bu şekilde geçerli bir program olması garanti edilir.
Haskell veya ML'de bir derleyici yazıyor olsaydım, QuickCheck kullanarak bunu yapardım.
- 1. Boost :: Ruh basit dilbilgisi örneği
- 2. BNF dilbilgisi kurallarını gerçek C++ işlevlerine/koduna dönüştürme
- 3. BNF dilbilgisi tanımı dosya yolu joker (glob) için
- 4. DrRacket BNF gramer
- 5. Dilbilgisi Sözdizimi ve Dilbilimsel
- 6. Resmi (ideal BNF) bir kodlama js dil dilbilgisi var mı (veya sadece yazı tipi alt kümesi)?
- 7. yerel ses örneği oluşturma sorunu
- 8. Bir veritabanı örneği oluşturma C#
- 9. Sözdizimi (muhtemelen BNF) VBA nedir?
- 10. Tanımlanmış bir dilin her bir önekini kabul eden Bison dilbilgisi
- 11. Boost.Proto dilbilgisi türüne eşleme
- 12. Dilbilgisi (1)
- 13. JUnit Test Örneği Dijkstra Algoritmasında Özel Yöntemle
- 14. Anonim Tipe Dayalı Genel Sınıf Örneği Oluşturma
- 15. Pratik bir havuz oluşturma örneği nedir?
- 16. API URL'si Oluşturma için Tasarım Örneği
- 17. Özel geçerlilik denetleyicisi için test oluşturma
- 18. LOGO programlama dili için EBNF veya BNF
- 19. LL içine dilbilgisi dönüştürme (1) dilbilgisi: bazı sorunlar
- 20. Dilbilgisi denetimi API?
- 21. Java ile dilbilgisi (Almanca)
- 22. H2 SQL Dilbilgisi İstisnası
- 23. ScalaCheck'te Dilbilgisi Dizgileri Oluştur
- 24. Dilbilgisi çevirisi için desen
- 25. AS3 Dilbilgisi: En doğru
- 26. Hata ayıklama Pyparsing Dilbilgisi
- 27. LPeg dilbilgisi oddity
- 28. C# dilbilgisi "taban"
- 29. Exchange Web Hizmetleri Toplantı Talebi Oluşturma Çalışma Örneği
- 30. Yükseltme ile python dilbilgisi ayrıştırma :: spirit - problem