diff --git a/spec/formatting.md b/spec/formatting.md index ba6d83a7e4..4f4c291a63 100644 --- a/spec/formatting.md +++ b/spec/formatting.md @@ -245,8 +245,6 @@ The result of resolving _option_ values is a mapping of string identifiers to va For each _option_: - Resolve the _identifier_ of the _option_. -- If the _option_'s _identifier_ already exists in the resolved mapping of _options_, - emit a Duplicate Option Name error. - If the _option_'s right-hand side successfully resolves to a value, bind the _identifier_ of the _option_ to the resolved value in the mapping. - Otherwise, bind the _identifier_ of the _option_ to an unresolved value in the mapping. diff --git a/spec/syntax.md b/spec/syntax.md index 96af226216..6374db7f72 100644 --- a/spec/syntax.md +++ b/spec/syntax.md @@ -89,7 +89,8 @@ Attempting to parse a _message_ that is not _well-formed_ will result in a _Synt A _message_ is **_valid_** if it is _well-formed_ and **also** meets the additional content restrictions -and semantic requirements about its structure defined below. +and semantic requirements about its structure defined below for +_declarations_, _matcher_ and _options_. Attempting to parse a _message_ that is not _valid_ will result in a _Data Model Error_. ## The Message @@ -535,7 +536,10 @@ optional whitespace. The value of an _option_ can be either a _literal_ or a _variable_. Multiple _options_ are permitted in an _annotation_. -Each _option_ is separated by whitespace. +_Options_ are separated from the preceding _function_ _identifier_ +and from each other by whitespace. +Each _option_'s _identifier_ MUST be unique within the _annotation_: +an _annotation_ with duplicate _option_ _identifiers_ is not valid. ```abnf option = identifier [s] "=" [s] (literal / variable)