''<b id="Program">Program</b>'' : ''{{toanchor|SourceElements}}''<sub>opt</sub>
''<b id="SourceElements">SourceElements</b>'' : ''{{toanchor|SourceElement}}'' ''{{toanchor|SourceElements}}'' ''{{toanchor|SourceElement}}''
''<b id="SourceElement">SourceElement</b>'' : ''[[ES5/statements#Statement|Statement]]'' ''[[ES5/functions#FunctionDeclaration|FunctionDeclaration]]''
产生式 ' : opt 依照下面的步骤来解释执行:
- 若 ' 的指令序言(参考 14.1 章)中,包含严格模式指令, 或者满足 10.1.1 章节所描述的任何一个条件,则 ' 的代码就是一段严格模式代码,并对应性的,以严格模式或非严格模式,依照下面列出的步骤来解释执行代码。
- 若没有 ' 部分 , 则返回 (normal, empty, empty)。
- 令 <var>progCxt</var> 为一个新的,如 10.4.1 章节所描述的,应用于全局代码的执行环境。
- 令 <var>result</var> 为解释执行 ' 的结果。
- 退出 <var>progCxt</var> 这个执行环境。
- 返回 <var>result</var>。
产生式 ' : ' ' 依照下面的步骤来解释执行 :
- 令 <var>headResult</var> 为解释执行 ' 的结果。
- 若 <var>headResult</var> 是非常规性完结的,返回 <var>headResult</var>。
- 令 <var>tailResult</var> 为解释执行 ' 的结果。
- 若 <var>tailResult</var>.value 为 empty,令 <var>V</var> = <var>headResult</var>.value,其他情况,令 <var>V</var> = <var>tailResult</var>.value。
- 返回 (<var>tailResult</var>.type, <var>V</var>, <var>tailResult</var>.target)。
- 返回解释执行 Statement 的结果。
- 返回 (normal, empty, empty)。
一个指令序言,是那些从 ' 或 FunctionBody 的首个 ' 开始,到那些完全由一个字符串字面量后面跟一个分号,所构成的最长的 ExpressionStatement 序列。ExpressionStatement 序列中的每一个都是 StringLiteral 后面接分号,可以显式的插入,或者借助分号自动插入机制来插入。一个指令序言也可以是一个空的序列。
严格模式指令是一个 "use strict" 或 'use strict' 的 StringLiteral。一个严格模式指令不应该包含 EscapeSequence 或 LineContinuation。
一个指令序言,可以不仅仅包含一个严格模式指令。然而,当这种情况出现的时候,ECMAScript 实现可以发出一个相关警告。