2013-03-07 76 views
0

我查看了EBNF here的ISO规范pdf(除了在ISO网站上看起来花钱的官方网站外,我找不到官方网站),并且我不太了解空白。EBNF在元标识符中的空白

有谁知道官方标准是否允许在元标识符空间?根据标准文档中的元标识符(8.1节),我会说不,但是如果您在同一个标​​准文档中查看同一个示例,它似乎在说是。

在在8.1该文件顶部的评论,这似乎是说,它正在使用自己定义EBNF。我感到困惑,这是行像这样:

meta identifier = letter, {letter | decimal digit} 
(* A <meta identifier> is the name of a 
syntactic element of the language being 
defined *); 

元标识应在自身,即元标识符,但据我所看到的,它不适合元标识符(信然任何数字或字母的数量)。

有谁知道发生了什么事?

回答

1

实际上,正式的ISO规格EBNF(ISO/IEC 14977:1996)可以自由地从ISO网站here下载。 这实际上元标识符定义如下:

meta identifier = letter, {meta identifier character}; 

meta identifier character = letter | decimal digit; 

它指的是4.14和4.15在该定义中。在那里它清楚地表明一个元标识符字符仅由字母和十进制数字组成。

这确实是奇怪的是,他们使用指定的EBNF EBNF确实允许在标识符空间。我始终认为EBNF允许在标识符中使用空格。这也是维基百科说什么(虽然语法有不完整的在其他方面):

identifier = letter , { letter | digit | " " } ; 

因此,也许他们在标准都忽略了这一点?或者我们都错过了一些东西。无论如何,我希望你现在可以弄清楚你有官方标准。

+0

对,我想我是在一个看起来像官方网站的网站,但实际上有所不同。但是,无论如何,这是令人困惑的,所以感谢澄清:) – matts1 2013-03-11 07:49:21

0

标准的第6条规定你的答案:

从6.1:

6.2至6.4定义一个非打印字符,如空格或新行对语法没有正式生效如果该字符在终端字符串或构成单个终端字符的字符对之外。

因此,本质上,白色空间被忽略。

8.1节将语法分解为4部分。

语法的第三部分限定从无间隙符号去除括号-文本 - 符号:元标识符在所述第三部分,其带有前缀下面的评论(我的粗体编辑)中所定义形成语法的

方式8.1作品是该部分的部分的1定义终端的字符和间隙,其被馈送到部分2,然后除去其中馈入部3其除去,其馈入部4的评论间隙分隔它建立你的语法。