码迷,mamicode.com
首页 > 其他好文 > 详细

利用Scala解析器组合子编写乘除法解析器

时间:2015-01-07 19:17:38      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:scala parser combinator

import scala.util.parsing.combinator.JavaTokenParsers
object ParserCombinator extends JavaTokenParsers {
  
  def main(args:Array[String]){
    
    val multiply:Parser[Double] = floatingPointNumber ~ rep(
      ("*" | "/") ~ floatingPointNumber ^^ {
        case "*" ~ (factor:String) => left:Double => left * factor.toDouble
        case "/" ~ (factor:String) => left:Double => left / factor.toDouble
      }
    ) ^^ {
      case (seed:String) ~ (fnList:List[Double=>Double]) => 
        fnList.foldLeft(seed.toDouble)((left, fn) => fn(left))
    }
    
    val result = this.parseAll(multiply, "2*4/8*5")
    if(result.successful){
      println(result.get)
    }
  }
}

本文出自 “Frank” 博客,请务必保留此出处http://zengfanhong.blog.51cto.com/8894077/1600167

利用Scala解析器组合子编写乘除法解析器

标签:scala parser combinator

原文地址:http://zengfanhong.blog.51cto.com/8894077/1600167

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!