是否可以使用Scala编译器对布尔表达式进行类型检查?

问题描述 投票:1回答:1

我目前正在使用Scala解析器组合器构建解析器。解析器必须接受布尔表达式,此刻我正在手动进行类型检查和评估。但是,我想扩展此特定功能,并能够接受更复杂的布尔表达式,这需要更多的手动工作。我想知道是否可以直接使用Scala编译器来实现类型检查,我可以将要进行类型检查的特定表达式以及每个特定变量的类型传递给该编译器。以下是我的意思的示例:

假设我有一个布尔表达式:age > 18。知道变量age的类型为Int的映射。我希望能够(以任何格式)将age > 18和类型映射传递到Scala编译器,并且它将返回是否将类型检查为布尔表达式。

scala parsing typechecking parser-combinators
1个回答
0
投票

来自u/aepurniet Reddit帖子的this礼貌。

该语句必须在带有某些值定义的语句之前加上前缀,然后解析然后键入checked。表达式的结果类型可以从checked.tpe中进行检查。

def main(args: Array[String]): Unit = {
  import scala.reflect.runtime._
  import scala.tools.reflect.ToolBox
  val toolbox = currentMirror.mkToolBox()
  val expr = "age > 18"
  val eval = s"""
     |val age: Int = ???
     |$expr
     |""".stripMargin
  val tree = toolbox.parse(eval)
  val checked = toolbox.typecheck(tree)
  println(checked.tpe)
}
© www.soinside.com 2019 - 2024. All rights reserved.