是否存在.net的任何设置解析器?

时间:2009-06-10 18:47:25

标签: .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类是任意的。

2 个答案:

答案 0 :(得分:1)

我不知道可以这样做的.net库。

设定表示应该有多复杂? 它只是由

组成
  • 元组
  • 子集

还是应该允许复杂的结构,如间隔或设置理解? ({ f(x) | x <- [1, 10), g(x) < 42 ^ q(x) = 0 })。

如果您的 set 只有一个简单的表单(可能只是一个值的枚举),我会使用正则表达式或内置字符串函数手动解析它。

否则这应该很难解析和评估 - 考虑使用像Irony这样的编译器编译器工具

请注意,集合是无序的,也可以是无限的。基于数组的输出不适合这里 - 您首先必须开发一个表示集合的概念。或者你只是想解析一个列表?

答案 1 :(得分:0)

嵌入IronPython并使用Execute方法可能是个不错的选择。

Here's a StackOverflow question on the topic.

另见A 3 minute guide to embedding IronPython in a C# application