首页 > 解决方案 > 通过 FParsec 进行解析的向后兼容性

问题描述

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

然后经过一些更改,字符串变为:“a, b, c, d, e” Parser 已被重写以获取成功的结果。

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

标签: parsingf#fparsec

解决方案


向后兼容应该在你的数据模型中实现,并使解析器只支持这个数据模型。

比如说,如果你的Result数据类型是 a 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的答案,了解一些简单的解析“任一列表”数据的方法。

除非您提供现有代码,否则很难进一步说明。


推荐阅读