Skip to content

Commit 933675d

Browse files
committed
number: hex literal and decimal
1 parent 14e7605 commit 933675d

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

grammar.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1371,9 +1371,10 @@ module.exports = grammar({
13711371
extension_identifier: $ => /[a-zA-Z0-9_\.]+/,
13721372

13731373
number: $ => {
1374+
// OCaml: https://github.com/tree-sitter/tree-sitter-ocaml/blob/f1106bf834703f1f2f795da1a3b5f8f40174ffcc/ocaml/grammar.js#L26
13741375
const hex_literal = seq(
1375-
choice('0x', '0X'),
1376-
/[\da-fA-F](_?[\da-fA-F])*/
1376+
optional(choice('-', '+')),
1377+
/0[xX][0-9A-Fa-f][0-9A-Fa-f_]*(\.[0-9A-Fa-f_]*)?([pP][+\-]?[0-9][0-9_]*)?[g-zG-Z]?/
13771378
)
13781379

13791380
const decimal_digits = /\d(_?\d)*/
@@ -1387,8 +1388,8 @@ module.exports = grammar({
13871388
const bigint_literal = seq(choice(hex_literal, binary_literal, octal_literal, decimal_digits), 'n')
13881389

13891390
const decimal_integer_literal = choice(
1390-
'0',
1391-
seq(optional('0'), /[1-9]/, optional(seq(optional('_'), decimal_digits)))
1391+
repeat('0'),
1392+
seq(repeat('0'), /[1-9]/, optional(seq(optional('_'), decimal_digits)))
13921393
)
13931394

13941395
const decimal_literal = seq(

test/corpus/literals.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,24 @@ Numbers
4242
0o1234L
4343
10l
4444
0xffffffffl
45+
-0x3.p+1
46+
0x1p2047
47+
-0x1p2047
48+
0x1.2p2047
49+
0x1p-1022
50+
0x0.0000_0000_0000_1p-1022
51+
0x1p-52
52+
0x1.0000_0000_0000_1
53+
0x1p-1023
54+
0xffffp0
55+
00007.0
56+
02e3
57+
0000.2
58+
00.
59+
000.
60+
01.
61+
001.
62+
002e3
4563

4664
---
4765

@@ -72,6 +90,24 @@ Numbers
7290
(expression_statement (number))
7391
(expression_statement (number))
7492
(expression_statement (number))
93+
(expression_statement (number))
94+
(expression_statement (number))
95+
(expression_statement (number))
96+
(expression_statement (number))
97+
(expression_statement (number))
98+
(expression_statement (number))
99+
(expression_statement (number))
100+
(expression_statement (number))
101+
(expression_statement (number))
102+
(expression_statement (number))
103+
(expression_statement (number))
104+
(expression_statement (number))
105+
(expression_statement (number))
106+
(expression_statement (number))
107+
(expression_statement (number))
108+
(expression_statement (number))
109+
(expression_statement (number))
110+
(expression_statement (number))
75111
(expression_statement (number)))
76112

77113
==========================================

0 commit comments

Comments
 (0)