Add repitition as list in case class (scala parser) -


i have following parser:

import scala.util.parsing.combinator.regexparsers  class simpleparser extends regexparsers {    override val skipwhitespace = false    private val eol = sys.props("line.separator")    def word: parser[string] = "[a-z]+".r ^^ { _.tostring }    def freq: parser[list[string]] = repsep(word, eol) ^^ {     case word => word   }  }  object testsimpleparser extends simpleparser {   def main(args: array[string]) = {     parse(freq,       """mike         |john         |sara       """.stripmargin) match {       case success(matched,_) => println(matched)       case failure(msg,_) => println(msg)       case error(msg,_) => println(msg)     }   } } 

the result of execution list(mike, john, sara) isn't want.

i'd have following case class:

case class someentity(list: list[string]) 

and result following:

someentity(list(mike), list(john), list(sara)). 

i want add lists there words new lines. please, don't put big attention on fact there 1 word in list. simplified version of issue. so, should change in parser or in case class?

the case class definition not match expected output. you're looking this:

case class someentity(list: list[string]*) {     override def tostring = this.getclass.getsimplename+"("+list.mkstring(", ")+")" } 

now if, want someentity instance, type of parser parser[someentity].

as repsep give list[string], need map each element in list singleton list (so list[list[string]]) , forces see varargs type :_*

 def freq: parser[someentity] =       repsep(word, eol) ^^ (list => new someentity(list.map(list(_)) : _*)) 

given input, outputs:

someentity(list(mike), list(john), list(sara)) 

your case class take list[list[string]] parameter. although list[string] correct type in opinion, have reasons require this.

note mapping word parser redundant, remove it.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -