2014-05-12 4 views
0

다른 문자열에서 간단한 문자열을 구문 분석하려면 어떻게해야합니까? 내가 표현에서, 집합하지만 더 문자열 사이의 부동 소수점을 구문 분석하지 않으FParsec을 사용하여 문자열 값을 구문 분석하는 방법

let str s = pstring s 
let floatBetweenBrackets = str "[" >>. pfloat .>> str "]" 

다음 FParsec 튜토리얼에서

주어진 다음 코드가있다.

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 

답변

2

str이 일치하도록 설계 되었기 때문에 경로가 작동하지 않습니다/상수 문자열을 파싱합니다. str은 상수 "Location "에서 잘 작동하지만 경로 부분에도 파서를 제공해야합니다. 여기에있을 수있는 것을 지정하지 않으면 모든 문자를 구문 분석하는 예제가 있습니다. 당신이 많은 줄을 구문 분석 할 수 있도록 경로에 대해 다른 파서 할 수 있습니다

let path = manyChars anyChar 
let pLocation = str "Location " >>. path 
test pLocation "Location /root/somepath" 

예를 들어이 개행 또는 파일의 끝까지 모든 문자를 구문 분석합니다.

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

당신은 공간을 그대로 사용하거나 인용 경로를 처리하지 않는 다른 파서를 만들 수있는 등

+0

완벽한 해답 - 감사합니다! –