### 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
static_assert(keyword_length >= MIN_KEYWORD_LENGTH, "There's a keyword shorter than the defined minimum length"); \
		if (keyword_length == len && name == keyword) {                                                                   \
			return make_token(token_type);                                                                                \
		}                                                                                                                 \
	}
	
	switch (_start[0]) {
		default:
			KEYWORDS(KEYWORD_GROUP_CASE, KEYWORD)
			break;
	}
	
	if (len == 4) {
		if (name == "true") {
			return make_literal(true);
		} else if (name == "null") {
			return make_literal(Variant());
		}
	} else if (len == 5) {
		if (name == "false") {
			return make_literal(false);
		}
	}
	
	Token id = make_identifier(name);
#ifdef DEBUG_ENABLED
	
	if (!only_ascii && TS->has_feature(TextServer::FEATURE_UNICODE_SECURITY)) {
		int64_t confusable = TS->is_confusable(name, keyword_list);
		if (confusable >= 0) {