Skip to content

Instantly share code, notes, and snippets.

@ble
Last active January 2, 2016 12:59
Show Gist options
  • Save ble/8306667 to your computer and use it in GitHub Desktop.
Save ble/8306667 to your computer and use it in GitHub Desktop.
Simple parser combinator example
import scala.util.parsing.combinator._
import scala.util.parsing.input.CharSequenceReader
object Simple {
trait Expression
case class Add(lhs: Expression, rhs: Expression) extends Expression
case class Mul(lhs: Expression, rhs: Expression) extends Expression
case class Num(v: Double) extends Expression
object parseUtil extends JavaTokenParsers
import parseUtil._
def expr = term
def term = factor.*("+" ^^^ ((l: Expression, r: Expression) => Add(l,r)))
def factor = primary.*("*" ^^^ ((l: Expression, r: Expression) => Mul(l,r)))
def primary: Parser[Expression] = floatingPointNumber ^^ (x => Num(x.toDouble))
}
val expression = Simple.expr(new CharSequenceReader("3 * 6 + 1 * 2"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment