Scala Packrat парсер - PullRequest
       5

Scala Packrat парсер

2 голосов
/ 25 августа 2010

У меня есть несколько вопросов о комбинаторе синтаксического анализа 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. Скаладок сказал: «Их можно свободно смешивать с обычными парсерами в одной грамматике». Не могли бы вы также объяснить, как обычные правила синтаксического анализа, которые не обеспечивают запоминание, будут влиять на правила пакета, поддерживающие его?

Спасибо.

1 Ответ

3 голосов
/ 25 августа 2010

class PackratReader вложено в trait PackratParsers. Вам нужно будет создать его экземпляр в контексте конкретного экземпляра черты PackratParsers. Я бы передал "plain" Reader конструктору MyParser, чтобы можно было создать экземпляр PackratReader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...