5.1.4 The Syntactic Grammar
ECMAScript的句法文法在条款11,12,13,14和15中定义。词法文法定义的ECMAScript记号作为该文法的终结符号。它定义了一组产生式,起始于两个可选的目标符号Script和Module,它们描述了记号序列如何组成句法正确的独立的ECMAScript程序组件。 当一个代码点流被解析成ECMASCript脚本(Script)或模块(Module)时,它首先通过反复使用词法文法转换成输入元素流;然后这个输入元素流再使用一次句法文法进行解析。如果输入元素流中的记号符号无法被解析成目标非终结符(Script或Module)的一个单一实例且没有更多记号剩下时,输入流句法上存在错误。
一个冒号“:”作为标点符号来区分句法文法的产生式。
条款12,13,14和15中表示的句法文法并没有完整的说明一个正确的SCMAScript脚本或模块可以接受的记号序列。一些额外的特定记号序列也可以被接受,如在序列的某些特定位置(如在断行符前)插入分号也满足文法的描述。此外,文法描述的某些记号序列不被认为是文法可接受的,如一个断行字符出现在“尴尬”的位置。
在某些情况下,为了避免模糊不清,句法文法使用泛化的产生式,这些产生式允许不能构成合法ECMAScript脚本或模块的记号序列。例如,该技术被用于对象字面量和对象解构模式。在这些情况下,提供了一个更严格的补充文法(supplemental grammar)来进一步限制可接受的记号序列。在特定的上下文中,当显示地指定时,输入元素对应的产生式会再次使用补充文法的目标符号进行解析。如果被一个表层文法(cover grammer)解析过的输入元素流中的记号符号无法被解析成对应的补充目标符号的一个单一实例且没有更多记号剩下时,输入流句法上存在错误。
Last updated