 
     for token in l
     {
-      print(token.type, token.content.literalString)
-    }
-}
+      print("\(token.line),\(token.column) \(token.type): \(token.content.literalString)")
+    }
+}

    let content: String
    let line: Int
    let column: Int
    let index: String.CharacterView.Index
}

class Lexer : Sequence
{
  typealias Index = String.CharacterView.Index

  var line = 1
  var column = 1
  var source : String
  var index : Index

  var nextChar : Character?
  {
    get
    {
      if self.index == self.source.endIndex
      {
        return nil
      }
      let nextIndex = self.source.characters.index(after: self.index)
      if nextIndex == self.source.endIndex
      {
        return nil
      }
      return self.source[nextIndex]
    }
  }

  var currentChar : Character?
  {
    get
    {
      if self.index == self.source.endIndex
      {
        return nil
      }
      return self.source[self.index]
    }
  }

  init(_ source: String)
  {
    self.source = source
    self.index = source.startIndex
  }

  func makeIterator() -> AnyIterator<Token> {
    self.line = 1
    self.column = 1
    self.index = self.source.startIndex
    var lastType : TokenType = .Unknown

    return AnyIterator {

          default:
            return String($0)
        }
      }.joined(separator: "") + "\""
    }
  }
}
