5.1.4 句法语法
ECMAScript 的语法语法在第 11、12、13、14和15节中给出。该语法具有由词法语法定义的ECMAScript tokens 作为其终止符号(5.1.2)。 它定义了一组生成,从两个替代目标符号 Script 和 Module 开始,描述如何形成 tokens 的序列形成 ECMAScript 程序的语法正确的独立组件。
当代码点流将被解析为 ECMAScript 脚本或模块时,首先通过重复应用词法语法将其转换为输入元素流;这个输入元素流然后由语法语法的单个应用解析。 如果输入元素流中的标记不能被解析为目标非终结符(Script 或 Module)的单个实例,而没有留下标记,则输入流在语法上是错误的。
句法语法的产生通过仅具有一个冒号“:”作为标点来区分。
第 12、13、14和15 节中提出的句法语法不是对哪些 tokens 序列被接受为正确的 ECMAScript 脚本或模块的完整描述。 还接受某些附加的 tokens 序列,即如果在某些地方(例如行终止符字符之前)将序号添加到分号,则将由语法描述的那些附加 tokens 序列。 此外,如果行终止符字符出现在某些“尴尬”的地方,则由语法描述的某些 tokens 序列不被认为是可接受的。
在某些情况下,为了避免歧义,句法语法使用允许不形成有效 ECMAScript 脚本或模块的令牌序列的广义生成。 例如,此技术用于对象字面量和对象解构模式。 在这种情况下,提供更限制性的补充语法,其进一步限制可接受的 tokens 序列。 在某些上下文中,当被明确指定时,使用补充语法的目标符号来再次解析对应于这种生产的输入元素。 如果由覆盖语法解析的输入元素流中的令牌不能被解析为相应的补充目标符号的单个实例,而没有剩余 tokens,则输入流在语法上是错误的。