dartpetitparser

Why flatten gets rid of mapped values?


I am trying to parse a sentence and, at the same time, convert numbers to their digit representation.

As a simple example I want the sentence

three apples

parsed and converted to

3 apples

With this code simple code I can actually parse the sentence correctly and convert three in 3, but when I try to flatten the result, 3 is reverted back to three.

Parser three() => string('three').trim().map((value) => '3');
Parser apples() => string('apples').trim();
Parser sentence = three() & apples();

// this produces Success[1:13]: [3, apples]
print(sentence.parse('three apples'));

// this produces Success[1:13]: three apples
print(sentence.flatten().parse('three apples'));

Am I missing something? Is flatten behavior correct?

Thanks in advance L


Solution

  • Yes, this is the documented behavior of flatten: It discards the result of the parser, and returns a sub-string of the consumed range in the input being read.

    From the question it is not clear what you expect instead?