Advertisement
Guest User

Untitled

a guest
Apr 27th, 2015
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.07 KB | None | 0 0
  1. package playground
  2.  
  3. import org.parboiled2._
  4.  
  5.  
  6. class Playground (val input: ParserInput) extends Parser {
  7.  
  8.   type R0 = Rule0
  9.   type R[T] = Rule1[T]
  10.   type R1 = R[String]
  11.  
  12.   def TestedRule = rule {
  13.     Expr ~ EOI
  14.   }
  15.  
  16.   def Expr: R1 = rule {Plus | Mult | Prim}
  17.  
  18.   def Prim: R1 = rule {capture(CharPredicate.Digit.*)}
  19.  
  20.   def Mult: R1 = rule {TwoOrMoreSil(() => MultSeq, () => MultSign) ~> {seq: Seq[String] => Stringify(seq, "mult")}}
  21.   def MultSeq: R1 = rule {Prim ~ &(MultSign | EOI) | Plus}
  22.  
  23.   def Plus: R1 = rule {TwoOrMoreSil(() => PlusSeq, () => PlusSign) ~> {seq: Seq[String] => Stringify(seq, "plus")}}
  24.   def PlusSeq: R1 = rule {Prim ~ &(PlusSign | EOI) | Mult}
  25.  
  26.   def PlusSign: R0 = rule('+')
  27.   def MultSign: R0 = rule('*')
  28.  
  29.   def WL: R0 = rule {"\n"}
  30.   def WS: R0 = rule {" "}
  31.  
  32.   def Stringify(seq: Seq[String], method: String) = s"""$method(${seq.mkString(",")})"""
  33.  
  34.   def TwoOrMoreSil[T](term: () => Rule1[T], delim: () => Rule0): Rule1[Seq[T]] = rule {
  35.     term() ~ delim() ~ term().+(delim()) ~> {(first: T, rest: Seq[T]) => first +: rest}
  36.   }
  37.  
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement