The following characters cannot be used anywhere in a bare Identifier:
Any codepoint with hexadecimal value 0x20 or below.
Any codepoint with hexadecimal value higher than 0x10FFFF.
Any of \/(){}<>;[]=,"
The formal grammar says that
identifier-char := unicode - linespace - [\/(){}<>;[]=,"]
linespace := newline | ws | single-line-comment
newline := See Table (All line-break white_space)
unicode-space := See Table (All White_Space unicode characters which are not `newline`)
This means that the formal grammar excludes 0x09, 0x0A, 0x0C, 0x0D, and 0x20, but allows the other codepoints < 0x20.
The prose also doesn't specify that all whitespace is non-identifier characters, though this is clearly implied, and doesn't matter as much as it does in the grammar formalization.
The prose says that
The formal grammar says that
This means that the formal grammar excludes 0x09, 0x0A, 0x0C, 0x0D, and 0x20, but allows the other codepoints < 0x20.
The prose also doesn't specify that all whitespace is non-identifier characters, though this is clearly implied, and doesn't matter as much as it does in the grammar formalization.