我想使用Parsec包在Haskell中編寫解析器。輸入規則的一部分需要解析器匹配規則選項。在規則之外,多於一個規則可能匹配,但至少至少一個規則必須匹配,否則預計分析器會產生錯誤。如何在Parsec中形成一個OR選項,它可以匹配很多選項,但必須至少匹配一個選項?
讓我舉個例子。假設我們有兩個名爲first
和more
的Parsec規則。有可能是:
- 輸入匹配
first
後跟more
; - 輸入只匹配
first
;或者 - 輸入只匹配
more
。
在任何情況下,至少有一個first
或more
必須匹配。任何想法如何做到這一點?我想過使用<|>
,但如果我理解正確,它只會匹配規則的一個(即第一個成功)。
編輯:
澄清:如果兩個first
和more
比賽,必須同時返回的結果。如果只有一個匹配,另一個的返回值可以是一些空值,如Nothing
,但不允許爲first
和more
返回Nothing
。
你的意思是說,相同的輸入可以被'first'和'more'解析,並且你想要返回兩個結果嗎? –
@DanielFischer:是的,確切的。更新了問題。 – gablin
我想再澄清一次。當你說「第一個和第二個匹配」時,你的意思是第一個>>更多的匹配,或者是從這個位置開始的第一個匹配,而從這個位置開始的更多匹配? –