2011-07-20 21 views
2

YAMLドキュメントでの作業中、私は私の値のいずれかがsnakeyamlの文字列として解析なっていたことがわかった。YAML科学表記の構文

-8e-05

私はYAMLを使用して、ROS、そのことがわかりましたyamlsを書き込む-cppはsnakeyamlとしてそれを解析している間(camera_calibrationパッケージ内ROS「parse_yml.cpp」からコピーされた)アレイ

out << YAML::BeginSeq; 
for (int i = 0; i < m.rows*m.cols; ++i) 
    out << m.data[i]; 
out << YAML::EndSeq; 

が、C++コード上に-8e-05を作成し書き込むために、次のコードを使用しています文字列。

バグレポートがあれば誰が正しいでしょうか?もしそうなら誰? 1.2 yaml仕様はオプションの小数点以下を許すようですが、1.1 yaml仕様でsnakeyamlが実装できるかどうかわかりませんでした。

答えて

4

出力は、YAML 1.2によると、!!floatと解釈されるべきですが、もともとYAML 1.1では!!strでした。 @psrが言うように、これはJSON仕様にマッチするものです。

YAML 1.2仕様では、JSON schemaと拡張子"core schema"が与えられています。どちらの場合でも、正規表現は正規表現は次のとおりです。

[-+]? (\. [0-9]+ | [0-9]+ (\. [0-9]*)?) ([eE] [-+]? [0-9]+)? 

これは任意の10進数を許可します。

YAML 1.1仕様では、このタイプのタグ解決を直接指定していませんでしたが、各タイプごとにいくつかの関連ページがありました。 !!float pageリスト正規表現:

[-+]?([0-9][0-9_]*)?\.[0-9.]*([eE][-+][0-9]+)? 

(ならびにベース60用のバージョン、無限大、および非数)。 これには小数点が必要です。

これは、バージョン1.9のSnakeYAML(http://code.google.com/p/snakeyaml/issues/detail?id=130参照)で修正されています。

+0

ありがとう、ジェシー、これはまさに私が探していたものです。私はデータ型についてもっと知っているのでsnakeyamlの出力を変更することでこれをかなり簡単に回避することができましたが、可能ならば私が手伝ってくれると思っていました。あなたの返事を感謝します。 – Sandy

+0

問題はSnakeYAMLで修正されました:http://code.google.com/p/snakeyaml/issues/detail?id=130 – Andrey

+0

@Andrey、ありがとう! - 私は答えを更新しました –

0

YAMLはJSONのスーパーセットで、http://www.json.org/を見ると、番号の解析方法の定義を示すページの下部にBNF相当の図があります。 -8e-05はその定義に適合しているので、snakeyamiは文字列として解析するのが正しくありません。