Scala AST в Scala

Существует ли библиотека Scala, которая анализирует Scala и создает абстрактное дерево синтаксиса (AST)?

В идеале меня интересует библиотека Scala. План B будет представлять собой библиотеку Java.

(Я знаю, что я мог бы использовать EBNF из Scala Резюме синтаксиса.)

Ответы

Ответ 2

Несколько существующих парсеров:

Будьте осторожны при использовании EBNF из спецификации, очевидно:

"несовпадения между приложением и встроенной грамматикой и несоответствия между языком, скомпилированным с помощью scalac (и используемым в источниках Scala), и языком, заявленным грамматикой" - Scala Ошибка TraС# 1826.

Ответ 3

Вы не можете построить AST для Scala только из грамматики. Там подразумевается рассмотреть, и, чтобы рассмотреть их, существует тип, который должен быть рассмотрен.

Вы можете, однако, вызвать сам компилятор - это всего лишь файл jar. Scala 2.8, в частности, имеет довольно много перехватов для других программ, чтобы защелкнуть работу Майлза Сабина, который делает это именно так, чтобы плагин Eclipse для Scala мог использовать такой компилятор.

Я предлагаю вам перейти в список рассылки Scala Tools и связаться с людьми там.

Ответ 5

Если вы хотите создать AST для части кода. Вы можете использовать отражение scala:

showRaw(reify{
  //your code here like:
  print(2)
})

В приведенном выше коде будет генерироваться AST:

Expr(Apply(Select(Ident(scala.Predef), TermName("print")), List(Literal(Constant(2)))))

Ссылка:

http://docs.scala-lang.org/overviews/reflection/symbols-trees-types.html

Ответ 6

Не уверен в чистых решениях scala, но если вам нужно реализовать план B, вы можете начать с проверки ANTLR или Крысы!