温馨提示:本文翻译自stackoverflow.com,查看原文请点击:parsing - Is there a way to typecheck boolean expressions using the Scala compiler?
parsing scala typechecking parser-combinators

parsing - 有没有一种方法可以使用Scala编译器对布尔表达式进行类型检查?

发布于 2020-03-27 16:02:25

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

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

查看更多

查看更多

提问者
Chris Bartolo
被浏览
179
Chris Bartolo 2020-02-02 18:00

礼貌U / aepurniet这个 reddit的职位。

该语句必须以某些值定义为该语句的前缀,然后进行解析,然后键入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)
}