⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arithmeticparser.scala

📁 JAVA 语言的函数式编程扩展
💻 SCALA
字号:
/*                     __                                               *\**     ________ ___   / /  ___     Scala API                            ****    / __/ __// _ | / /  / _ |    (c) 2006-2007, LAMP/EPFL             ****  __\ \/ /__/ __ |/ /__/ __ |                                         **** /____/\___/_/ |_/____/_/ | |                                         ****                          |/                                          **\*                                                                      */package examples.parsingimport scala.util.parsing.combinator.lexical.StdLexicalimport scala.util.parsing.combinator.syntactical.StdTokenParsers/** Parse and evaluate a numeric expression as a sequence of terms, separated by + or - *   a term is a sequence of factors, separated by * or / *   a factor is a parenthesized expression or a number * * @author Adriaan Moors  */ object arithmeticParser extends StdTokenParsers {     type Tokens = StdLexical ; val lexical = new StdLexical  lexical.delimiters ++= List("(", ")", "+", "-", "*", "/")  lazy val expr =   term*("+" ^^^ {(x: int, y: int) => x + y} | "-" ^^^ {(x: int, y: int) => x - y})  lazy val term = factor*("*" ^^^ {(x: int, y: int) => x * y} | "/" ^^^ {(x: int, y: int) => x / y})  lazy val factor: Parser[int] = "(" ~> expr <~ ")" | numericLit ^^ (_.toInt)    def main(args: Array[String]) {    println(      if (args.length == 1) {        expr(new lexical.Scanner(args(0)))      }      else        "usage: scala examples.parsing.arithmeticParser <expr-string>"    )  }}object arithmeticParserDesugared extends StdTokenParsers {     type Tokens = StdLexical ; val lexical = new StdLexical  lexical.delimiters ++= List("(", ")", "+", "-", "*", "/")  lazy val expr = chainl1(term, (keyword("+").^^^{(x: int, y: int) => x + y}).|(keyword("-").^^^{(x: int, y: int) => x - y}))  lazy val term = chainl1(factor, (keyword("*").^^^{(x: int, y: int) => x * y}).|(keyword("/").^^^{(x: int, y: int) => x / y}))  lazy val factor: Parser[int] = keyword("(").~>(expr.<~(keyword(")"))).|(numericLit.^^(x => x.toInt))       def main(args: Array[String]) {    println(      if (args.length == 1) {        expr(new lexical.Scanner(args(0)))      }      else        "usage: scala examples.parsing.arithmeticParser <expr-string>"    )  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -