通过FParsec进行解析的向后兼容性

时间:2018-08-23 15:31:20

标签: parsing f# fparsec

想象一下我有一个简单的字符串(实际上,这个字符串可以包含很多复杂的项目,例如数字组合,Guid等...): “ a,b,c” 以及合适的解析器。

然后经过一些更改,字符串变为: “ a,b,c,d,e” 解析器已经过重新编写,以达到成功的目的。

但是现在我必须确保重写的解析器在解析旧格式字符串时不会失败。 是否可以提供与FParsec的向后兼容性?

1 个答案:

答案 0 :(得分:1)

向后兼容性应在您的数据模型中实现,并使解析器仅支持该数据模型。

说,如果您的Result数据类型是List<>(其长度应为3个元素),则只有最小的入侵才能使解析器返回4个元素的数据。然后,使用您的应用程序逻辑检查数据有效性,一切就绪。

但是,如果您的Result是像T1 * T2 * T3这样的固定元组/三元组,则没有直接的方法来添加第四个元素。您可能需要一个额外的层-通常实现为“有区别的联盟(DU)”,如下所示:

type MyData = 
  | OldFormat of T1 * T2 * T3       // this is your old way
  | NewFormat of T1 * T2 * T3 * T4  // this is your new data format

这样,您将必须实现包装器DU,还必须复制解析逻辑以支持4元素数据。

检查thisthisthis的答案,以解析一些简单的方法来解析“任一列表”数据。

除非您提供了现有代码,否则很难说出任何东西。