Don't allow floats starting with a dot
diff --git a/lexer.go b/lexer.go
index 2593466..c4a2bd6 100644
--- a/lexer.go
+++ b/lexer.go
@@ -234,6 +234,10 @@
 			return lexNumber
 		}
 
+		if next == '.' {
+			return l.errorf("cannot start float with a dot")
+		}
+
 		if isSpace(next) {
 			l.ignore()
 		}
@@ -416,6 +420,9 @@
 			l.backup()
 			break
 		}
+		if point_seen && !digit_seen {
+			return l.errorf("cannot start float with a dot")
+		}
 	}
 
 	if !digit_seen {
diff --git a/parser.go b/parser.go
index f91e80c..ee5758a 100644
--- a/parser.go
+++ b/parser.go
@@ -141,6 +141,8 @@
 		return val
 	case tokenLeftBracket:
 		return parseArray(p)
+	case tokenError:
+		panic(tok.val)
 	}
 
 	panic("never reached")
diff --git a/parser_test.go b/parser_test.go
index 441c4e2..9beef36 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -210,6 +210,18 @@
 	}
 }
 
+func TestFloatsWithoutLeadingZeros(t *testing.T) {
+	_, err := Load("a = .42")
+	if err.Error() != "cannot start float with a dot" {
+		t.Error("Bad error message:", err.Error())
+	}
+
+	_, err = Load("a = -.42")
+	if err.Error() != "cannot start float with a dot" {
+		t.Error("Bad error message:", err.Error())
+	}
+}
+
 func TestMissingFile(t *testing.T) {
 	_, err := LoadFile("foo.toml")
 	if err.Error() != "open foo.toml: no such file or directory" {