首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型不匹配与packrat scala/kiama错误

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

Stack Overflow用户
提问于 2016-08-31 09:55:47
回答 1查看 73关注 0票数 0

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

这是我的代码(有点不完整,但我不认为这会给我带来错误)

代码语言:javascript
复制
lazy val tipe : PackratParser[Type] =
 "bool"|
 "int" |
 "obj" |
 tipe ~("->" ~> tipe) |
 ("(" ~> tipe <~")")

当我试图编译我的程序时,我会得到以下错误:

发现类型错配: 发现: SyntaxAnalysis.this.ParserObject 所需: SyntaxAnalysis.this.PackratParserfunjs.FunJSTree.type tipe ~( "->“~> tipe )

有一个箭头指向了

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 12:14:56

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

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

使用^^^^^组合子。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39246396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档