: (parsed)      ( a -- n f )
    DUP C@                        ( a c )
    DUP '-' = IF
        DROP 1+ ( a+1 ) (parsed) 0 ROT ( f 0 n )
        - SWAP EXIT                    ( 0-n f )
    THEN
    0 SWAP _pdacc                 ( a r f )
    DUP IF 2DROP 0 EXIT THEN
    BEGIN                         ( a r 0 )
        DROP SWAP 1+              ( r a+1 )
        DUP C@                    ( r a c )
        ROT SWAP                  ( a r c )
        _pdacc                    ( a r f )
    DUP UNTIL
    1 =         ( a r f )
    ROT DROP    ( r f ) ;