从XML规范中解读EBNF

时间:2014-04-11 02:12:04

标签: ebnf

看看下面的定义。究竟应该定义什么?根据EBNF specification,括号[]定义了一个可选项,那么为什么需要*?这不是多余的(因为它意味着重复零次或多次)?

第二件事是,你如何解释括号内的部分? -是排除指标,因此它意味着排除括号内的任何项目,或排除所有三项的序列(来自^<&的零或更多,后跟]]>,后跟来自^<&)的零或更多?

CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

或者我完全弄错了,这是EBNF以外的其他内容吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

XML规范并未严格使用ISO规定的EBNF。如果查看XML规范的Section 6,它会定义使用的符号。方括号以类似正则表达式的方式使用,而不是表示语法的可选元素;用于排除的-将括号内的组排除在整个范围内。因此,您引用的行表示如下:

  • [^<&] - 任何左尖括号(<)或&符号(&
  • 的字符
  • [^<&]* - 零个或多个不是左尖括号或&符号的字符
  • [^<&]* - ([^<&]* ']]>' [^<&]*) - 零个或多个字符不是左尖括号或&符号,并且在整个序列中的任何位置都不包含特定的字符序列]]>