### Godot version

4.0

### System information

All OS/Hardware

### Issue description

Not sure if it's a bug / inconsistency or a willingness 😄

When writing numbers in GDScript, we can use `_` character to make number more readable for a human. Rules for this character differ depending on where it is used : before or in decimal part, making its usage inconsistent. 
- When use before decimal part, only an underscore can not follow another undersocre
- In decimal part, multiple underscores can be write without any complaint of tokenizer



### Steps to reproduce

Here is test functions to illustrate

```gdscript
func test_number_allowed_without_error() -> void:
    var a:int = 1_2_3_4_5_6
    var b:int = 123_456
    var c:int = 1.2_3_4_5_6
    var d:int = 1.2_____3_____4____5_____6
    var e:int = 1._2_3_4_5
    var f:int = 1.________23456

func test_number_not_allowed() -> void:
    var a:int = 1__2
    var b:int = 1__2.1__2
    var c:int = _1.23456
```

With a screen to show editor syntax errors

![image](https://user-images.githubusercontent.com/121614863/220851058-38439a3f-3ba8-40fa-9556-a0faf045c943.png)

### Minimal reproduction project

N/A
}
		char32_t ch = _peek();
		if (ch == 0x200E || ch == 0x200F || (ch >= 0x202A && ch <= 0x202E) || (ch >= 0x2066 && ch <= 0x2069)) {
			Token error = make_error("Invisible text direction control character present in the string, escape it (\"\\u" + String::num_int64(ch, 16) + "\") to avoid confusion.");
			error.start_column = column;
			error.leftmost_column = error.start_column;
			error.end_column = column + 1;
			error.rightmost_column = error.end_column;
			push_error(error);
		}
		if (ch == '\\') {
			
			_advance();
			if (_is_at_end()) {
				return make_error("Unterminated string.");
			}
			
			char32_t code = _peek();
			_advance();
			if (_is_at_end()) {
				return make_error("Unterminated string.");
			}
			char32_t escaped = 0;
			bool valid_escape = true;
			switch (code) {
				case 'a':
					escaped = '\a';
					break;
				case 'b':
					escaped = '\b';