ECMAScript | Язык ECMAScript: лексическая грамматика

Исходный текст сценария (Script) или модуля (Module) ECMAScript сначала преобразуется в последовательность входных элементов, которые представляют собой токены, символы конца строки, комментарии или пробелы. Исходный текст сканируется слева направо, многократно принимая самую длинную последовательность кодовых точек в качестве следующего элемента ввода.

Есть несколько ситуаций, когда идентификация лексических входных элементов чувствительна к синтаксическому грамматическому контексту, который использует входные элементы. Это требует множественных символов цели для лексической грамматики.

Цель InputElementRegExpOrTemplateTail используется в контекстах синтаксической грамматики, где разрешены RegularExpressionLiteral, TemplateMiddle или TemplateTail. Символ цели InputElementRegExp используется во всех контекстах синтаксической грамматики, где разрешен RegularExpressionLiteral, но не разрешены ни TemplateMiddle, ни TemplateTail. Цель InputElementTemplateTail используется во всех контекстах синтаксической грамматики, где TemplateMiddle или TemplateTail разрешены, но RegularExpressionLiteral не разрешены. Во всех других контекстах InputElementDiv используется как лексический символ цели.

Примечание

Использование нескольких лексических целей гарантирует отсутствие лексических двусмысленностей, которые могли бы повлиять на автоматическую вставку точки с запятой. Например, нет контекстов синтаксической грамматики, в которых разрешены как ведущее деление или присвоение деления, так и ведущий RegularExpressionLiteral. На это не влияет вставка точки с запятой (смотрите 12.9); в следующих примерах:

a = b
/hi/g.exec(c).map(d);

где первая кодовая точка без пробелов и комментариев после символа конца строки LineTerminator — это U+002F (SOLIDUS), а синтаксический контекст допускает деление или назначение деления, точка с запятой не вставляется в LineTerminator. То есть приведенный выше пример интерпретируется так же, как:

a = b / hi / g.exec(c).map(d);

Синтаксис Лексической Грамматики

InputElementDiv ::

WhiteSpace

LineTerminator

Comment

CommonToken

DivPunctuator

RightBracePunctuator

InputElementRegExp ::

WhiteSpace

LineTerminator

Comment

CommonToken

RightBracePunctuator

RegularExpressionLiteral

InputElementRegExpOrTemplateTail ::

WhiteSpace

LineTerminator

Comment

CommonToken

RegularExpressionLiteral

TemplateSubstitutionTail

InputElementTemplateTail ::

WhiteSpace

LineTerminator

Comment

CommonToken

DivPunctuator

TemplateSubstitutionTail

 

Разделы

12.1 Символы управления форматом Unicode (Unicode Format-Control Characters)
12.2 Пробел (White Space)
12.3 Символы конца строки (Line Terminators)
12.4 Комментарии (Comments)
12.5 Токены (Tokens)
12.6 Имена и ключевые слова (Names and Keywords)
12.7 Пунктуаторы (Punctuators)
12.8 Литералы (Literals)
12.9 Автоматическая вставка точки с запятой (Automatic Semicolon Insertion)

 

Информационные ссылки

Стандарт ECMAScript — Раздел «12 ECMAScript Language: Lexical Grammar» — https://tc39.es/ecma262/#sec-ecmascript-language-lexical-grammar

Поделись записью