       } while si < len
   }
 
+  func parseTokens(fn: (token: LexerToken) throws -> Void) throws {
+    try parse() { tt in
+      try fn(token: CommonToken(bytes: self.stream.bytes,
+            startIndex: self.stream.startIndex,
+            endIndex: self.stream.currentIndex,
+            type: tt))
+    }
+  }
+
   public var description: String {
     return "CommonLexer(status: \(status))"
   }


  func parseTokenStrings(
      fn: (type: TokenType, string: String) throws -> Void) throws

}


      throws {
    try parse() { tt in
      if let s = self.stream.currentTokenString {
        try fn(type: tt, string: s)
      } else {
        throw CommonLexerError.String
      }
