みどりねこ日記

よくわからないけど、頑張りますよ。

数字のパース

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