Hi Levente,

Thank you for your reply.

That makes no sense. I can't even fathom how it works.
#inject:into:'s second argument, the block, must return the computed
value.
Currently that block returns the value assigned to base when pair first =
'e' and nil otherwise.
So, if it works correctly now, which is doubtful, then just remove the
assignments to base from the block and it should just work.
I did, it does. thx.

Fwiw, here are the tests I have for this rule ...It might make things clearer on what it is meant to accomplish.  The pattern is borrowed from some Algebraic PEG grammar I found on the net.
The purpose is to support some PHP-isms in the wikitext grammar...basically PHP version of callbacks given a pattern.

testFloat

<timeout: 5 "seconds">

"Float <-  Multiplicand  (''e'' Multiplicand)+"
| n output actor |

actor := PEGWikiMediaGeneratorTables new.
actor transcripton: false.  "disable tracing to Transcript"

n := '-2.3e-4'.
output := parser parse: 'Negation' stream: n reading actor: actor.
self assert: (output = -0.00023 ).

n := '6e2e3'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 600000.0) .


n := '2e3'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 2000) .


n := '-2.3e-4'.
output := parser parse: 'Negation' stream: n reading actor: actor.
self assert: (output = -0.00023 ).




n := '(trunc2)e(trunc-3)'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 0.002) .


n := '(trunc2)e(trunc0)'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 2) .

n := '(trunc2)e(trunc18)'.
output := parser parse: 'Float' stream: n reading actor: actor. 
self assert: (output = 2.0e18) .

n := '(trunc2)e(trunc19)'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 2.0e19) .

n := '6e(5-2)'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 6000.0) .

n := '(5-2)e-2'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 0.03) .


n := '6e(5-2)e-2'.
output := parser parse: 'Float' stream: n reading actor: actor.
self assert: (output = 60) .


n := '5.0e-324'.  "(Float fmin) * (Float fmax)"
output := parser parse: 'Operation' stream: n reading actor: actor.
self assert: (output = (Float fmin) ) .