tsy_77

ecma-262 附录A

tsy_77 · 2017-05-21翻译 · 266阅读 原文链接

A语法 总结#

A.1词汇 语法#

源字符::

  任意 Unicode 码位

输入元素Div::

  空白符</emu-rh

  行终结

  注释

  公共记号

  Div标点

  右括号标点

输入元素正则::

  空白符

  行终结

  注释

  公共记号

  右括号标点

  通常表达式字

输入元素正则或者模版尾::

  空白符

  行终结

  注释

  公共记号

  通常表达式字

  模版替换尾

输入元素模版尾::

  空白符

  行终结

  注释

  公共记号

  Div标点

  模版代替尾

空白符::

  <TAB>

  <VT>

  <FF>

  <SP>

  <NBSP>

  <ZWNBSP>

  <USP>

行终结::

  <LF>

  <CR>

  <LS>

  <PS>

行终结序列::

  <LF>

  <CR>[注意 ≠ <LF>]

  <LS>

  <PS>

  <CR><LF>

注释::

  多行注释

  单行注释

多行注释::

  / 多行注释保留opt/

多行注释::

  多行非星号多行注释opt

  * 后星号注释opt

后星号注释::

  多行非向前斜线或者星号多行注释opt

  * 后星号注释opt

多行非星号::

  源字符不包括 *

多行非向前斜线或者星号::

  源字符 不包括 注释 / *

单行注释::

  // 单行注释opt

单行注释::

  单行注释单行注释opt

单行注释符::

  源字符不包括 行终结

公共记号::

  标识名称

  标点者

  数字

  字符串

  模版

标识名称::

  标识开始

  标识名称标识部分

标识开始::

  unicodeID起始

  $

  _

  \ unicode转义序列

标识部分::

  unicodeID延续

  $

  _

  \ unicode转义序列

  <ZWNJ>

  <ZWJ>

unicodeID起始::

  任何有unicode属性“ID_Start”的编码

unicodeID继续::

  任何有unicode属性“ID_Continue”的编码”

保留字::

  关键字

  未来保留字

  无效字

  布尔字

关键字::如下所示

  break do in typeof case else instanceof var catch export new void class extends return while const finally super with continue for switch yield debugger function this default if throw delete import try

未来保留字::

  enum

  await

await被当作是一个emu-nt>未来保留字模块 作为语法目标.

下列标记也被当作未来保留字 当解析 严格编码模式:

implements package protected

interface private public

标点::如下所示

  { ( ) [ ] . ... ; , < > <= >= == != === !== + - % ++ -- << >> >>> & | ^ ! ~ && || ? : = += -= = %= <<= >>= >>>= &= |= ^= => =

Div标点::

  /

  /=

右括号标点::

  }

null::

  null

布尔字::

  true

  false

数字::

  小数

  二进制整数

  八进制整数

  十六进制整数

小数::

  十进制整型. 小数opt指数部分opt

  . 小数指数部分opt

  十进制整型指数部分opt

十进制整型::

  0

  非零数位小数opt

小数::

  小数

  小数小数

小数::如下所示

  0 1 2 3 4 5 6 7 8 9

非零数字::如下所示

  1 2 3 4 5 6 7 8 9

指数部分::

  指数指示符 有符号整数

指数指示符::如下所示

  e E

有符号整数::

  小数

  + 小数

  - 小数

二进制整数::

  0b 二进制数

  0B 二进制数

二进制数::

  二进制数位

  二进制数位 二进制数位

二进制数位::如下所示

  0 1

八进制整数::

  0o 八进制数字

  0O 八进制数字

八进制数字::

  八进制数位

  八进制数 八进制数位

八进制数位::如下所示

  0 1 2 3 4 5 6 7

十六进制整数::

  0x 十六进制数字

  0X 十六进制数字

十六进制数字::

  十六进制数位

  十六进制数字 十六进制数位

十六进制数位::如下所示

  0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

字符串::

  " 双精度字符opt"

  ' 双精度字符opt'

