У меня есть несколько вопросов о комбинаторе синтаксического анализа Packrat, представленном в Scala 2.8.
К сожалению, я не смог найти никаких руководств по использованию этой новой функции, кроме краткого описания черты Scaladoc PackratParsers. Можно ли получить пример его использования?
На самом деле, у меня нет опыта в Скале. И первая проблема, которую я обнаружил, пытаясь использовать синтаксический анализатор пакетов, - реализация класса PackratReader. Скаладок сказал, что программист должен создать этот объект вручную, как новый PackratReader (new lexical.Scanner («input»)). Поэтому я написал следующее:
package proj
import scala.util.parsing.combinator._
class MyParser extends JavaTokenParsers with PackratParsers {
lazy val expr: PackratParser[Any] = ident ~ "+" ~ ident
}
object TestApplication {
def main(arguments: Array[String]) {
val myParser = new MyParser
println(myParser.parse(
myParser.expr,
new PackratReader(new lexical.Scanner("x+y"))
))
}
}
И компилятор выдал ошибку:
error: not found: type PackratReader
new PackratReader(new lexical.Scanner("x+y"))
Поэтому мой второй вопрос о том, как реализовать (или создать, если возможно, экземпляр) PackratReader. Кроме того, мне также интересно, как создавать экземпляры внутренних классов свойств, таких как PackratReader, упомянутых в предыдущем вопросе?
Мой последний вопрос - как использовать вместе парсер Packrat и обычные комбинаторы парсера Scala. Скаладок сказал: «Их можно свободно смешивать с обычными парсерами в одной грамматике». Не могли бы вы также объяснить, как обычные правила синтаксического анализа, которые не обеспечивают запоминание, будут влиять на правила пакета, поддерживающие его?
Спасибо.