我编写了以下 Parsec
代码来解码表示 Word8
(无符号 8 位整数)的文本:
decOctetP = try e <|> try d <|> try c <|> try b <|> a
where
a = fmap (:[]) digit
b = do
m <- oneOf "123456789"
n <- digit
return [m, n]
c = do
char '1'
m <- count 2 digit
return ('1':m)
d = do
char '2'
m <- oneOf "01234"
n <- digit
return ['2', m, n]
e = do
string "25"
m <- oneOf "012345"
return ['2', '5', m]
我忍不住觉得有一种更简单的方法可以做到这一点。谁能赐教一下?
最佳答案
老实说,最简单的方法就是将其解析为自然数,然后如果它超出范围 0-255 则返回 mzero 以失败解析。
import Control.Monad
import Text.Parsec
import Text.Parsec.String (Parser)
import qualified Text.Parsec.Token as Tok
natural :: Parser Integer
natural = Tok.natural lexer
number :: Parser Integer
number = do
n <- natural
if n < 256 then return n
else mzero
关于parsing - 有没有更简单的方法来为 8 位十进制整数编写这个 Haskell Parsec 解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19773785/