Suppose I want to parse a list of ";"-separated floating point pairs with "," being the pair separator as in "1,2;3,4". Following this list comes a string literal representing a file extension, such as ".txt". Therefore what I want to successfully parse input like the following: 1,2;3,4.txt (For the record, the input could also be 1.1,2.2;3.3,4.4.txt) The parser I came up with is the 1:1 translation of above's description into the Spirit DSL and shows Spirit's expressive power: ((double_ % ",") % ";") >> ".txt" Unfortunately, the parser fails on the input with the integral values above. Why? Because the fundamental parser for double_ greedily matches on the "4." in "4.txt". Changing the "4" to "4.0" as in 1,2;3,4.0.txt parses successfully (but is not an option as it requires the user to always add a trailing ".0" in case the last digit is integral. I read about Spirit's DSL mapping to Parsing Expression Grammar (PEG) with the choice operator | being evaluated in order. So the next logical step for me was to try making use of it and adapting the parser: (((int_ | double_) % ",") % ";") >> ".txt" which works on 1,2;3,4.txt but no longer on 1,2;3,4.0.txt Is there a way to adapt the parser to handle both cases? I asked this on IRC and got the answer to try a solution based on ((double_ >> ".") | (int_ >> ".")) >> "txt" but when I use use this to parse "4.txt" into a std::vector<double> via parse(first, last, ((double_ >> ".") | (int_ >> ".")) >> "txt", into); the vector contains: {4, 4} and its size() is 2, which I can make no sense of at all (but this may be a different problem). Cheers, Daniel J H