MultiLineComment的实现是否错误?

时间:2019-02-25 13:23:19

标签: javascript ecmascript-6

ECMAScript的报价:

MultiLineComment ::
/* MultiLineCommentCharsopt */

MultiLineCommentChars ::
MultiLineNotAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt

PostAsteriskCommentChars ::
MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt

MultiLineNotAsteriskChar ::
SourceCharacter but not *

MultiLineNotForwardSlashOrAsteriskChar ::
SourceCharacter but not one of / or *

如果我理解正确,则/***//*/*/之类的记录应该会导致错误,但是不会发生。为什么会发生?

我在Google chrome,firefox,opera和maxthone中检查了此

1 个答案:

答案 0 :(得分:3)

/***/

外部/* ... */是MultilineComment的模式,因此内部*必须匹配MultilineCommentChars。现在,如果您看到,您将看到:

MultiLineCommentChars ::
 * PostAsteriskCommentChars [opt]

实际上可以只是一个*,因为以下部分是可选的(这就是[opt]的意思)。

/*/*/

外部还是MultilineComment模式,/必须与MultilineCommentChars匹配,

MultiLineCommentChars ::
 MultiLineNotAsteriskChar MultiLineCommentChars [opt]

/是MultilineNotAsteriskChar的一部分。

现在整个区域仅用于防止MultilineComment中的*//**/*/无效,/*/**/不是。