双精度字符::

  双精度字符 双精度字符opt

单精度字符::

  单精度字符 单精度字符opt

双精度字符::

  源字符不包括 " or \ or 行终结

  \ 转义序列

  行延续

单精度字符串::

  源字符不包括 ' or \ or 行终结

  \ 转义系列

  行延续

行延续::

  \ 行终结序列

转义序列::

  字符转义序列

  0 [注意 ∉ 小数]

  十六进制转义序列

  unicode转义序列

字符转义序列::

  单转义字符

  非转义字符

单精度转义字符::如下所示

  ' " \ b f n r t v

非转义字符::

  源字符不包括转义字符 or 行终结

转义字符::

  单精度转义字符

  小数

  x

  u

十六进制转义字符::

  x [十六进制数位] (http://www.ecma-international.org/ecma-262/7.0/index.html#prod-HexDigit)十六进制数位

unicode转义序列::

  u 十六进制4位数

  u{ 十六进制数字}

十六进制4位数::

  十六进制数位 十六进制数位 十六进制数位 十六进制数位

常规表达式字::

  / 常规表达式体/ 常规表达式标记

常规表达式体::

  常规表达式第一个字符 常规表达式

常规表达式::

  [空]

  常规表达式常规表达式

常规表达式第一个字符::

  非终结符的常规表达式不包括 * \ / [

  常规表达式后斜线序列

  常规表达式分类

常规表达式字符::

  非终结常规表达式不包括 \ / [

  常规表达式后斜线序列

  常规表达式分类

常规表达式后斜线序列::

  \ 常规表达式非终结

非终结常规表达式::

  源字符不包括 行终结

常规表达式分类::

  [ 常规表达式类]

常规表达式类::

  注意

  常规表达式类 常规表达式类

常规表达式类::

  非终结常规表达式不包括 ] or \

  常规表达式后斜线序列

常规表达式标志::

  [空]

  常规表达式标志 标识部分

模版::

  非替代模版

  模版头

非替代模版::

   模版字符opt

模版头::

   模版字符opt${

模版替代尾::

  模版中部

  模版尾

模版中间::

  } 模版字符opt${

模版尾::

  } 模版字符opt`

模版字符::

  模版字符 常规表达式类模版字符opt

模版字符::

  $ [注意 ≠ {]

  \ 转义转义序列

  行继续

  行终结序列

  源字符不包括 ` \ $ 和[空] 行终结

A.2表达式#

标识参考[Yield]:

  标识

  [~Yield]yield

绑定标识[Yield]:

  标识

  [~Yield]yield

标识:

  标识名不包括 保留字

标签标识[Yield]:

  标识

  [~Yield]yield

主要表达式[Yield]:

  this

  标识参考[?Yield]

  常量

  数组[?Yield]

  对象[?Yield]

  函数表达式

  类表达式[?Yield]

  生成器表达式

  常规表达式

  模版[?Yield]

  覆盖括号表达式和箭头参数列表[?Yield]

覆盖括号表达式和箭头参数列表[Yield]:

  (表达式[In, ?Yield])

  ()

  (...绑定标识[?Yield])

  (...绑定模式[?Yield])

  (表达式[In, ?Yield],... 绑定标识[?Yield])

  (表达式[In, ?Yield],... 绑定模式[?Yield])

在生产环境中,

主要表达式:

  覆盖括号表达式和箭头参数列表 覆盖括号表达式和箭头参数列表的解释 使用以下语法进行细化:

括号[Yield]:

  (表达式[In, ?Yield])省略号

:

  null

  布尔

  数字

  字符串

数组[Yield]:

  [省略号号opt]

  [元素列表[?Yield]]

  [元素列表[?Yield],省略号号省略号号opt]

元素列[Yield]:

  省略号opt赋值表达式[In, ?Yield]

  省略号opt分散元素[?Yield]

  元素列表[?Yield], 省略号opt 赋值表达式[In, ?Yield]

  元素列表[?Yield],省略号opt分散元素[?Yield]

省略号:

  ,

  省略号,

分散元素[Yield]:

  ...赋值表达式[In, ?Yield]

对象[Yield]:

  {}

  {属性定义列表[?Yield]}

  {属性定义列表[?Yield],}

属性定义列表[Yield]:

  属性定义列表[?Yield]

  属性定义列表[?Yield], 属性定义[?Yield]

属性定义[Yield]:

  标识引用[?Yield]

  覆盖初始化名称[?Yield]

  属性名称[?Yield]: 赋值表达式[In, ?Yield]

  方法定义[?Yield]

属性名称[Yield]:

  常量属性名称

  计算属性名称[?Yield]

常量属性名称:

  标识名称

  字符串

  数字

计算属性名称[Yield]:

  [赋值表达式[In, ?Yield]]

覆盖初始化名称[Yield]:

  标识引用[?Yield] 初始化[In, ?Yield]

初始化[In, Yield]:

  =赋值表达式[?In, ?Yield]

模版字[Yield]:

  非替代格式

  模版头 表达式[In, ?Yield] 模版跨度[?Yield]

模版跨度[Yield]:

  模版尾

  模版中部列表[?Yield]模版尾

模版中部列表[Yield]:

  模版中部表达式[In, ?Yield]

  模版中部列表[?Yield]模版中部表达式[In, ?Yield]

成员表达式[Yield]:

  初始表达式[?Yield]

  成员表达式[?Yield][ 表达式[In, ?Yield]]

  成员表达式[?Yield]. 标识符名称

  成员表达式[?Yield] 模版字[?Yield]

  超级属性[?Yield]

  元属性

  new成员表达式[?Yield] 参数[?Yield]

超级属性[Yield]:

  super[表达式[In, ?Yield]]

  super.标识符名称

元属性:

  新目标

新目标:

  new.target

新表达式[Yield]:

  成员表达式[?Yield]

  new新表达式[?Yield]

调用表达式[Yield]:

  成员表达式[?Yield] 参数[?Yield]

  超级调用[?Yield]

  调用表达式[?Yield] 参数[?Yield]

  调用表达式[?Yield][ 表达式[In, ?Yield]]

  调用表达式[?Yield]. 标识符名称

  调用表达式[?Yield] 模版字[?Yield]

超级调用[Yield]:

  super参数[?Yield]

参数[Yield]:

  ()

  (参数列表[?Yield])

参数列表[Yield]:

  赋值表达式[In, ?Yield]

  ...赋值表达式[In, ?Yield]

  参数列表[?Yield], 赋值表达式[In, ?Yield]

  参数列表[?Yield],... 赋值表达式[In, ?Yield]

左边表达式[Yield]:

  新表达式[?Yield]

  调用表达式[?Yield]

更新表达式[Yield]:

  左边表达式[?Yield][no 行终结 here]++

  左边表达式[?Yield][no 行终结 here]--

一元表达式[Yield]:

  更新表达式[?Yield]

  delete一元表达式[?Yield]

  void一元表达式[?Yield]

  typeof一元表达式[?Yield]

  +一元表达式[?Yield]

  -一元表达式[?Yield]

  ~一元表达式[?Yield]

  !一元表达式[?Yield]

指数表达式[Yield]:

  一元表达式[?Yield]

  更新表达式[?Yield]** 指数表达式[?Yield]

多重表达式[Yield]:

  指数表达式[?Yield]

  多重表达式[?Yield] 多重操作 指数表达式[?Yield]

多重操作:如下所示

  */%

附加表达式[Yield]:

  多重表达式[?Yield]

  附加表达式[?Yield]+ 多重表达式[?Yield]

  附加表达式[?Yield]- 多重表达式[?Yield]

转换表达式[Yield]:

  附加表达式[?Yield]

  转换表达式[?Yield]<< 附加表达式[?Yield]

  转换表达式[?Yield]>> 附加表达式[?Yield]

  转换表达式[?Yield]>>> 附加表达式[?Yield]

关系表达式[In, Yield]:

  转换表达式[?Yield]

  关系表达式[?In, ?Yield]< 转换表达式[?Yield]

  关系表达式[?In, ?Yield]> 转换表达式[?Yield]

  关系表达式[?In, ?Yield]<= 转换表达式[?Yield]

  关系表达式[?In, ?Yield]>= 转换表达式[?Yield]

  关系表达式[?In, ?Yield]instanceof 转换表达式[?Yield]

  [+In]关系表达式[In, ?Yield]in 转换表达式[?Yield]

相等表达式[In, Yield]:

  关系表达式[?In, ?Yield]

  相等表达式[?In, ?Yield]== 关系表达式[?In, ?Yield]

  相等表达式[?In, ?Yield]!= 关系表达式[?In, ?Yield]

  相等表达式[?In, ?Yield]=== 关系表达式[?In, ?Yield]

  相等表达式[?In, ?Yield]!== 关系表达式[?In, ?Yield]

按位与表达式[In, Yield]:

  相等表达式[?In, ?Yield]

  按位与表达式[?In, ?Yield]& 相等表达式[?In, ?Yield]

按位或表达式[In, Yield]:

  按位与表达式[?In, ?Yield]

  按位或表达式[?In, ?Yield]^ 按位与表达式[?In, ?Yield]

按位或表达式[In, Yield]:

  按位或表达式[?In, ?Yield]

  按位或表达式[?In, ?Yield]| 按位或表达式[?In, ?Yield]

逻辑与表达式[In, Yield]:

  按位或表达式[?In, ?Yield]

  逻辑与表达式[?In, ?Yield]&& 按位或表达式[?In, ?Yield]

逻辑或表达式[In, Yield]:

  逻辑与表达式[?In, ?Yield]

  逻辑或表达式[?In, ?Yield]|| 逻辑与表达式[?In, ?Yield]

条件表达式[In, Yield]:

  逻辑或表达式[?In, ?Yield]

  逻辑或表达式[?In, ?Yield]? 赋值表达式[In, ?Yield]: 赋值表达式[?In, ?Yield]

赋值表达式[In, Yield]:

  条件表达式[?In, ?Yield]

  [+Yield]yield表达式[?In]

  箭头函数[?In, ?Yield]

  左边表达式[?Yield]= 赋值表达式[?In, ?Yield]

  左边表达式[?Yield] 赋值操作符 赋值表达式[?In, ?Yield]

在某些情况下当我们在生产环境时,

赋值表达式:

  左边表达式= 赋值表达式 以下语法用于细化解释 左边表达式:

赋值表达式[Yield]:

  对象赋值模式[?Yield]

  数组赋值模式[?Yield]

对象赋值模式[Yield]:

  {}

  {赋值属性列表[?Yield]}

  {赋值属性列表[?Yield],}

数组赋值模式[Yield]:

  [赋值省略号opt剩余元素[?Yield]opt]

  [赋值元素列表[?Yield]]

  [赋值元素列表[?Yield], 省略号opt 赋值剩余元素[?Yield]opt]

赋值属性列表[Yield]:

  赋值属性[?Yield]

  赋值属性列表[?Yield], 赋值属性[?Yield]

赋值元素列表[Yield]:

  省略号赋值[?Yield]

  赋值元素列表[?Yield], 省略号赋值[?Yield]

赋值省略号元素[Yield]:

  省略号opt 赋值元素[?Yield]

赋值属性[Yield]:

  标识参考[?Yield] 属性初始化[In, ?Yield]opt

  属性名称[?Yield]: 赋值元素[?Yield]

赋值元素[Yield]:

  解构赋值目标[?Yield]初始化[In, ?Yield]opt

赋值剩余元素[Yield]:

  ...解构赋值目标[?Yield]

解构赋值目标[Yield]:

  赋值[?Yield]

赋值操作:如下所示

  =/=%=+=-=<<=>>=>>>=&=^=|=*=

表达式[In, Yield]:

  赋值表达式[?In, ?Yield]

  表达式[?In, ?Yield], 赋值表达式[?In, ?Yield]

A.3语句#

语句[Yield, Return]:

  [语句块][?Yield, ?Return]

  变量语句[?Yield]

  空语句

  表达式语句[?Yield]

  If语句[?Yield, ?Return]

  可中断语句[?Yield, ?Return]

  Continue语句[?Yield]

  Break语句[?Yield]

  [+Return]Return语句[?Yield]

  With语句[?Yield, ?Return]

  标记语句[?Yield, ?Return]

  Throw语句[?Yield]

  Try语句[?Yield, ?Return]

  调试语句

声明[Yield]:

  声明提升[?Yield]

  类声明[?Yield]

  变量声明[In, ?Yield]

声明提升[Yield, Default]:

  函数声明[?Yield, ?Default]

  生成器声明[?Yield, ?Default]

可中断语句[Yield, Return]:

  迭代器语句[?Yield, ?Return]

  Switch语句[?Yield, ?Return]

语句块[Yield, Return]:

  代码块[?Yield, ?Return]

代码块:

  {语句列表}

语句列表[Yield, Return]:

  语句列表项[?Yield, ?Return]

  语句列表[?Yield, ?Return]语句列表项[?Yield, ?Return]

语句列表项[Yield, Return]:

  语句[?Yield, ?Return]

  声明[?Yield]

变量声明[In, Yield]:

  Let或者Const 绑定列表[?In, ?Yield];

Let或者Const:

  let

  const

绑定列表[In, Yield]:

  变量绑定[?In, ?Yield]

  绑定列表[?In, ?Yield],变量绑定[?In, ?Yield]

变量绑定[In, Yield]:

  标志符[?Yield]初始化[?In, ?Yield]opt

  绑定模式[?Yield]初始化[?In, ?Yield]

变量语句[Yield]:

  var变量声明列表[In, ?Yield];

变量声明列表[In, Yield]:

  变量声明[?In, ?Yield]

  变量声明列表[?In, ?Yield],变量声明[?In, ?Yield]

变量声明[In, Yield]:

  标志符[?Yield]初始化[?In, ?Yield]opt

  绑定模式[?Yield]初始化[?In, ?Yield]

绑定模式[Yield]:

  对象绑定模式[?Yield]

  数组绑定模式[?Yield]

数组绑定模式[Yield]:

  {}

  {绑定属性列表[?Yield]}

  {绑定属性列表[?Yield],}

数组绑定列表[Yield]:

  [...opt其余绑定元素[?Yield]opt]

  [绑定元素列表[?Yield]]

  [绑定元素列表[?Yield],...opt其余绑定元素[?Yield]opt]

绑定属性列表[Yield]:

  绑定属性[?Yield]

  绑定属性列表[?Yield],绑定属性[?Yield]

绑定元素列表[Yield]:

  绑定省略号元素[?Yield]

  绑定元素列表[?Yield],绑定省略号元素[?Yield]

绑定省略号元素[Yield]:

  ...opt绑定元素[?Yield]

绑定属性[Yield]:

  单一名称绑定[?Yield]

  属性名[?Yield]:绑定元素[?Yield]

绑定元素[Yield]:

  单一名称绑定[?Yield]

  绑定模式[?Yield]初始化[In, ?Yield]opt

单一名称绑定[Yield]:

  标志符[?Yield]初始化[In, ?Yield]opt

绑定其余元素[Yield]:

  ...标志符[?Yield]

  ...绑定模式[?Yield]

空语句:

  ;

表达式语句[Yield]:

  [注意 ∉ { {, function, class, let [ }]表达式[In, ?Yield];

If语句[Yield, Return]:

  if(表达式[In, ?Yield])语句[?Yield, ?Return]else语句[?Yield, ?Return]

  if(表达式[In, ?Yield])语句[?Yield, ?Return]

迭代器语句[Yield, Return]:

  do语句[?Yield, ?Return]while(表达式[In, ?Yield]);

  while(表达式[In, ?Yield])语句[?Yield, ?Return]

  for([注意 ∉ { let [ }]表达式[?Yield]opt;表达式[In, ?Yield]opt;表达式[In, ?Yield]opt)语句[?Yield, ?Return]

  for(var变量声明列表[?Yield];表达式[In, ?Yield]opt;表达式[In, ?Yield]opt)语句[?Yield, ?Return]

  for([变量声明][?Yield]表达式[In, ?Yield]opt;表达式[In, ?Yield]opt)语句[?Yield, ?Return]

  for([注意 ∉ { let [ }]左边表达式[?Yield]in表达式[In, ?Yield])语句[?Yield, ?Return]

  for(var绑定[?Yield]in表达式[In, ?Yield])语句[?Yield, ?Return]

  for(For声明[?Yield]in表达式[In, ?Yield])语句[?Yield, ?Return]

  for([注意 ≠ let]左边表达式[?Yield]of[赋值表达式][In, ?Yield])语句[?Yield, ?Return]

  for(var绑定[?Yield]of赋值表达式[In, ?Yield])语句[?Yield, ?Return]

  for(For声明[?Yield]of赋值表达式[In, ?Yield])语句[?Yield, ?Return]

For声明[Yield]:

  Let或者Const绑定[?Yield]

For绑定[Yield]:

  标志符[?Yield]

  绑定模式[?Yield]

Continue语句[Yield]:

  continue;

  continue[no 行终止符 here]Label标志符[?Yield];

Break语句[Yield]:

  break;

  break[no 行终止符 here]Label标志符[?Yield];

Return语句[Yield]:

  return;

  return[no 行终止符 here]表达式[In, ?Yield];

With语句[Yield, Return]:

  with(表达式[In, ?Yield])语句[?Yield, ?Return]

Switch语句[Yield, Return]:

  switch(表达式[In, ?Yield])Case块[?Yield, ?Return]

Case块[Yield, Return]:

  {Case子句[?Yield, ?Return]opt}

  {Case子句[?Yield, ?Return]optDefault子句[?Yield, ?Return]Case子句[?Yield, ?Return]opt}

Case子句[Yield, Return]:

  Case子句[?Yield, ?Return]

  Case子句[?Yield, ?Return]Case子句[?Yield, ?Return]

Case子句[Yield, Return]:

  case表达式[In, ?Yield]:语句列表[?Yield, ?Return]opt

Default子句[Yield, Return]:

  default:语句列表[?Yield, ?Return]opt

标签语句[Yield, Return]:

  标签语句[?Yield]:标签项[?Yield, ?Return]

标签项[Yield, Return]:

  语句[?Yield, ?Return]

  函数声明[?Yield]

Throw语句[Yield]:

  throw[no 行终止符 here]表达式[In, ?Yield];

Try语句[Yield, Return]:

  try代码块[?Yield, ?Return]Catch[?Yield, ?Return]

  try代码块[?Yield, ?Return]Finally[?Yield, ?Return]

  try代码块[?Yield, ?Return]Catch[?Yield, ?Return]Finally[?Yield, ?Return]

Catch[Yield, Return]:

  catch( Catch参数[?Yield])代码块[?Yield, ?Return]

Finally[Yield, Return]:

  finally代码块[?Yield, ?Return]

Catch参数[Yield]:

  标志符[?Yield]

  绑定模式[?Yield]

调试语句:

  debugger;

A.4函数和类#

函数声明[Yield, Default]:

  函数标志符[?Yield](形参){函数主体}

  [+Default]function(形参){函数主题}

函数表达式:

  function标志符opt(形参){函数主体}

严格形参[Yield]:

  形参[?Yield]

形参[Yield]:

  [空]

  形参列表[?Yield]

形参列表[Yield]:

  函数其余参数[?Yield]

  形参列表[?Yield]

  形参列表[?Yield],函数其余参数[?Yield]

形参列表[Yield]:

  形参[?Yield]

  形参列表[?Yield],形参[?Yield]

函数其余参数[Yield]:

  绑定其余元素[?Yield]

形参[Yield]:

  绑定元素[?Yield]

函数主体[Yield]:

  函数语句列表[?Yield]

函数语句列表[Yield]:

  语句列表[?Yield, Return]opt

箭头函数[In, Yield]:

  参数[?Yield][这里不允许行终止符here]=>主体[?In]

箭头函数参数[Yield]:

  标志符[?Yield]

  覆盖括号内表达式和箭头函数参数列表[?Yield]

主体[In]:

  [注意 ≠ {]赋值表达式[?In]

  {函数主体}

当生成箭头参数:覆盖括号表达式和箭头参数列表被识别时,使用以下语法来细化其解释:

  (严格形参[?Yield])

方法定义[Yield]:

  属性名称[?Yield](严格形参){函数主题}

  生成器方法[?Yield]

  get属性名称[?Yield](){函数主体}

  设置属性名[?Yield](属性集参数列表){函数主体}

属性集参数列表:

  形参

生成器方法[Yield]:

  *属性名称[?Yield](严格形参[Yield]){生成器主体}

生成器声明[Yield, Default]:

  function*标志符[?Yield](形参[Yield]){生成器主体}

  [+默认]function*(形参[Yield]){生成器主体}

生成器表达式:

  function*标志符[Yield]opt(形参[Yield]){生成器主体}

生成器主体:

  函数主体[Yield]

Yield表达式[In]:

  yield[这里不允许行终止符]*赋值表达式[?In, Yield]

  yield[这里不允许行终止符]赋值表达式[?In, Yield]

类声明[Yield, Default]:

  class标志符[?Yield]尾类[?Yield]

  [+默认]class尾类[?Yield]

类表达式[Yield]:

  class标志符[?Yield]opt尾类[?Yield]

尾类[Yield]:

  类继承[?Yield]opt{类主体[?Yield]opt}

类继承[Yield]:

  extends左边表达式[?Yield]

类主题[Yield]:

  类元素列表[?Yield]

类元素列表[Yield]:

  类元素[?Yield]

  类元素列表[?Yield]类元素[?Yield]

类元素[Yield]:

  方法定义[?Yield]

  static方法定义[?Yield]标志符

  ;

A.5JS脚本和模块#

脚本:

  脚本主体opt

脚本主体:

  声明列表表

模块:

  模块主题opt

模块主体:

  模块项目列表

模块项目列表:

  模块项

  模块项目列表 模块项

模块项:

  导入声明

  输出声明

  声明列表项

导入声明:

  引用 Import From;

  import模块声明;

Import:

  导入默认输出值

  导入命名空间

  导入名称

  导入默认输出值, NameSpaceImport

  导入默认输出值,导入名称

导入默认输出值:

  导入依赖

导入命名空间:

  *as 自定义导入名称

名称导入:

  {}

  {导入列表}

  {导入列表,}

From:

  from模块声明

导入列表:

  导入声明

  导入列表,ImportSpecifier

导入声明:

  已导入的绑定

  识别符名称as已导入的绑定

模块声明:

  字符串常量

已导入的绑定:   标志符

输出声明:

  export* From;

  export输出 From;

  exportExport写法;

  export变量

  export声明

  export default 声明提升[默认]

  export default 类声明[声明]

  export default[注意 ∉ { 函数, }]赋值表达式[In];

Export写法:

  {}

  {输出列表}

  {输出列表,}

输出列表:

  输出声明

  输出列表,ExportSpecifier

输出声明:

  标志符名称

  标志符名称 as 标志符名称

A.6数字转换#

字符串数值常量:::

  字符串空格opt

  字符串空格opt字符串数值常量 字符串空格opt

字符串空格:::

  字符串空格字符 字符串空格opt

字符串空格字符:::

  空格

  行终结符

字符串数值常量:::

  字符串数值常量

  二进制整数常量

  八进制整数常量

  十六进制整数常量

十进制常量:::

  无符号十进制常量

  +无符号十进制常量

  -无符号十进制常量

无符号十进制常量:::

  无限小数

  小数位.小数位opt指数opt

  .小数位 指数opt

  小数位 指数opt

小数位::

  小数位(单数)

  小数位(复数)小数位(单数)

十进制数字::如下所示

  0123456789

指数::

  指数指示符 带符号整数

指数指示符::如下所示

  eE

带符号整数::

  小数位

  +小数位

  -小数位

十六进制整型常量::

  0x十六进制数

  0X十六进制数

十六进制数位::如下所示

  0123456789abcdefABCDEF

字符串数字常量中语法未明确定义的所有语法符号在词汇语法中均有定义。

A.7通用资源标识字符类#

uri:::

  uri字符opt

uri字符:::

  uri字符 uri字符(复数)opt

uri字符:::

  uri保留字

  uri非转义字符

  uri转义字符

uri转义字符:::如下所示

  ;/?:@&=+$,

uri非转义字符:::

  uri Alpha字母

  小数位

  uri标记

uri转义字符:::

  %十六进制数字 十六进制数字

uri Alpha字母:::如下所示

  abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

uri标记:::如下所示

  -_.!~*'()

A.8正则表达式#

模式[U]::

  析取[?U]

析取[U]::

  替代[?U]

  替代[?U]|析取[?U]

替代[U]::

  [空值]

  替代[?U]分词[?U]

分词[U]::

  断言[?U]

  原子[?U]

  原子[?U]量词

断言[U]::

  ^

  $

  \b

  \B

  (?=析取[?U])

  (?!析取[?U])

量词::

  量词前缀

  量词前缀?

量词前缀::

  *

  +

  ?

  {小数点}

  {小数点,}

  {小数点,小数点}

原子[U]::

  模式字符

  .

  \原子转义[?U]

  字符类[?U]

  (析取[?U])

  (?:析取[?U])

语法字符::下述之一

  ^$\.*+?()[]{}|

模式字符::

  源字符并不是语法字符

原子转义[U]::

  十进制转义

  字符转义[?U]

  字符类转义

字符转义[U]::

  控制转义

  c控制字母

  十六进制转义序列

  正则表达式Unicode转义序列 [?U]

  标志转义[?U]

控制转义::下述之一

  fnrtv

控制字母::下述之一

  abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

正则表达式Unicode转义序列[U]::

  [+U]u\u后缀

  [+U]u前缀

  [+U]u后缀

  [+U]u非代理

  [~U]u十六进制4位

  [+U]u{十六进制位}

每个\u后缀对于相关联的u前缀的选择是不明确的,应该与最接近的可能的u前缀相关联,否则将没有相应的\u后缀。

前缀::

  十六进制4位数仅仅当其SV在0xD800到0xDBFF的范围内                     

后缀::

  十六进制4位数仅仅当其SV在0xD800到0xDFFF的范围内

没有前后缀::

  十六进制4位数仅仅当其SV在0xD800到0xDFFF的范围内

标志转义[U]::

  [+U]语法字符

  [+U]/

  [~U]源字符并不是unicode ID 的继续

十进制转义::

  十进制整数字面量[注意 ∉ 十进制位]

字符类转义::下述之一

  dDsSwW

字符类[U]::

  [[注意 ∉ { ^ }]类范围[?U]]

  [^类范围[?U]]

类范围[U]::

  [空]

  非空类范围[?U]

非空类范围[U]::

  类原子[?U]

  类原子[?U]非空类范围没有破折号[?U]

  类原子[?U]-类原子[?U]类范围[?U]

非空类范围没有破折号[U]::

  类原子[?U]

  类原子无破折号[?U]非空类范围没有破折号[?U]

  类原子无破折号[?U]-类原子[?U]类范围[?U]

类原子[U]::

  -

  类原子无破折号[?U]

类原子无破折号[U]::

  源字符不包括\ 和 ] 和 -

  \类转义[?U]

类转义[U]::

  十进制转义

  b

  [+U]-

  字符转义[?U]

  字符类转义

译者tsy_77尚未开通打赏功能

相关文章