14
我對Parsec的一個常見問題是,如果它出現在「正確」的位置,它往往會忽略無效輸入。Parsec:消耗所有輸入
舉一個具體的例子,假設我們有integer :: Parser Int
,我寫
expression = sepBy integer (char '+')
(忽略了片刻空白的問題。)
這正確解析像 「123 + 456 + 789」。然而,如果我餵它「123 + 456-789」,它愉快地忽略了非法的「 - 」字符和表達的尾部;我實際上想要一個錯誤消息告訴我關於無效輸入的信息,而不僅僅是讓它默默地忽略那個部分。
我明白爲什麼發生這種情況;我不確定的是如何解決它。使用全部提供的輸入並且只有在全部是有效表達式時纔會成功使用的設計解析器的一般方法是什麼?