base.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 77 行
SCALA
77 行
/* __ *\** ________ ___ / / ___ Scala API **** / __/ __// _ | / / / _ | (c) 2003-2007, LAMP/EPFL **** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **** /____/\___/_/ |_/____/_/ | | **** |/ **\* */// $Id: Base.scala 10648 2007-04-10 08:40:09Z michelou $package scala.util.regexp/** Basic regular expressions. * * @author Burak Emir * @version 1.0 */abstract class Base { type _regexpT <: RegExp abstract class RegExp { val isNullable: Boolean } /** Alt( R,R,R* ) */ case class Alt(rs: _regexpT*) extends RegExp { // check rs \in R,R,R* // @todo: flattening if ({ val it = rs.elements; !it.hasNext || {it.next; !it.hasNext }}) throw new SyntaxError("need at least 2 branches in Alt"); final val isNullable = { val it = rs.elements while (it.hasNext && it.next.isNullable) {} !it.hasNext } } case class Sequ(rs: _regexpT*) extends RegExp { // @todo: flattening // check rs \in R,R* if ({ val it = rs.elements; !it.hasNext }) throw new SyntaxError("need at least 1 item in Sequ") final val isNullable = { val it = rs.elements while (it.hasNext && it.next.isNullable) {} !it.hasNext } } case class Star(r: _regexpT) extends RegExp { final val isNullable = true } case object Eps extends RegExp { final val isNullable = true override def toString() = "Eps" } /** this class can be used to add meta information to regexps */ class Meta(r1: _regexpT) extends RegExp { final val isNullable = r1.isNullable def r = r1 } final def mkSequ(rs: _regexpT *): RegExp = if (!rs.elements.hasNext) Eps else Sequ(rs:_*)}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?