8288分类目录 8288分类目录 8288分类目录
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

使用Scala写了个简单的Scheme解释器

来源:本站原创 浏览:141次 时间:2021-09-11

  大家好,我使用scala实现了个简单的解释器,能够实现整数的加减乘除。我是照着快学 19章的 3 - 4 * 5 这个例子做的。思路也是按照它的来的。
  大概是这样 1)首先定义 factor 是整数
                 2)那么 term : (+ factor factor ...) 就是一个完整的表达式了
                3)   那么 expr : (+  term factor ...) 等就是 嵌套的表达式
代码如下:

import scala.util.parsing.combinator._class ExprParser extends RegexParsers {val number = "[0-9]+".r val op = "+" | "-" | "*" | "/"    def expr :Parser[Int] = "(" ~ opt(op) ~ rep(term | factor) ~ ")" ^^ {      case _ ~ _ ~ List() ~ _ => 0      case _ ~ Some("+") ~ r ~ _ => r.reduce(_+_)      case _ ~ Some("-") ~ r ~ _ => r.reduce(_-_)      case _ ~ Some("*") ~ r ~ _ => r.reduce(_*_)      case _ ~ Some("/") ~ r ~ _ => r.reduce(_/_)    }     def term :Parser[Int] = "(" ~ opt(����,����op) ~ rep(factor) ~ ")" ^^ {      case _ ~ Some("+") ~ r ~ _ => r.reduce(_+_)      case _ ~ Some("-") ~ r ~ _ => r.reduce(_-_)      case _ ~ Some("*") ~ r ~ _ => r.reduce(_*_)      case _ ~ Some("/") ~ r ~ _ => r.reduce(_/_) }     def factor:Parser[Int] = number ^^ {_.toInt}  }object Scheme extends App{  val parser = new ExprParser  def process():Unit = {    val read = readLine(">>>")    read match {      case "exit" => ()      case  _     =>         val result = parser.parseAll(parser.expr, read)        if (result.successful)           println(result.get)        process()    }  }  println("enter exit to break")  process()}

程序运行效果如下图:

  颇有成就感 ,而且我认为我这个例子比3-4*5更好玩一些。
  虽然这只是一个简单的练习,但是感觉如果我能力上去的话,是不是就能写个功能完备的解释器了
  哈哈,期待....

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net