gpt4 book ai didi

f# - 如何使用 fparsec 测试正好 2 个字符?

转载 作者:行者123 更新时间:2023-12-02 19:41:24 25 4
gpt4 key购买 nike

我有以下程序正在运行。它需要一行文本并将其分成两部分,第一部分是标识符,第二部分是该行的其余部分。我的标识符(factID)解析器将任何字符串作为标识符,这(完全)不是我想要的。我想要的是一个解析器,只有在遇到两个连续的大写字母时才会成功。因此,例如“AA”应该成功,而“A”、“A1”或“AAA”则不应该成功。

我不明白的是如何构造一个查找固定长度标记的解析器。我想也许 CharParsers.next2CharsSatisfy 可能是我正在寻找的函数,但我不知道如何正确使用它。

open FParsec

let test p str =
match run p str with
| Success(result, _, _) -> printfn "Success: %A" result
| Failure(errorMsg, _, _) -> printfn "Failure: %s" errorMsg

let ws = spaces
let str_ws s = pstring s .>> ws

type StringConstant = StringConstant of string * string

let factID =
let isIdentifierFirstChar c = isLetter c
let isIdentifierChar c = isLetter c

many1Satisfy2L isIdentifierFirstChar isIdentifierChar "factID"

let factText =
let isG c = isLetter c || isDigit c || c = ' ' || c = '.'
manySatisfy isG


let factParse = pipe3 factID (str_ws " ") factText
(fun id _ str -> StringConstant(id, str))


[<EntryPoint>]
let main argv =
test factParse "AA This is some text." // This should pass
test factParse "A1 This is some text." // This should fail
test factParse "AAA This is some text." // This passes but I want it to fail
0 // return an integer exit code

最佳答案

我想这样就可以了

let pFactID = manyMinMaxSatisfy 2 2 Char.IsUpper

关于f# - 如何使用 fparsec 测试正好 2 个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com