Skip to content

Commit

Permalink
Add floating point literal scientific notation without dot "." (#57)
Browse files Browse the repository at this point in the history
* Add float scientific notation without dot

* Add tests for BigFloat and Hex number types
  • Loading branch information
mateodif authored Nov 7, 2023
1 parent 646b6e0 commit 39017ef
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 5 deletions.
16 changes: 11 additions & 5 deletions pkg/reader/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -1014,9 +1014,10 @@ func (r *Reader) readSymbolicValue() (interface{}, error) {
var (
numPrefixRegex = regexp.MustCompile(`^[-+]?([0-9]+|[1-9]+r)`)
radixRegex = regexp.MustCompile(`^[-+]?([1-9]+)r(\d(\d|[a-zA-Z])*N?)$`)
intRegex = regexp.MustCompile(`^[-+]?\d(\d|[a-fA-F])*N?$`)
intRegex = regexp.MustCompile(`^[-+]?\d+N?$`)
ratioRegex = regexp.MustCompile(`^[-+]?\d+\/\d+$`)
hexRegex = regexp.MustCompile(`^[-+]?0[xX]([a-fA-F]|\d)*N?$`)
floatRegex = regexp.MustCompile(`^[-+]?(\d+\.\d*|\.\d+)([eE][-+]?\d+)?|[-+]?(\d+)([eE][-+]?\d+)$`)
)

func isValidNumberCharacter(rn rune) bool {
Expand Down Expand Up @@ -1110,12 +1111,17 @@ func (r *Reader) readNumber(numStr string) (interface{}, error) {
return bd, nil
}

num, err := strconv.ParseFloat(numStr, 64)
if err != nil {
return nil, r.error("invalid number: %s", numStr)
if floatRegex.MatchString(numStr) {
num, err := strconv.ParseFloat(numStr, 64)
if err != nil {
return nil, r.error("invalid number: %s", numStr)
}

return num, nil
}

return num, nil
return nil, r.error("invalid number: %s", numStr)

}

func (r *Reader) readSymbol() (ret interface{}, retErr error) {
Expand Down
1 change: 1 addition & 0 deletions pkg/reader/testdata/reader/bigfloat00.glj
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
0M
2.0M
1 change: 1 addition & 0 deletions pkg/reader/testdata/reader/bigfloat00.out
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
0M
2M
4 changes: 4 additions & 0 deletions pkg/reader/testdata/reader/float00.glj
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1E10
12E3
12E-3
1.35e-12
4 changes: 4 additions & 0 deletions pkg/reader/testdata/reader/float00.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
10000000000.0
12000.0
0.012
0.00000000000135
2 changes: 2 additions & 0 deletions pkg/reader/testdata/reader/hex00.glj
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
0x123
010
2 changes: 2 additions & 0 deletions pkg/reader/testdata/reader/hex00.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
291
8

0 comments on commit 39017ef

Please sign in to comment.