Haskell 帕塞克唐';即使解析失败,也不要转到左边
我正在用这个例子学习parsec 随着代码的崩溃,结果总是“正确的” 有人能给我一些建议吗Haskell 帕塞克唐';即使解析失败,也不要转到左边,haskell,parsec,Haskell,Parsec,我正在用这个例子学习parsec 随着代码的崩溃,结果总是“正确的” 有人能给我一些建议吗 *Main> regularParse parser4search "a" Loading package array-0.5.0.0 ... linking ... done. Loading package deepseq-1.3.0.2 ... linking ... done. Loading package bytestring-0.10.4.0 ... linking ..
*Main> regularParse parser4search "a"
Loading package array-0.5.0.0 ... linking ... done.
Loading package deepseq-1.3.0.2 ... linking ... done.
Loading package bytestring-0.10.4.0 ... linking ... done.
Loading package text-1.1.0.0 ... linking ... done.
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package mtl-2.1.3.1 ... linking ... done.
Loading package parsec-3.1.7 ... linking ... done.
Right (Num *** Exception: Prelude.read: no parse
*Main> regularParse parser4search "1"
Right (Num 1)
==========
import Text.Parsec (parse,anyChar)
import Text.Parsec.String --(Parser)
import Text.Parsec.Char (oneOf, char, digit, satisfy,letter)
import Text.Parsec.Combinator (many1, choice, chainl1)
import Control.Applicative ((<|>), many)
import Control.Monad --(void)
import Data.Char --(isLetter, isDigit)
data SimpleExpr = Num Integer
| Var String
| Add SimpleExpr SimpleExpr
| Parens SimpleExpr
| Str [Char]
deriving (Eq,Show)
regularParse p = parse p ""
parser4search:: Parser SimpleExpr
parser4search = do
searchStr <- many digit
return (Num (read searchStr))
import Text.Parsec(parse,anyChar)
导入Text.Parsec.String--(解析器)
导入Text.Parsec.Char(一个,字符,数字,满足,字母)
导入Text.Parsec.Combinator(many1,choice,chainl1)
导入控件。应用程序((),多个)
导入控制.Monad--(void)
导入数据.Char--(Isleter,isDigit)
数据SimpleExpr=Num整数
|变量字符串
|添加SimpleExpr SimpleExpr
|帕伦斯单纯形
|Str[Char]
推导(等式,显示)
regularParse p=parse p“”
parser4search::Parser SimpleExpr
parser4search=do
searchStrparsec没有给出错误(左值),因为解析“a”时没有错误。
many digit
语句在未找到任何整数字符的情况下返回空字符串。
要使代码正常工作,需要处理空字符串。
例如
parser4search::Parser SimpleExpr
parser4search=do
searchStrparsec没有给出错误(左值),因为解析“a”时没有错误。
many digit
语句在未找到任何整数字符的情况下返回空字符串。
要使代码正常工作,需要处理空字符串。
例如
parser4search::Parser SimpleExpr
parser4search=do
searchStrmany
表示解析零个或多个项目
many1
表示解析一个或多个项目
因此,多位数
成功输入“1”、“24”或“”
many1
在输入“1”、“24”时成功,但在输入“”时失败。听起来这就是你想要的
您可能还想查看eof
,这样就不允许使用未解析的尾部内容。many
表示解析零个或多个项目
many1
表示解析一个或多个项目
因此,多位数
成功输入“1”、“24”或“”
many1
在输入“1”、“24”时成功,但在输入“”时失败。听起来这就是你想要的
您可能还想查看eof
,这样就不允许使用未解析的尾随内容
parser4search:: Parser SimpleExpr
parser4search = do
searchStr <- many digit
if searchStr == []
then return (Num 0)
else return (Num (read searchStr))