Спецификация ECMAScript 5.1 с аннотациями

Поделиться

14 Программа #

Синтаксис

Program :

SourceElementsopt

SourceElements :

SourceElement
SourceElements SourceElement

SourceElement :

Statement
FunctionDeclaration

Семантика

Для вычисления Program : SourceElementsopt выполняются следующие шаги:

  1. Код этой программы Program является кодом в строгом режиме, если Директивный пролог (14.1) для его SourceElements Элементы исходного кода содержит директиву "Use Strict", или если применимо какое-либо из условий, указанных в пункте 10.1.1. Если код этой программы Program является кодом в строгом режиме, то SourceElements в следующих шагах вычисляется как код в строгом режиме. В противном случае SourceElements в следующих шагах вычисляется как код не в строгом режиме.

  2. Если SourceElements отсутствует, вернуть (normal, empty, empty).

  3. Пусть progCxt будет новым контекстом исполнения для глобального кода, как описано в пункте 10.4.1.

  4. Пусть result будет результатом вычисления SourceElements.

  5. Выйти из контекста исполнения progCxt.

  6. Вернуть result.

ПРИМЕЧАНИЕ Процесс инициирования вычисления программы Program, а также процесс обработки результата этого вычисления определяются не данной спецификацией, а реализацией ECMAScript.

Для вычисления SourceElements : SourceElements SourceElement выполняются следующие шаги:

  1. Пусть headResult будет результатом вычисления SourceElements.

  2. Если headResultнепредвиденное завершение, вернуть headResult.

  3. Пусть tailResult будет результатом вычисления SourceElement.

  4. Если tailResult.value равно empty, пусть V = headResult.value, в противном случае пусть V = tailResult.value.

  5. Вернуть (tailResult.type, V, tailResult.target)

Для вычисления SourceElement : Statement выполняются следующие шаги:

  1. Вернуть результат вычисления Statement.

Для вычисления SourceElement : FunctionDeclaration выполняются следующие шаги:

  1. Вернуть (normal, empty, empty).

14.1 Директивные прологи и директива "Use Strict" #

Директивный пролог является самой длинной последовательностью порождающих правил ExpressionStatement Инструкция-выражение, встречающихся в Program или в FunctionBody в качестве исходных порождающих правил SourceElement Элемент исходного кода, где каждая ExpressionStatement в последовательности полностью состоит из токена StringLiteral Строковый литерал с последующей точкой с запятой. Точка с запятой может быть указана явно, или может быть вставлена посредством автоматической подстановки точки с запятой. Директивный пролог может представлять собой пустую последовательность.

Директива "Use Strict" представляет собой инструкцию-выражение ExpressionStatement в Директивном прологе, строковый литерал которой – точная последовательность символов "use strict" или 'use strict'. Директива "Use Strict" не может содержать EscapeSequence Управляющая последовательность или LineContinuation Продолжение строки.

Директивный пролог может содержать более одной директивы "Use Strict", однако в этом случае реализация может сгенерировать предупреждение.

ПРИМЕЧАНИЕ Порождающие правила ExpressionStatement для Директивного пролога, как правило, вычисляются во время вычисления правила SourceElements, в которое они вложены. Реализации могут определять обусловленные реализацией значения для правил ExpressionStatement, не являющихся Директивой "Use Strict", которые встречаются в Директивном прологе. При наличии соответствующего механизма уведомлений реализация должна сгенерировать исключение, если в Директивном прологе ей встретится ExpressionStatement, которое не является директивой "Use Strict" или которое не имеет определяемого реализацией значения.