Есть ли способ проверить тип логических выражений с помощью компилятора Scala? - PullRequest
1 голос
/ 31 января 2020

Я сейчас создаю парсер, используя Scala комбинаторы парсеров. Парсер должен принимать логические выражения, которые на данный момент я проверяю и оцениваю вручную. Однако я хочу расширить эту особенность и иметь возможность принимать более сложные логические выражения, которые потребуют больше ручной работы. Мне было интересно, можно ли выполнить проверку типов, используя непосредственно компилятор Scala, которому я передам конкретное выражение, которое я хочу проверять, и типы каждой конкретной переменной. Ниже приведен пример того, что я имею в виду:

Предположим, у меня есть логическое выражение: age > 18. Вместе с отображением, зная, что переменная age имеет тип Int. Я хочу иметь возможность передавать (в любом формате) age > 18 и сопоставления типов в компилятор Scala, и он будет возвращать, проверяет ли он проверку типов в логическом выражении или нет.

1 Ответ

0 голосов
/ 02 февраля 2020

Предоставлено u / aepurniet из this Reddit post.

Перед оператором должен стоять префикс с определением некоторых значений, затем анализируется и затем проверяется тип , Тип результирующего выражения можно проверить из 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...