5.3 静态语义规则

上下文无关语法不够强大,无法表达定义输入元素流是否形成可以评估的有效 ECMAScript 脚本或模块的所有规则。 在一些情况下,需要可以使用 ECMAScript 算法惯例或散文要求来表达的附加规则。 这样的规则总是与语法的生产相关联,并且被称为生产的静态语义。

静态语义规则具有名称,并且通常使用算法来定义。 命名的静态语义规则与语法生成相关联,并且具有多个替代定义的生产通常对于每个备选方案具有每个可应用的命名的静态语义规则的不同算法。

除非另有说明,否则本规范中的每个语法生成备选方案都隐含地具有名为 Contains 的静态语义规则的定义,该规则采用名为符号的参数,其值为包括相关联的生产的语法的终端或非终止符。 Contains 的默认定义是:

1.对于每个终止符和非终止符语法 symbol,sym,在这个生产的定义执行

  a.如果 sym 与 symbol 是相同的语法符号,则返回 true。
  b.如果 sym 是一个非终止符,那么

     i.让 contained 成为 Contains symbol 的 sym 结果
    ii.如果 contained 为 true,则返回 true。

2.返回 false。

上述定义被明确覆盖以用于特定的产生。

一种特殊类型的静态语义规则是早期错误规则。 早期错误规则定义与特定语法生成相关联的早期错误条件(参见16小节)。 大多数早期错误规则的评估在本说明书的算法中没有被显式调用。 在首次评估脚本或模块之前,一致性实现必须验证用于解析该脚本或模块的所有生成的早期错误规则。 如果违反任何早期错误规则,则脚本或模块无效,无法进行评估。

results matching ""

    No results matching ""