Tratar de aprender impulso y el ejemplo dado en los documentos me tienen un poco confundido.Boost Spirit Analizador de números romanos Ejemplo
En relación con este código:
http://www.boost.org/doc/libs/1_46_1/libs/spirit/example/qi/roman.cpp
Particularmente este segmento de la gramática:
start = eps [_val = 0] >>
(
+lit('M') [_val += 1000]
|| hundreds [_val += _1]
|| tens [_val += _1]
|| ones [_val += _1]
)
Podría alguien explicarme por qué se + encendido ('M') y no * iluminado ('METRO'). Porque, después de todo, ¿no puede haber cero o más M en comparación con uno o más M?
Usando * lit ('M') y CCLLIX. Entonces, ¿por qué el resultado devuelve 250 y se detiene en LIX? Como dijiste, ¿no debería agregar 1000 a _val para cero coincidencias y CCLLIX no tiene una M. Entonces, ¿no debería devolver 1250, no 250? – Integer
@Integer: agregué la explicación. 'CCLLIX' NO es un número válido. – Nawaz
Buena captura. Lo siento por eso. Pero incluso si uso CCLIX tanto usando * como +, obtengo la respuesta correcta de 259.¿Por qué * no resulta en 1259 como dices? – Integer