使用 petitparser 解析定界字符串

Parsing delimited strings using petitparser

我原本希望(手动)为我的语法写一个简单的 tokenise/parser,但我的一个要求意味着标记化有点繁琐。

我需要能够支持定界字符串的概念,其中定界符可以是任何字符。例如。字符串最有可能使用双引号分隔(例如 "hello"),但也可以很容易地使用 /hello/,hello, 或病态的 xhellox

所以,我开始研究可能有哪些替代方案来进行组合 tokenise/parse...这是我偶然发现 petit 解析器的时候。

只是好奇这种类型的分隔字符串是否可以使用 Petit Parser 进行解析?谢谢

使用 PetitParser 可以通过多种方式实现这一点。可能最优雅的是使用延续解析器:

final delimited = any().callCC((continuation,  context) {
  final delimiter = continuation(context).value.toParser();
  final parser = [
    delimiter,
    delimiter.neg().star().flatten(),
    delimiter,
  ].toSequenceParser().pick<String>(1);
  return parser.parseOn(context);
});

上面的代码片段解析起始字符 any()(如有必要,可以进一步限制),然后从中动态创建一个 delimiter 解析器。此外,它将定界符解析器组合成一个解析起始字符、内容(不是起始字符)和结束字符的解析器,并使用新的解析器来使用输入。这也给出了真正的 nice error messages.