scala - 有没有办法使用 Scala 编译器对 bool 表达式进行类型检查?

标签 scala parsing typechecking parser-combinators

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

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

最佳答案

u/aepurniet 提供来自this Reddit 帖子。

该语句必须在语句前面加上一些值定义,然后进行解析,然后进行类型检查。表达式的结果类型可以从 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)
}

关于scala - 有没有办法使用 Scala 编译器对 bool 表达式进行类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60000575/

相关文章:

scala - 哪些scala编译器插件可用?

json - 使用 Ansible 从 JSON 响应中提取字段

java解析数据文件格式

Groovy - 使用泛型进行类型检查不起作用

types - 类型检查和类型系统的限制是什么?

scala - 使用一种热编码和向量汇编器与向量索引器来处理分类特征

java - 对集合成员使用带有辅助注入(inject)的 Guice 多重绑定(bind)

Haskell IO 代码不进行类型检查

scala - Scala中带有main()和extends App的对象的区别

java - 如何使用android解析xml