gpt4 book ai didi

parsing - Haskell - 快乐的解析器错误

转载 作者:行者123 更新时间:2023-12-05 01:08:42 24 4
gpt4 key购买 nike

我正在开发一个使用 Happy 解析器生成器的项目。这就是我到目前为止所做的:

Exp   : Exp1                    { $1 }

Exp1 : Exp1 '+' Term { \p -> $1 p + $3 p }
| Exp1 '-' Term { \p -> $1 p - $3 p }
| Term { $1 }

Term : Term '*' Factor { \p -> $1 p * $3 p }
| Term '/' Factor { \p -> $1 p / $3 p }
| sqrt Factor { \p -> sqrt $2 p }
| Factor { $1 }

Factor
: double { \p -> $1 }
| '(' Exp ')' { $2 }

问题是我收到以下错误:
Parser.hs:158:38:
No instance for (Floating ([a0] -> Double))
arising from a use of `happyReduction_7'
Possible fix:
add an instance declaration for (Floating ([a0] -> Double))
In the second argument of `happySpecReduce_2', namely
`happyReduction_7'
In the expression: happySpecReduce_2 6 happyReduction_7
In an equation for `happyReduce_7':
happyReduce_7 = happySpecReduce_2 6 happyReduction_7

你知道我该如何解决这个问题吗?

更新:我解决了它,但现在它只有在我写“sqrt2”时才有效(sqrt和2之间没有空格);如果我写“sqrt 2”,我会得到“解析错误”。

这是我在 Alex(lex) 文件中的内容:
       tokens :-

$white+ ;
"--".* ;
"sqrt" { \s -> TokenSqrt}
"sin" { \s -> TokenSin}
"log" { \s -> TokenLog}
@doubleNumber { \s -> TokenDouble (read s) }
@var { \s -> TokenVar s }
"+" { \s -> TokenPlus }
"-" { \s -> TokenMinus }
"*" { \s -> TokenMul }
"/" { \s -> TokenDiv }
"(" { \s -> TokenOB }
")" { \s -> TokenCB }
"=" { \s -> TokenEq }

最佳答案

sqrt $2 p

这叫 sqrt与功能 $2作为其参数,然后将结果函数应用于参数 p .这只有在 sqrt 时才有意义可以采用一个函数并作为结果产生一个函数,当且仅当存在 Floating 时才会出现这种情况。函数的实例,没有。因此错误信息。

您无疑打算做的是应用函数 $2论据 p然后申请 sqrt结果,你会写:
sqrt ($2 p)

关于parsing - Haskell - 快乐的解析器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781511/

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