バイナリートークンエンコード用 PostScript script

ZAKKI / ySas express - PSバイナリ化id:yshl:20070329:1175170084 の続き。
餅は餅屋理論によると、PostScript の解釈は PostScript インタープリタに任せる方がいいと思われるので、PostScript で書いてみた。
浮動小数点数と名前の即時評価が不完全。
以下ソース

#!/bin/sh
exec gs -q -dNODISPLAY -dBATCH -d#!='{2{currentfile 256 string readline{pop}if}repeat}' -- $0 "$@"

ARGUMENTS length 0 eq{
    (%stdin)
}{
    ARGUMENTS 0 get
}ifelse
(r)file/infile exch def

/SystemNames where{pop}{
    /SystemNames[
        0 1 225{
            (  )dup 0 146 put dup 1 4 3 roll put
            token{exch pop}if
        }for
    ]def
}ifelse
/list SystemNames 0 226 getinterval def
/bindict list length 6 add dict def
/alnum? false def

0 1 list length 1 sub{
    /i exch def
    bindict
    list i get
    2 string dup 0 146 put
    dup 1 i put
    put
}for
bindict /true 2 string dup 0 141 put dup 1 1 put put
bindict /false 2 string dup 0 141 put dup 1 0 put put
[([)(])(<<)(>>)]{
    bindict exch dup cvn exch put
}forall

/inttobin{
    1 dict begin
    /n exch def
    n -128 ge n 128 lt and{
        2 string
        dup 0 136 put
        dup 1 n 255 and put
    }{
    n -32768 ge n 32768 lt and{
        3 string
        dup 0 135 put
        dup 1 n 255 and put
        dup 2 n -8 bitshift 255 and put
    }{
        5 string
        dup 0 133 put
        dup 1 n 255 and put
        dup 2 n -8 bitshift 255 and put
        dup 3 n -16 bitshift 255 and put
        dup 4 n -24 bitshift 255 and put
    }ifelse
    }ifelse
    end
}def
/tokentobin{
    /tok exch def
    /tok load type
    dup /stringtype eq{
        (\216 )dup 1 tok length put print
        tok print
        /alnum? false def
    }if
    dup /integertype eq{
        tok 10 lt tok 0 ge and alnum? not and{
            tok =only
            /alnum? true def
        }{
            tok inttobin print
            /alnum? false def
        }ifelse
    }if
    dup /realtype eq{
        alnum?{( )print}if
        tok ==only
        /alnum? true def
    }if
    dup /nametype eq{
        /tok load xcheck{
            bindict /tok load known{
                bindict /tok load get print
                /alnum? false def
            }{
                alnum?{( )print}if
                /tok load ==only
                /alnum? true def
            }ifelse
        }{
            /tok load ==only
            /alnum? true def
        }ifelse
    }if
    /arraytype eq{
        ({)print
        /alnum? false def
        /tok load{tokentobin}forall
        (})print
        /alnum? false def
    }if
}def
{
    infile token not{exit}if
    tokentobin
}loop