如何从另一个字符串中解析出一个简单的字符串。
在FParsec教程中,给出了以下代码:
let str s = pstring s
let floatBetweenBrackets = str "[" >>. pfloat .>> str "]"
我不想解析支持者之间的浮动,但更多的是表达式中的字符串。
STH。像:
Location := LocationKeyWord path EOL
给出帮助函数
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
答案 0 :(得分:4)
str
不适用于您的路径,因为它旨在匹配/解析常量字符串。 str
适用于常量"Location "
,但您也需要为路径部分提供解析器。您没有指定可能的内容,因此这里只是解析任何字符的示例。
let path = manyChars anyChar
let pLocation = str "Location " >>. path
test pLocation "Location /root/somepath"
您可能希望为路径使用不同的解析器,例如,这会解析任何字符,直到换行或文件结尾,以便您可以解析多行。
let path = many1CharsTill anyChar (skipNewline <|> eof)
您可以使其他解析器不接受空格或处理引用路径等。