Итак, я пытаюсь создать парсер, и это одно из правил производства:
app : app "(" ((exp ",")* exp)? ")"
И класс для этого выглядит следующим образом:
case class AppExp(fn : Expression, args : Vector[Expression])
Главное вотподвела меня это Vector[Expression]
.Как мне сделать так, чтобы парсер возвращал это?
Я пытался преобразовать производство:
lazy val app : PackratParser[Expression] =
app ~ ("(" ~> opt(rep(exp <~ ",") ~> exp) <~ ")") ^^ { case e ~ t => AppExp (e, t) }
Но часть opt
делает так, что возвращается Option
вместо A Vector
.
found:Option[...]
required:Vector[...]
And it points to the `t` in `AppExp(e, t)` in the error message.
Надеюсь, я объясню все ясно.Что делает Vector
, хорошо выражений в этом случае, но в целом?Поскольку в некоторых других классах они также требуют Вектор выражений, я не знаю, что это влечет за собой.Я вообще что-то делаю правильно?Любая помощь приветствуется.Спасибо