Cercando di imparare lo spirito spinta e l'esempio dato nella documentazione farmi un po 'confuso.spinta dello Spirito Parser in numeri romani Esempio
Facendo riferimento a questo codice:
http://www.boost.org/doc/libs/1_46_1/libs/spirit/example/qi/roman.cpp
In particolare questo segmento della grammatica:
start = eps [_val = 0] >>
(
+lit('M') [_val += 1000]
|| hundreds [_val += _1]
|| tens [_val += _1]
|| ones [_val += _1]
)
Qualcuno potrebbe spiegarmi perché è + acceso ('M') e non * illuminato ('M'). Perché dopo tutto non possono esserci zero o più M contro una o più M?
Utilizzo di * lit ('M') e CCLLIX. Allora perché restituisce il risultato 250 e si ferma a LIX? Come hai detto, non dovrebbe aggiungere 1000 a _val per zero match e CCLLIX non ha un M. Quindi non dovrebbe restituire 1250 non 250? – Integer
@Intero: ho aggiunto la spiegazione. 'CCLLIX' NON è un numero valido. – Nawaz
Buona cattura. Mi dispiace per quello Ma anche se uso CCLIX entrambi usando i risultati * e + nella risposta corretta di 259.Perché * non risulta in 1259 come dici tu? – Integer