2009-06-10 11 views
0

私はセットの文字列表現をとり、それを解析したいと思います。誰も既存のライブラリを知っていますか?設定されたパーサーは.netに存在しますか?

これらのパターンに一致する正規表現を書くことはできますが、非常に効率的な方法ではないようです。また、いくつかのエッジケースでは、特定の文字列を渡すことはできませんが、私はおそらくいくつかの他のケースがありません。

例えば、私は次のような文字列を解析したいと思います:


"{10,-20,30.5,-40.01,.5,-.5}" 
//^\{((-?[0-9]*(\.[0-9]+)?)(?:,|\}))+$ 
.Parse() 
.ShouldEqual(new [] { 10,-20,30.5,-40.01,.5,-.5 }); 

"{(10,10),(20,2),(30.2,-5.5),(-5,40),(-.2,3000),(-.1,-.2)}" 
//^\{(\((-?[0-9]*(\.[0-9]+)?),(-?[0-9]*(\.[0-9]+)?)\)(?:,|}))+$ 
.Parse() 
.ShouldEqual(new [] { 
    new Point(10,10), 
    new Point(20,2), 
    new Point(30.2,-5.5), 
    new Point(-5,40), 
    new Point(-.2,3000), 
    new Point(-.1,-.2) 
}); 

"{(10,[10,1]),(20,[2,4]),(30.2,[-5.5,-10]),(-5,[40,10]),(-.2,[3000,10]),(-.1,[-.2,0])}" 
//^\{(\((-?[0-9]*(\.[0-9]+)?),\[((-?[0-9]*(\.[0-9]+)?)(?:,|\]))+\)(?:,|}))+$ 
.Parse() 
.ShouldEqual(new [] { 
    new Point(10,new[]{ 10,1 }), 
    new Point(20,new[]{2,4}), 
    new Point(30.2,new[]{-5.5,-10}), 
    new Point(-5,new[]{40,10}), 
    new Point(-.2,new[]{3000,10}), 
    new Point(-.1,new[]{-.2,0}) 
}); 

Pointクラスは任意です。

+0

JSONライブラリで試してみることもできます。 JSONはあなたがここにあるものとまったく同じではありませんが、いくつかの適応はあなたを近づけることができます。 – steamer25

答えて

1

を参照してください。

設定された表記はどのくらい複雑ですか? はそれだけで、これがまた間隔や設定内包表記のような複雑な構造を可能にしなければならない

    • タプルの
    • サブセット

    または構成されていますか? ({ f(x) | x <- [1, 10), g(x) < 42^q(x) = 0 })。

    セットに単純な形式(単なる値の列挙型)がある場合は、正規表現や組み込みのString関数を使用して手動で解析します。

    それ以外の場合、これは解析し、評価するのは非常に困難であるべき - セットは順不同であり、また無限ことができることをIrony

    ノートのようなパーサジェネレータツールを使用することを検討してください。配列ベースの出力はここでうまく収まらない - 最初にセットを表現する概念を開発しなければならない。リストを解析したいだけですか?

  • +0

    それは私が向かうところで、私は車輪を再現していないことを二重に確かめたかったのです。私のテストを書いている最中にあっただけで、図書館があるかもしれません。 – Dave

    関連する問題