Advertisement
Guest User

Untitled

a guest
May 11th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.30 KB | None | 0 0
  1. package com.bee
  2.  
  3. import org.parboiled.scala._
  4. import java.lang.String
  5. import org.parboiled.errors.{ErrorUtils, ParsingException}
  6.  
  7. /**
  8.  * Copyright (C) 2013 Orsa Studio
  9.  */
  10. object BeeParser {
  11.   def main(args: Array[String]): Unit = {
  12.     val parser = new BeeParser
  13.     println ( parser.parseBee("one two three four") )
  14.   }
  15. }
  16.  
  17. class BeeParser extends Parser {
  18.   sealed abstract class AstNode
  19.   case class WordNode(value: String) extends AstNode
  20.  
  21.   def InputLine = rule { Sentence ~ EOI }
  22.  
  23.   def Sentence: Rule1[List[WordNode]] = rule { oneOrMore(Word) }
  24.   def Word: Rule1[WordNode] = rule { Word2 ~ WhiteSpace }
  25.   def Word2: Rule1[WordNode] = rule { oneOrMore(Character) ~> WordNode }
  26.   def Character = rule { "a" - "z" | "A" - "Z" }
  27.   def WhiteSpace: Rule0 = rule { zeroOrMore(anyOf(" \n\r\t\f")) }
  28.  
  29.   // Dont understand this
  30.   override implicit def toRule(string: String) =
  31.     if (string.endsWith(" "))
  32.       str(string.trim) ~ WhiteSpace
  33.     else
  34.       str(string)
  35.  
  36.   def parseBee(code: String) = {
  37.     val parsingResult = ReportingParseRunner(InputLine).run(code)
  38.     parsingResult.result match {
  39.       case Some(astRoot) => astRoot
  40.       case None => throw new ParsingException("Invalid Bee Language source:\n" +
  41.         ErrorUtils.printParseErrors(parsingResult))
  42.     }
  43.   }
  44.  
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement