如何解析Haskell';是帕塞克吗?
我是Haskell的初学者,我试图通过编写一个解析器来学习Parsec,该解析器可以使用阿拉伯数字,如“234”,也可以使用罗马数字,如“MCMLXIX”。我发现了,所以我想我应该尝试以某种方式将如何解析Haskell';是帕塞克吗?,haskell,parsec,Haskell,Parsec,我是Haskell的初学者,我试图通过编写一个解析器来学习Parsec,该解析器可以使用阿拉伯数字,如“234”,也可以使用罗马数字,如“MCMLXIX”。我发现了,所以我想我应该尝试以某种方式将fromroam函数与Parsec结合使用,因为我最终需要得到与罗马数字相同的阿拉伯数字。但是我还不知道如何将fromroam的输出强制到解析器中。这就是我到目前为止所做的: import Text.Parsec import Text.Parsec.Text (Parser) import Text.
fromroam
函数与Parsec结合使用,因为我最终需要得到与罗马数字相同的阿拉伯数字。但是我还不知道如何将fromroam
的输出强制到解析器中。这就是我到目前为止所做的:
import Text.Parsec
import Text.Parsec.Text (Parser)
import Text.Numeral.Roman
arabicNum :: Parser Int
arabicNum = do
n <- many1 digit
return (read n)
isChapter :: Inline -> Bool
isChapter str = str == Str "CHAPTER"
number :: Parser Int
number = arabicNum <|> romanNum
romanNum :: Parser Int
romanNum = do
str <- many1 char
return case (fromRoman str) of
Just n -> n
Nothing -> Nothing
import Text.Parsec
导入Text.Parsec.Text(解析器)
导入Text.number.Roman
arabicNum::解析器Int
阿拉伯核=do
恩布尔
isChapter str=str==str“章”
数字::语法分析器Int
数字=阿拉伯罗马数字
语法分析器Int
romanNum=do
strn
无->无
但是,没有骰子,因为我还不知道我在做什么 如果您的可能
是无
,您可以失败
生成解析器错误。如果是某物,您可以返回它:
romanNum :: Parser Int
romanNum = do
str <- many1 $ oneOf "MDCLXVI"
case fromRoman str of
Just n -> return n
Nothing -> fail $ str ++ " is not a valid roman numeral"
romanum::Parser Int
romanNum=do
str返回n
Nothing->fail$str++“不是有效的罗马数字”