Kısacası, Z3_ast ağacından geçebilmeli ve düğümleri ile ilişkili verilere erişebilmem gerekir. Bunun nasıl yapılacağı konusunda herhangi bir doküman/örnek bulamıyor. Herhangi bir işaretçi yardımcı olacaktır. Uzunluğunda, smt2lib tip formüllerini Z3'e ayırmam, bazı değişkenleri sabit sübstitüsyonlar haline getirmem ve daha sonra başka bir ilgisiz SMT sovler ile uyumlu bir veri yapısında formül üretmem gerekir. Bu soru için önemli olan, bu soru için önemli, ancak metin formülleriyle besleyebildiğim bir komut satırı arabirimine sahip olmak yeterli değil. Sadece bir C API'si var). Bu formülü mistral formatında üretmek için, Z3_ast ağacını çaprazlamak ve formülü istenen formatta yeniden yapılandırmak zorunda kalacağım. Bunun nasıl yapılacağını gösteren herhangi bir belge/örnek bulamıyorum. Herhangi bir işaretçi yardımcı olacaktır.Z3_ast ağacında geçiş C/C++
9
A
cevap
6
z3++.h
'da tanımlanan C++ yardımcı sınıflarını kullanmayı düşünün. Z3 dağılımı ayrıca bu sınıfları kullanan bir örnek içerir. İşte bir Z3 ifadesini geçen küçük bir kod parçası. Formüllerinizde niceleyiciler yoksa, is_quantifier()
ve is_var()
dallarını tutmanıza bile gerek yoktur.
void visit(expr const & e) {
if (e.is_app()) {
unsigned num = e.num_args();
for (unsigned i = 0; i < num; i++) {
visit(e.arg(i));
}
// do something
// Example: print the visited expression
func_decl f = e.decl();
std::cout << "application of " << f.name() << ": " << e << "\n";
}
else if (e.is_quantifier()) {
visit(e.body());
// do something
}
else {
assert(e.is_var());
// do something
}
}
void tst_visit() {
std::cout << "visit example\n";
context c;
expr x = c.int_const("x");
expr y = c.int_const("y");
expr z = c.int_const("z");
expr f = x*x - y*y >= 0;
visit(f);
}
İlgili konular
- 1. İfadeleri İfade Ağacında Birleştirme
- 2. Şemadaki devam (çağrı/cc)
- 3. [cc yaratıcısı] Karşılaştırma çalışmıyor
- 4. İkili Arama Ağacında verileri güncelleştirme
- 5. PHP posta işlevinde CC ekleme
- 6. C# ağacında TreeView kontrolü,() ve netlemeyi seçin
- 7. Önemli: Bu işlem bir çalışma ağacında çalıştırılmalıdır
- 8. C# içinde bir XML ağacında yürüyüş #
- 9. Adobe CC: HTML5 uzantıları nasıl çalışır?
- 10. SendGrid Cc ve Bcc PHP üzerinde çalışmıyor
- 11. Adobe Animate CC ve JavaScript - Çarpışma Algılaması
- 12. createjs flash cc videosu sahneye yüklenmiyor
- 13. Geçiş
- 14. Exchange (2003), ortak klasör ağacında kullanılan formları nasıl listeleyebilirim?
- 15. .Net serileştirme - kalıtım ağacında özel [Serializable] ile karıştırma
- 16. Derlenmiş bir ifade ağacında nasıl bir hata ayıklama yapabilirim?
- 17. Kaynak ağacında bir itme/çekme ve işlem arasındaki fark nedir?
- 18. İkili arama ağacında en küçük değer nasıl bulunur?
- 19. Mousemove animasyonu, geçiş devresinde geçiş sürüyor
- 20. JQuery/CC seçici için olay işleme kodunda özellik değeri alma
- 21. django içinde bcc e-posta ve cc göndermek
- 22. Ne zaman ve neden cc/mul/div ile cdq kullanıyoruz?
- 23. Pip ile indirgeme yapılamıyor: hata: komut 'cc' çıkış durumu 1
- 24. Animate CC 2015'te programın döngüden nasıl durdurulması
- 25. CodeIginter 3 E-posta arşivi $ alanına çalışmıyor, ancak $ cc
- 26. Dışa Aktarma Flash Komutları Jpg. Adobe Animate CC
- 27. jr cc, label (değer aralık dışı) kullanılarak hata.
- 28. Geçiş değişkenleri()
- 29. Geçiş, CSS3
- 30. AngularJS geçiş dizgisini ng-click işlevinde kullanmak için geçiş yapın