Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.bee
- import org.parboiled.scala._
- import java.lang.String
- import org.parboiled.errors.{ErrorUtils, ParsingException}
- /**
- * Copyright (C) 2013 Orsa Studio
- */
- object BeeParser {
- def main(args: Array[String]): Unit = {
- val parser = new BeeParser
- println ( parser.parseBee("one two three four") )
- }
- }
- class BeeParser extends Parser {
- sealed abstract class AstNode
- case class WordNode(value: String) extends AstNode
- def InputLine = rule { Sentence ~ EOI }
- def Sentence: Rule1[List[WordNode]] = rule { oneOrMore(Word) }
- def Word: Rule1[WordNode] = rule { Word2 ~ WhiteSpace }
- def Word2: Rule1[WordNode] = rule { oneOrMore(Character) ~> WordNode }
- def Character = rule { "a" - "z" | "A" - "Z" }
- def WhiteSpace: Rule0 = rule { zeroOrMore(anyOf(" \n\r\t\f")) }
- // Dont understand this
- override implicit def toRule(string: String) =
- if (string.endsWith(" "))
- str(string.trim) ~ WhiteSpace
- else
- str(string)
- def parseBee(code: String) = {
- val parsingResult = ReportingParseRunner(InputLine).run(code)
- parsingResult.result match {
- case Some(astRoot) => astRoot
- case None => throw new ParsingException("Invalid Bee Language source:\n" +
- ErrorUtils.printParseErrors(parsingResult))
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement