kern にはいくつか数値のパーサが用意されてて、これらは結果として文字列ではなく適切な数値型を返します。これらのパーサは名前空間 lexer 内のそれらに比べてサポートする数値型は少ないし、空白とかコメントとかもスキップしません。つまるところ、大きなパーサの低レベルの部分で使うべき関数みたいですね。
使用にあたって Kern の名前空間 core をロードします。
(use 'blancas.kern.core)
value はパーサを走らせてそのパース結果を返す関数です。引数としてパーサと文字列を受け取って、オプションとして文字列が何であるか(例えばファイルネームだとか)を示すことができます。
dec-num は十進数の正数をパースして結果として long 型を返します。
doc.core> (value dec-num "8086") 8086
oct-num は8進数の正数をパースして結果として long 型を返します。
doc.core> (value hex-num "747") 487
hex-num は16進数をパースして結果として long 型を返します。 0x が先頭につくものは許されません。
doc.core> (value hex-num "FEED") 65261
float-num は浮動小数点数をパースして結果として double 型を返します。指数表現はサポートされていません。 lexer 内の float-lit ではサポートされてます。
doc.core> (value float-num "3.1415927") 3.1415927