scala - parboiled2 Illegal rule composition -
i writing cron parser, compiler complains illegal rule composition,
what's wrong parser?
import org.parboiled2._ sealed trait part case class fixed(points: seq[int]) extends part case class range(start: int, end: int) extends part case class every(start: int, interval: int) extends part case object full extends part case object ignore extends part class cronparser(val input: parserinput) extends parser { def number = rule { capture(digits) ~> (_.toint) } def digits = rule { oneormore(charpredicate.digit) } def fixed = rule { oneormore(number).separatedby(",") ~> fixed } def range = rule { digits ~ '-' ~ digits ~> range } def every= rule { digits ~ '/' ~ digits ~> every } def full= rule { '*' ~ push(full) } def ignore = rule { '?' ~ push(ignore) } def part = rule { fixed | range | every | full | ignore } def expr = rule { part ~ part ~ part ~ part ~ part} }
you're using digits think want using number. following should work fine:
class cronparser(val input: parserinput) extends parser { def number = rule { capture(digits) ~> (_.toint) } def digits = rule { oneormore(charpredicate.digit) } def fixed = rule { oneormore(number).separatedby(",") ~> fixed } def range = rule { number ~ '-' ~ number ~> range } def every = rule { number ~ '/' ~ number ~> every } def full = rule { '*' ~ push(full) } def ignore = rule { '?' ~ push(ignore) } def part = rule { fixed | range | every | full | ignore } def expr = rule { part ~ part ~ part ~ part ~ part } } the problem digits doesn't push value, meant range, etc. rules wanted pop values off stack, , these weren't able composed ~.
Comments
Post a Comment