RFC Errata
RFC 7405, "Case-Sensitive String Support in ABNF", December 2014
Source of RFC: IETF - NON WORKING GROUPArea Assignment: art
Errata ID: 5334
Status: Reported
Type: Technical
Publication Format(s) : TEXT
Reported By: YU HengChun
Date Reported: 2018-04-25
Section 2.2 says:
2.2. ABNF Definition of ABNF - char-val char-val = case-insensitive-string / case-sensitive-string case-insensitive-string = [ "%i" ] quoted-string case-sensitive-string = "%s" quoted-string quoted-string = DQUOTE *(%x20-21 / %x23-7E) DQUOTE ; quoted string of SP and VCHAR ; without DQUOTE
It should say:
2.2. ABNF Definition of ABNF - char-val char-val = case-insensitive-string / case-sensitive-string case-insensitive-string = DQUOTE *(%x20-21 / %x23-7E) DQUOTE ; quoted string of SP and VCHAR ; without DQUOTE case-sensitive-string = QUOTE *(%x20-26 / %x28-7E) QUOTE ; quoted string of SP and VCHAR ; without QUOTE QUOTE = %x27 ; '
Notes:
Use "%s' / '%i' hard to write. In addition to writing more characters, there are the following problems:
rule = (%s"if" / %s"elif") condition (%s"then" / LF)
Why not use single quotes directly?
rule = ('if' / 'elif') condition ('then' / LF)
Even if single quotation marks cannot be used, the workaround can be complicated:
rule = %s( "if" / "elif" ) condition (%s"then" / LF)