From 9642f1be87f14f4d3a78dab2c59c93b617913cf3 Mon Sep 17 00:00:00 2001 From: Jelle Besseling Date: Mon, 25 Apr 2022 15:14:33 +0200 Subject: [PATCH] Add more about the hyphen character in identifiers This caused confusion for me when making my implementation as explained in: https://github.com/kdl-org/kdl/discussions/200#discussioncomment-2628423 The exact rules in the full grammar are very precise but this adds some explicit information in the prose section --- SPEC.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/SPEC.md b/SPEC.md index b6e3711..29f17de 100644 --- a/SPEC.md +++ b/SPEC.md @@ -93,7 +93,10 @@ A bare Identifier is composed of any Unicode codepoint other than [non-initial characters](#non-initial-characters), followed by any number of Unicode codepoints other than [non-identifier characters](#non-identifier-characters), so long as this doesn't produce something confusable for a [Number](#number), -[Boolean](#boolean), or [Null](#null). +[Boolean](#boolean), or [Null](#null). For example, both a [Number](#number) +and an Identifier can start with `-`, but when an Identifier starts with `-` +the second character cannot be a digit. This is precicely specified in the +[Full Grammar](#full-grammar) below. Identifiers are terminated by [Whitespace](#whitespace) or [Newlines](#newline). @@ -106,6 +109,11 @@ The following characters cannot be the first character in a bare * Any decimal digit (0-9) * Any [non-identifier characters](#non-identifier-characters) +Be aware that the `-` character can only be used as an initial +character if the second character is not a digit. This allows +identifiers to look like `--this`, and removes the ambiguity +of having an identifier look like a negative number. + ### Non-identifier characters The following characters cannot be used anywhere in a bare