【发布时间】:2017-05-30 15:12:12
【问题描述】:
使用替代解析器时,是否可以选择获取哪个解析器匹配输入。
我的输入字符串可以是下面的格式
{firstPart_number} {secondPart_operator_symbol} {thirdPart}
这里 firstPart 始终是数字,第二部分是解析运算符的替代解析器,第三部分也是替代(数字,字符串列表)。
样本输入
1 + 2
5 * 3
1 in {2,45,6}
由于我的可区分联合属于不同类型,我想知道哪个解析器匹配输入,以便基于该解析器创建可区分联合类型的实例?
如何在 FParsec 中处理这种情况,我的第一部分在解析器中是相同的,但第二和第三个解析器是不同的,并且基于使用 |>> 的实例化类型
【问题讨论】:
-
您能否给我们看一段代码 sn-p(不是整个代码,只是一个相关的简短 sn-p),以便我们了解您如何连接您的替代解析器?仅从您给出的描述中很难描绘出您的代码。
-
我的一个想法是,您可以将每个替代解析器包装在
|>>运算符中。像let pOperator = (pstr "*" |>> OpTimes) <|> (pstr "+" |>> OpPlus) <|> (pstr "in" |>> OpIn)这样的东西。但我想看看你的代码,这样我可以提供更好的建议。