Parsing 在本例中,为什么不尝试触发回溯
我试图在Haskell中使用parsec编写解析器,特别是回溯的工作原理 以下面的简单解析器为例:Parsing 在本例中,为什么不尝试触发回溯,parsing,haskell,parsec,Parsing,Haskell,Parsec,我试图在Haskell中使用parsec编写解析器,特别是回溯的工作原理 以下面的简单解析器为例: import Text.Parsec 类型Parser=Parsec String()字符串 parseConst::解析器 parseConst=do{ 这里有很多问题 首先,parseConst永远无法正常工作。该类型表示它必须生成一个String,因此read::String->String。特定的read实例要求输入为带引号的字符串,因此向read传递0个或更多数字字符总是会导致调用错误如
import Text.Parsec
类型Parser=Parsec String()字符串
parseConst::解析器
parseConst=do{
这里有很多问题
首先,parseConst
永远无法正常工作。该类型表示它必须生成一个String
,因此read::String->String
。特定的read
实例要求输入为带引号的字符串,因此向read
传递0个或更多数字字符总是会导致调用错误代码>如果您尝试评估它产生的值
其次,parseConst
可以成功匹配零个字符。我认为您可能想要一些
,而不是许多
。如果遇到的输入不是以数字开头的,那么它实际上会失败
第三,()
没有做你想做的。你可能会认为(a这里有很多问题
首先,parseConst
永远无法正常工作。该类型表示它必须生成一个String
,因此read::String->String
。特定的read
实例要求输入为带引号的字符串,因此向read
传递0个或更多数字字符总是会导致调用错误代码>如果您尝试评估它产生的值
其次,parseConst
可以成功匹配零个字符。我认为您可能想要一些
,而不是许多
。如果遇到的输入不是以数字开头的,那么它实际上会失败
第三,()
没有按照你的想法做。你可能会认为(当parseConst
失败时,atry
使用原始输入创建parseExpr
尝试parseAdd
。但在这种情况下,parseConst
成功解析1
,因此此try
不起任何作用。try
使用原始输入创建parsexpr
tryparseAdd
)enparseConst
失败。但是在这种情况下,parseConst
成功解析了1
,所以这个try
没有任何作用。谢谢!在我达到之前的YACC水平之前,我似乎还有很多事情要做:)。谢谢!在我达到之前的YACC水平之前,我似乎还有很多事情要做:)。
Left (line 1, column 2):
unexpected '+'
expecting digit or end of input