タグ

ブックマーク / nanto.asablo.jp (3)

  • JavaScript で構文解析: Days on the Moon

    C++ の特徴のひとつである演算子オーバーロード、その粋を極めたのが Boost Lambda (無名関数) と Boost Spirit (構文解析) ではないかと思っています。JavaScript では無名関数が使えるので Lambda に関しては間に合っているとも言えますが、Spirit はそうも行きません。JavaScript 2 で演算子オーバーロードがサポートされるのならチャレンジしてみようかななどと思ってそれきりになっていました。 しかし、一部でパーサブームが起こっているというのを受け、Perl 6 Rules をつらつらと眺めているうち、正規表現のメタ文字を使えば文法定義をきれいに書けるのではと思い至りました。そこで実際に JavaScript でパーサジェネレータを作り、Spirit にあやかって Gin (ジン) と名づけてみました。 文法定義 正規表現リテラルを使うこ

  • 36 進数と文字の偏り: Days on the Moon

    /etc/init.d/knagano restart subtech - Pink Blossom Diary - 簡易ランダムな文字列生成は偏ってるよ odz buffer - ランダムな文字列生成 36 進数表記に変換することによるランダムな文字列生成は偏りが大きいよという話。なるほど。というわけで JavaScript の場合を調べてみた。といっても統計学的な検証とかよくわからないのでざっと見た感じで。 Math.random().toString(36) 整数部は当然 0 のはずなので小数部だけ。Firefox は最後の桁に偏りが見られる。IE はすべての桁がそれなりにばらけている。逆に言えば最後の桁が 0 ということも。Safari は後半部分の偏りが大きい。最後の桁は 9 の倍数に大きく偏っている。 Math.floor(Number.MAX_VALUE * Math.ran

  • JavaScript で n 進数を扱う: Days on the Moon

    2 進数や 16 進数を使いたいというとき、JavaScript では組み込みの機能を利用できます。使えるのは 16 進数だけではなく、2 進数から 36 進数 (0 ~ 9 および a ~ z を使用) まで扱えます。 n 進数文字列から数値への変換 n 進数文字列から数値へと変換するときは、parseInt 関数を使います。第 2 引数に基数 n を指定することで、第 1 引数の文字列を n 進数であると解釈してくれます。n は 32 ビット整数に変換され、その値が 2 未満または 36 を超えるときは NaN が返ります。ただし、n が 0 になるときは文字列が 10 進数表記であるとして解釈されます。 parseInt(10, 36); // 36 parseInt("10", 0x100000000 + 36); // 36 基数が明示されておらず、文字列が 0 から始まっていた

  • 1