|
Scala example source code file (Scanner.scala)
The Scala Scanner.scala source code/* __ *\ ** ________ ___ / / ___ Scala API ** ** / __/ __// _ | / / / _ | (c) 2002-2011, LAMP/EPFL ** ** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ ** ** /____/\___/_/ |_/____/_/ | | ** ** |/ ** \* */ package scala.xml package dtd /** Scanner for regexps (content models in DTD element declarations) * todo: cleanup */ class Scanner extends Tokens with parsing.TokenTests { final val ENDCH = '\u0000' var token:Int = END var value:String = _ private var it: Iterator[Char] = null private var c: Char = 'z' /** initializes the scanner on input s */ final def initScanner(s: String) { value = "" it = (s).iterator token = 1+END next nextToken } /** scans the next token */ final def nextToken() { if (token != END) token = readToken } // todo: see XML specification... probably isLetter,isDigit is fine final def isIdentChar = ( ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')); final def next() = if (it.hasNext) c = it.next else c = ENDCH final def acc(d: Char) { if (c == d) next else sys.error("expected '"+d+"' found '"+c+"' !"); } final def accS(ds: Seq[Char]) { ds foreach acc } final def readToken: Int = if (isSpace(c)) { while (isSpace(c)) c = it.next S } else c match { case '(' => next; LPAREN case ')' => next; RPAREN case ',' => next; COMMA case '*' => next; STAR case '+' => next; PLUS case '?' => next; OPT case '|' => next; CHOICE case '#' => next; accS( "PCDATA" ); TOKEN_PCDATA case ENDCH => END case _ => if (isNameStart(c)) name; // NAME else sys.error("unexpected character:" + c) } final def name = { val sb = new StringBuilder() do { sb.append(c); next } while (isNameChar(c)); value = sb.toString() NAME } } Other Scala examples (source code examples)Here is a short list of links related to this Scala Scanner.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.