我想知道在EBNF中,是否有任何方法可以事先知道一个字符是其他字符还是空格字符?现在,我已经在源字符串的每个位置上列出了每一个可能的变体,但要尝试所有可能的解释让我有点头疼,尤其是如果我必须尝试所有可能的产生规则,然后才知道它是其他字符还是空间字符。
为了澄清:空格,‘',是空格字符和其他字符,如果你看了ISO/IEC 14977,我想知道是否有可能检查哪一个比蛮横地强迫每个源字符串的解释更容易。
2018-01-06:也许6.1就能解决歧义问题?文本含蓄地说,间隙分隔符比终端字符串之外的其他字符具有更高的优先级,因为否则它们将成为语法的一部分?或者它定义了一个语法的等价类,模数空间字符,或者类似的.
发布于 2018-11-21 01:35:58
我想知道在EBNF中,是否有任何方法可以事先知道一个字符是其他字符还是空格字符?
是的,other-character (包括空格)可能出现在terminal-string (4.17,4.18)、special-sequence (4.20)或bracketed-textual-comment (6.6)中。除此之外,space是gap-separator (6.4,7.6)。
这可以通过替换不同的other-character来实现,比如#代替space。在提到的情况中:terminal-string、special-sequence和bracketed-textual-comment;对EBNF的自动化处理没有任何有效的更改--尽管结果是不可取的。但是,在#中替换space将显示为EBNF自动处理中的错误。
也许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“扩展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。
https://stackoverflow.com/questions/47934110
复制相似问题