Parsing 如何使用FParsec解析字符串值

Parsing 如何使用FParsec解析字符串值,parsing,f#,fparsec,Parsing,F#,Fparsec,如何从另一个字符串中解析出一个简单字符串 在FParsec教程中,给出了以下代码: let str s = pstring s let floatBetweenBrackets = str "[" >>. pfloat .>> str "]" 我不想解析backet之间的float,而更想解析表达式中的字符串 例如: Location:=LocationKeyWord路径下线 给定一个辅助函数 let test p s = match run p s with

如何从另一个字符串中解析出一个简单字符串

在FParsec教程中,给出了以下代码:

let str s = pstring s
let floatBetweenBrackets = str "[" >>. pfloat .>> str "]"
我不想解析backet之间的float,而更想解析表达式中的字符串

例如:

Location:=LocationKeyWord路径下线

给定一个辅助函数

let test p s =
    match run p s with
    | Success(result,_,_)  -> printfn "%A" result
    | Failure(message,_,_) -> eprintfn "%A" message
还有一个解析器函数:
let pLocation=…

当我调用
test pLocation“Location/root/somepath”

它应该打印
“/root/somepath”

我的第一次尝试是修改教程代码,如下所示:

let pLocation = str "Location " >>. str
但这给了我一个错误:

Error 244   Typeerror. Expected:
    Parser<'a,'b>    
Given:
    string -> Parser<string,'c>  
The type CharStream<'a> doesn't match with the Type string
错误244 Typeerror。预期:
分析器
鉴于:
字符串->分析器与类型字符串不匹配

str
不适用于您的路径,因为它是为匹配/解析常量字符串而设计的
str
适用于常量
“Location”
,但您也需要为路径部分提供解析器。您没有指定可能是什么,因此这里是一个只解析任何字符的示例

let path = manyChars anyChar
let pLocation = str "Location " >>. path
test pLocation "Location /root/somepath"
您可能希望为路径使用不同的解析器,例如,这将解析任何字符,直到换行符或文件结尾,以便可以解析多行

let path = many1CharsTill anyChar (skipNewline <|> eof)
let path=manycharstill anyChar(skipNewline eof)

您可以创建其他不接受空格或不处理带引号路径等的解析器。

str
不适用于您的路径,因为它被设计为匹配/解析常量字符串
str
适用于常量
“Location”
,但您也需要为路径部分提供解析器。您没有指定可能是什么,因此这里是一个只解析任何字符的示例

let path = manyChars anyChar
let pLocation = str "Location " >>. path
test pLocation "Location /root/somepath"
您可能希望为路径使用不同的解析器,例如,这将解析任何字符,直到换行符或文件结尾,以便可以解析多行

let path = many1CharsTill anyChar (skipNewline <|> eof)
let path=manycharstill anyChar(skipNewline eof)

您可以创建其他不接受空格或不处理引用路径等的解析器。

完美答案-谢谢!完美答案-谢谢!