cue: fix number parsing

- allow 0. for floats
- allow old-school octal numbers (just too common)
- fix productions in spec.

Change-Id: Ifaf9bbc8f221c637875a26ab02d379865d4af151
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2164
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/doc/ref/spec.md b/doc/ref/spec.md
index 5263f29..0e3439b 100644
--- a/doc/ref/spec.md
+++ b/doc/ref/spec.md
@@ -293,14 +293,20 @@
 towards zero if it is not an integer.
 
 ```
-int_lit     = decimal_lit | octal_lit | binary_lit | hex_lit .
-decimals  = ( "0" … "9" ) { [ "_" ] decimal_digit } .
-decimal_lit = ( "1" … "9" ) { [ "_" ] decimal_digit } [ [ "." decimals ] multiplier ] |
-            "." decimals multiplier.
+int_lit     = decimal_lit | si_lit | octal_lit | binary_lit | hex_lit .
+decimal_lit = ( "1" … "9" ) { [ "_" ] decimal_digit } .
+decimals    = decimal_digit { [ "_" ] decimal_digit } .
+si_it       = decimals [ "." decimals ] multiplier |
+              "." decimals  multiplier .
 binary_lit  = "0b" binary_digit { binary_digit } .
 hex_lit     = "0" ( "x" | "X" ) hex_digit { [ "_" ] hex_digit } .
-octal_lit   = "0o" octal_digit { [ "_" ] octal_digit } .
+octal_lit   = "0" [ "o" ] octal_digit { [ "_" ] octal_digit } .
 multiplier  = ( "K" | "M" | "G" | "T" | "P" | "E" | "Y" | "Z" ) [ "i" ]
+
+float_lit   = decimals "." [ decimals ] [ exponent ] |
+              decimals exponent |
+              "." decimals [ exponent ].
+exponent  = ( "e" | "E" ) [ "+" | "-" ] decimals .
 ```
 
 ```