Omit grouping parentheses. Our formal grammar doesn’t use grouping parentheses.
It doesn't explain why, just stating the fact. Can we change it or is it already deep in the Swift DNA?
This was an intentional decision when we started writing the formal grammar for Swift. The primary reason for our choice of language constructs in the formal grammar was to prevent individual production rules from becoming too complex. That's why we omitted operators for things like grouping and repetition. Especially when combined, these kinds of nesting can produce grammar that's very complex. We found that having to factor out and name groups of optional or repeated elements, and that having guidelines to name those things consistently, resulted in a grammar that's readable and made up of simple pieces.
Our choice of grammar came after a survey of how documentation describes the grammar a number of other languages — including C, C++, and Java, which tend to use a similar style to what TSPL uses, and also languages like Pascal, AppleScript, and Cobol that tend to be described in very different ways. Because the grammar is meant for people to read, not for parsing Swift, we use a language that makes use of different typographical styles rather than quoting — unlike the BNF grammars you might see in RFCs.
Using a different syntax is possible, but you'd need to make a strong case that either the current syntax is actively harmful, or that there's a significant improvement from the proposed one. Think along the lines of writing a Swift Evolution proposal that includes source-breaking changes.
Some of the design choices in the grammar itself are eyebrow-raising. "watchOS", "macCatalystApplicationExtension", "x86_64" and "arm64" as part of the grammar, seriously?!
There's a balance when writing the grammar between overproduction (rules that match invalid Swift code) and readability. The general goal is to minimize the places where the grammar overproduces, but to allow some overproduction where it's needed for readability. For example, the formal grammar for attributes enforces balanced ( and ) but doesn't actually enforce much structure inside the argument list, because encoding the grammar of each individual attribute would make the grammar very long and very hard to read — but it isn't generally valid to write arbitrary tokens there.
In this case, if I remember correctly, those are the list of things that are accepted by the compiler. (Swift has experimental/unofficial support for additional platforms, but those aren't included in this list. See also include/swift/AST/PlatformKinds.def in the compiler source code.) The grammar could just write "identifier" there, but that would overproduce. So we include the specific list here, because that provides useful signal to a programmer reading the grammar: These are the only things you should expect to write here.