我使用FParsec,我需要解析a and b or c
之类的表达式,这些表达式的AST节点看起来像
type Expression = Expression of Operator seq * Value seq
所以基本上我不在乎运算符在哪里,我只在乎表达式中的值和运算符。
我认为我需要解析器接受EBNF格式value (op value)+
的输入,并尝试使用many1
:
let expression =
value .>>. (many1 (operator .>>. value))
但这会导致类型为Parser<Value * (Operator * Value) list>
的解析器,但是我想要类型为Parser<Value list * Operator list>
的解析器。
我是否需要手动将生成的解析器转换为所需的形式,或者已经有内置的解析器或函数?
我还查看了chainl1
,因为它似乎可以满足我的要求,但我不知道如何使用它。