gpt4 book ai didi

parsing - Haskell Parsec,将 oneOf 改编为 [String]

转载 作者:行者123 更新时间:2023-12-02 10:14:09 24 4
gpt4 key购买 nike

我正在学习“48 小时内为自己编写一个方案”教程。

 symbol :: Parser Char
symbol = oneOf "!#$%&|*+-/:<=>?@^_~"

这对于符号来说非常有用,但是如果我有一个关键字列表怎么办? (即结构体、整数)

oneOf可以适配列表吗?这正是我想要的,如下所示。

keywords :: Parser String 
keywords = oneOf ["struct","int",..etc]

或者我应该导入 Text.Parsec.Char 并尝试在关键字列表上映射 M 字符串?

我正在尝试标记化,只是想知道走这条路的其他人的最佳实践是什么。

文档说要使用这样的东西:

 divOrMod    =   string "div" 
<|> string "mod"

http://hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/Text-Parsec-Char.html

最佳答案

其一般形式为the choice combinator ,其类型如下:

choice :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a

基本上,你给它一个解析器列表,它会按顺序尝试它们,直到一个成功。 choice使用 (<|>) 实现,因此与该方法相同。

在您的情况下,要匹配关键字列表但不匹配其他解析器,您可以只映射 string超过 String 的列表s,然后使用 choice关于这一点。

另一方面,mapM string会做一些完全不同的事情 - 它会期望所有解析器按顺序成功。

关于parsing - Haskell Parsec,将 oneOf 改编为 [String],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15026081/

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