EBNF - 其他字符或 space 字符?

EBNF - other character or space character?

我想知道在EBNF中有没有办法预先知道一个字符是其他字符还是space字符?现在我已经对源字符串中每个位置的每个可能的变体进行了词法分析,但是不得不尝试所有可能的解释让我有点头疼,特别是如果我必须在知道它是否是另一个之前也必须尝试所有可能的生产规则字符或 space 个字符。

澄清一下:spacebar, ' ', 既是 space 字符又是其他字符,如果在 ISO/IEC 14977 中查找,我想知道是否可以检查哪个比暴力破解源字符串的所有可能解释更容易。

2018-01-06: 也许6.1可以解决歧义?文本隐含地表示间隙分隔符比终端字符串外的其他字符具有更高的优先级,否则它们将成为语法的一部分?或者它可能定义语法的等价 class,模数 space 字符,或类似的东西...

I wonder if there is any way to know if a character is an other character or space character beforehand in EBNF?

是的,other-character(包括space)可能出现在terminal-string(4.17、4.18)、special-sequence(4.20)或bracketed-textual-comment (6.6)。除此之外,spacegap-separator (6.4, 7.6).

这可以通过替换不同的 other-character 来看出,例如 # 替换 space。在提到的情况下:terminal-stringspecial-sequencebracketed-textual-comment; EBNF 的自动处理没有有效的改变——尽管结果并不理想。但是,在 gap-separator 中用 # 替换 space 将在 EBNF 的自动处理中显示为错误。

Perhaps the ambiguity can be resolved by 6.1?

否,6.1 表达了一种意图,但没有定义或规则。

考虑到 6.2 定义 terminal-character 以包含 other-character。这意味着 #space 中的每一个都是 terminal character。在 6.3 中,terminal-character 是一个 gap-free-symbol,但 # 与 6.2 中的其他符号不同,在标准中没有任何意义。此外,在 6.3 和 6.4 中,space 既是 gap-free-symbol 又是 gap-separator。 6.3 中包含 terminal-character 似乎是标准中的缺陷,但不是唯一的缺陷。

在 8.1 中,"The syntax of Extended BNF",存在一些缺陷。

6.5 中未定义以下内容:

(* see 6.5 *) syntax 
  = (gap separator}, 
    gap free symbol, {gap separator}, 
    {gap free symbol, {gap separator}}; 

以下没有 6.9:

(* see 6.9 *) syntax 
  = {bracketed textual comment}, 
    commentless symbol, 
    {bracketed textual comment}, 
    {commentless symbol, 
    {bracketed textual comment)}; 

对 6.6 到 6.8 的引用编号不正确,应分别为 6.5 到 6.7。