我目前正在使用 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/