为什么 Parsec 停止使用多个解析器进行解析?

问题描述 投票:0回答:1

我正在尝试使用 Parsec 在 Haskell 中编写一个简单的解析器,但我的输入“Hello World”从未被正确解析。

我的代码如下所示:

parser = p1 <|> p2

p1 = string "Hello"
p2 = string "Hello World"

如果我运行它,我会收到错误

unexpected whitespace

parsing haskell parsec
1个回答
0
投票

p1
已经消耗了标记“Hello”,因此
p2
立即失败,因为下一个标记是空格。

您可以使用类似

try
之类的东西来重置消耗的代币。

parser = try p1 <|> p2

p1 = string "Hello"
p2 = string "Hello World"
© www.soinside.com 2019 - 2024. All rights reserved.