gpt4 book ai didi

scala - 与 packrat scala/kiama 错误的类型不匹配

转载 作者:行者123 更新时间:2023-12-02 11:01:15 24 4
gpt4 key购买 nike

我正在 Scala (kiama) 中创建一个 mini-java 编译器。我的一个名为“tipe”的代码块给了我一个错误,我的 Scala 入门知识无法破解。

这是我的代码(有点不完整,但我不相信这是给我的错误)

lazy val tipe : PackratParser[Type] =
"bool"|
"int" |
"obj" |
tipe ~("->" ~> tipe) |
("(" ~> tipe <~")")

当我尝试编译我的程序时出现以下错误:

Type mismatch found:

Found : SyntaxAnalysis.this.Parser[Object]

Required: SyntaxAnalysis.this.PackratParser[funjs.FunJSTree.type]

tipe ~ ( "->" ~> tipe ) |



带有指向 | 的箭头

任何帮助将不胜感激,我是 Scala 的新手,这对我来说相当复杂。

最佳答案

编译器假设 tipe有您提供的类型:PackratParser[Type] .这意味着 tipe ~("->" ~> tipe)Parser[Type ~ Type] , 而 "bool"等转换为 Parser[String] .结合Parser[String]Parser[Type ~ Type]使用 |给你一个Parser[Object] (作为 StringType ~ Type 的常见父类(super class)型)。要解决这个问题,您需要确保每个备选方案(| 的参数)都是 Parser[Type] .通常它应该看起来像

lazy val tipe : PackratParser[Type] =
"bool" ^^^ BoolType |
...
tipe ~("->" ~> tipe) ^^ { case (t1, t2) => someFunctionOf(t1, t2) } |
("(" ~> tipe <~")")

使用 ^^ ^^^ 组合器。

(注意:如果您不熟悉 { case (t1, t2) => ... } 语法,我建议您从更基本的内容开始。)

关于scala - 与 packrat scala/kiama 错误的类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39246396/

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