diff --git a/query-languages/m/m-spec-consolidated-grammar.md b/query-languages/m/m-spec-consolidated-grammar.md
index b812907e..5f8bb21d 100644
--- a/query-languages/m/m-spec-consolidated-grammar.md
+++ b/query-languages/m/m-spec-consolidated-grammar.md
@@ -169,15 +169,6 @@ identifier-part-character:
connecting-character
combining-character
formatting-character
-generalized-identifier:
- generalized-identifier-part
- generalized-identifier_ separated only by blanks (`U+0020`) _generalized-identifier-part
-generalized-identifier-part:
- generalized-identifier-segment
- decimal-digit-character generalized-identifier-segment
-generalized-identifier-segment:
- keyword-or-identifier
- keyword-or-identifier dot-character keyword-or-identifier
dot-character:_
`.` (`U+002E`)
_underscore-character:_
@@ -385,8 +376,13 @@ _field-list:
field:
field-name_ `=` _expression
field-name:
+ identifier
+ quoted-identifier
generalized-identifier
- quoted-identifier_
+generalized-identifier:_
+ The range of text spanned by a sequence of one or more tokens, other than `=`, `,` or `]`,
+ but only if that text complies with the generalized identifier grammar.
+ (This grammar token is contextual; it is only relevant in the context of when a `field-name` is expected.)
#### Item access expression
@@ -607,3 +603,34 @@ any-literal:
number-literal
text-literal
null-literal_
+
+
+## Generalized identifer grammar
+
+Compliance with this grammar can be validated using the following regular expression:
+````
+(?x)^
+# generalized-identifier-always-valid-character
+[(\p{L})|(\p{Nl})|(\p{Nd})|(\p{Mn})|(\p{Mc})|(\p{Pc})(\p{Cf})]
+
+# (generalized-identifier-inner-valid-segment* period? generalized-identifier-always-valid-character)?
+(?:
+ # generalized-identifier-inner-valid-segment
+ (?:.?[(\p{L})|(\p{Nl})|(\p{Nd})|(\p{Mn})|(\p{Mc})|(\p{Pc})(\p{Cf})\s])*
+
+ # period? generalized-identifier-always-valid-character
+ .?[(\p{L})|(\p{Nl})|(\p{Nd})|(\p{Mn})|(\p{Mc})|(\p{Pc})(\p{Cf})]
+)?
+$
+````
+
+_space:_
+ Space character (`U+0020`)
+_period:_
+ Period character (`U+002E`))
+_generalized-identifier-always-valid-character_:
+ Any character in the following Unicode classes: Lu (Uppercase Letter), Ll (Lowercase Letter), Lt (Titlecase Letter), Lm (Modifier Letter), Lo (Other Letter), Nl (Letter Number), Nd (Decimal Number), Mn (Nonspacing Mark), Mc (Spacing Mark), Pc (Connector Punctuation), Cf (Format)
+_generalized-identifier-inner-valid-segment:
+ period? (generalized-identifier-always-valid-character | space)
+generalized-identifier-syntax:
+ generalized-identifier-always-valid-character (generalized-identifier-inner-valid-segment* period? generalized-identifier-always-valid-character)?_