Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 如何在Parsec中从可选解析器中检索值?_Parsing_Haskell_Optional_Parsec - Fatal编程技术网

Parsing 如何在Parsec中从可选解析器中检索值?

Parsing 如何在Parsec中从可选解析器中检索值?,parsing,haskell,optional,parsec,Parsing,Haskell,Optional,Parsec,抱歉,如果这是一个新手问题-我想解析 Exp ::= Mandatory_Part Optional_Part0 Optional_Part1 我想我可以做到这一点: proc::Parser String proc = do { ;str<-parserMandatoryPart ;str0<-optional(parserOptionalPart0) --(1) ;str1<-optional(parserOptionalPart1)

抱歉,如果这是一个新手问题-我想解析

Exp ::= Mandatory_Part Optional_Part0 Optional_Part1
我想我可以做到这一点:

proc::Parser String

proc = do {

    ;str<-parserMandatoryPart

    ;str0<-optional(parserOptionalPart0)  --(1)

    ;str1<-optional(parserOptionalPart1)  --(2)

    ;return str++str0++str1

}
proc::解析器字符串
proc=do{

;str您要查找的函数是
optionMaybe
。如果解析器失败,它将返回
Nothing
,如果使用了输入,则返回
中的内容。

来自:

选项x p
尝试应用解析器
p
。如果
p
在不使用输入的情况下失败,则返回值
x
,否则返回值
p

所以你可以做:

proc :: Parser String
proc = do
  str  <- parserMandatoryPart
  str0 <- option "" parserOptionalPart0
  str1 <- option "" parserOptionalPart1
  return (str++str0++str1)
proc::解析器字符串
proc=do

str Keegan,谢谢你的回答和修改我的代码。它基本上按照我想要的方式工作-在原始帖子中没有描述的案例中存在一些问题。我对Haskell和Parsec都是新手,我将阅读并尝试更多。谢谢。