Fix some fixed-point literal lexing issues (#1914)

- No fractional digits are necessary after the decimal point,
  e.g. `42.` is valid instead of `42.0`
- Error messages refer to "fixed-point" not "integer" constants
- Test more carefully for lexing unrelated to underscores
This commit is contained in:
Rangi
2026-04-04 13:41:45 -04:00
committed by GitHub
parent 25bf0e9e2c
commit ede9405daf
6 changed files with 60 additions and 6 deletions
+15
View File
@@ -0,0 +1,15 @@
; good
println 3.14
println 42.
println 12_34.56_78
println 12.34_q.5
println 1_2.3_4_q15
println 1.q2
; bad
println 12.34q0
println 12.34q_15
println 12.34q1_5
println 1_.2
println 1._2
println 1.2q
+15
View File
@@ -0,0 +1,15 @@
error: Invalid fixed-point constant, no significant digits after 'q'
at fixed-point-syntax.asm(10)
error: Invalid fixed-point constant, no significant digits after 'q'
at fixed-point-syntax.asm(11)
error: syntax error, unexpected symbol
at fixed-point-syntax.asm(11)
error: syntax error, unexpected symbol
at fixed-point-syntax.asm(12)
error: Invalid integer constant, trailing '_'
at fixed-point-syntax.asm(13)
error: Invalid fixed-point constant, '_' after '.'
at fixed-point-syntax.asm(14)
error: Invalid fixed-point constant, no significant digits after 'q'
at fixed-point-syntax.asm(15)
Assembly aborted with 7 errors
+10
View File
@@ -0,0 +1,10 @@
$323D7
$2A0000
$4D2915B
$18B
$62B85
$4
$C570A
$13333
$13333
$13333
+4
View File
@@ -30,3 +30,7 @@ println 123.456_
; bad ('_' next to '.')
println 1_.618
println 2._718
; bad ('_' after 'q')
println 1q_2
println 1q2_3
+8 -4
View File
@@ -8,9 +8,9 @@ error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(17)
error: Invalid integer constant, '_' after another '_'
at invalid-underscore.asm(18)
error: Invalid integer constant, '_' after another '_'
error: Invalid fixed-point constant, '_' after another '_'
at invalid-underscore.asm(19)
error: Invalid integer constant, '_' after another '_'
error: Invalid fixed-point constant, '_' after another '_'
at invalid-underscore.asm(20)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(23)
@@ -26,6 +26,10 @@ error: Invalid fixed-point constant, trailing '_'
at invalid-underscore.asm(28)
error: Invalid integer constant, trailing '_'
at invalid-underscore.asm(31)
error: Invalid integer constant, '_' after another '_'
error: Invalid fixed-point constant, '_' after '.'
at invalid-underscore.asm(32)
Assembly aborted with 15 errors
error: syntax error, unexpected symbol
at invalid-underscore.asm(35)
error: syntax error, unexpected symbol
at invalid-underscore.asm(36)
Assembly aborted with 17 errors