2010-02-01 16 views
12

Ruhun nasıl kullanılacağını anladım - yani, orta derecede karmaşık bir dilbilgisi yazdım. Her zaman bir program büyütme yaklaşımını alırım - bir seferde bir alt sistem. Veri yapılarını en üst düzeyde 4 tip olan karmaşık bir model için yazdım.boost :: ruhu gramerlerden gramer yaratma

grammar composed from rules approach en üst düzey türleri bir seferde ayrıştırmak için kullanmak istiyorum - yani, bir üst düzey dilbilgisi ile 4 grammar yazmak istiyorum. Eğer bu mümkün ise (ki bundan şüphe etmeye başlıyorum), birisi bunu yapan bir projeye bir pasaj veya referans gönderiyor olabilir.

Üst seviye dilbilgisi 50+ (daha fazla çok daha fazla) kuralları (uygun hata işleme için) eğlenceli gibi gelmiyor (TMP kodu, derlenmeye/oynamayı yavaşlatır ve gereksiz hata iletileri sağlar). Gerçek bir programdan basitleştirilmiş

cevap

11

, QiKarma aynı çalışmalıdır.

template<class Iter> 
struct subgrammar_1 
: karma::grammar<Iter, ...> 
{ 
    ... 
} 

template<class Iter> 
struct top_level_grammar 
: karma::grammar<Iter, ...> 
{ 
    top_level_grammar() : top_level_grammar::base_type(start) 
    { 
     start %= r1 | r2; 
    } 
    karma::rule<Iter, ...> r1; 
    subgrammar_1<Iter> r2; 
    ... 
} 
+0

(+1) Evet, tam da aradığım şey buydu: P, biraz zamanım olduğunda onu deneyeceğim. –