2010-02-01 17 views
12

Ho capito come usare lo spirito - cioè, ho scritto una grammatica moderatamente complessa. Prendo sempre l'approccio di far crescere un programma - un sottosistema alla volta. Ho scritto le strutture dati per un modello complesso che ha 4 tipi al massimo livello.boost :: spirito che compone grammatiche da grammatiche

Vorrei utilizzare lo grammar composed from rules approach per analizzare i tipi di livello superiore un tipo alla volta, ad esempio, desidero scrivere 4 grammatiche con una grammatica di primo livello. Se questo è possibile (che sto iniziando a dubitare), qualcuno potrebbe per piacere postare uno snippet o un riferimento a un progetto che faccia questo.

Una grammatica di primo livello con oltre 50 regole (possibili molto di più) (per una corretta gestione degli errori) non sembra divertente (il codice TMP è volatile/lento da compilare e fornisce messaggi di errore inutili).

risposta

11

semplificata da un programma vero e proprio, Qi dovrebbe funzionare lo stesso Karma.

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) Sì, questo è esattamente quello che stavo cercando: P, lo proverò quando avrò un po 'di tempo. –