package scala.dbc2.syntax import TokenVal._ import statement.AnyValueDef._ import scala.util.parsing.syntax.Tokens import scala.util.parsing.input.{Reader, Position} import java.lang.String object DBC2Tokens extends Tokens { case class DBC2Token(t: TokenValue, value: Option[AnyValue]) extends Token { def chars: String = value match { case None => t.toString case Some(v) => v.toString } override def toString = value match { case None => t.toString case Some(v) => t.toString + "(" + v + ")" } } class MyScanner(tokens: List[Token], totalTokens: Int) extends Reader[Token] { def first = tokens match { case Nil => ErrorToken("no more tokens") case x::xs => x } def rest = new MyScanner(tokens.tail, totalTokens) def pos = new Position { def line = 0 def column = totalTokens - tokens.size def lineContents: String = "" } def atEnd = tokens.isEmpty } implicit def token(t: TokenValue): DBC2Token = DBC2Token(t, None) implicit def token(value: AnyValue): DBC2Token = DBC2Token(anyValueToTokenValue(value), Some(value)) implicit def token(sym: Symbol): DBC2Token = DBC2Token(SYMBOL, Some(AnyValue(Some(sym.name), None))) }