自动分号插入规则
分号插入有三个基本规则:
- 当从左到右解析程序时,遇到任何语法生成不允许的令牌(称为违规令牌 ),如果出现以下一个或多个,则在违规令牌之前自动插入分号条件是真的:
- 违规令牌与前一令牌分开至少一个
LineTerminator
。- 违规令牌是
}
。
- 当从左到右解析程序时,会遇到令牌输入流的末尾,并且解析器无法将输入令牌流解析为单个完整的 ECMAScript
Program
,然后在结尾处自动插入分号输入流。- 当从左到右解析程序时,会遇到某些语法生成所允许的令牌,但是生产是限制生产,并且令牌将是紧跟注释后的终端或非终端的第一个令牌“ [no
LineTerminator
here] ”在限制生产中(因此这样的标记称为限制标记),并且受限标记与前一标记分开至少一个LineTerminator
,然后在限制标记之前自动插入分号。但是,前面的规则还有一个额外的重要条件:如果分号将被解析为空语句,或者如果该分号将成为
for
语句标题中的两个分号之一,则永远不会自动插入分号(请参阅 12.6.3)。