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