             throw ParseError.UnexpectedToken(errorMessage(tokenizer, expectedToken: Token.NUMERIC_LITERAL))
         }
         
-        if tokenizer.accept(.WHITE_SPACE) == nil {
-            throw ParseError.UnexpectedToken(errorMessage(tokenizer, expectedToken: Token.WHITE_SPACE))
+        if tokenizer.accept(.SINGLE_SPACE) == nil {
+            throw ParseError.UnexpectedToken(errorMessage(tokenizer, expectedToken: Token.SINGLE_SPACE))
         }
         
         if let token = tokenizer.accept(.NUMERIC_LITERAL) {

                throw ParseError.UnexpectedToken(errorMessage(tokenizer, expectedToken: Token.NUMERIC_LITERAL))
            }
        }
        
        return coordinate
    }

    private class func errorMessage(tokenizer: Tokenizer, expectedToken: Token) -> String {
        return "Unexpected token at line: \(tokenizer.line) column: \(tokenizer.column). Expected \(expectedToken) but found -> \(tokenizer.stringStream)"
    }
}

public enum ParseError : ErrorType  {
    case UnsupportedType(String)
    case UnexpectedToken(String)
    case MissingElement(String)
}

// Translated from BNF
private enum Token : String {
    case WHITE_SPACE                    = "[ \\t]+"
    case SINGLE_SPACE                   = " (?=[^ ])"
    case NEW_LINE                       = "[\\n|\\r]"
    case COMMA                          = ","
    case LEFT_PAREN                     = "\\("
