1

我最初希望(手动)为我的语法编写一个简单的分词/解析器,但我的一个要求意味着分词有点繁琐。

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

因此,我开始研究可能有哪些替代方法可以进行组合标记/解析......这是我偶然发现小解析器的时候。

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

4

1 回答 1

1

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解析器。此外,它将分隔符解析器组合成一个解析起始字符、内容(不是起始字符)和结束字符的解析器,并使用新的解析器来处理输入。这也给出了非常好的错误信息

于 2020-11-04T22:14:07.950 回答