Является ли реализация MultiLineComment неправильно? - PullRequest
0 голосов
/ 25 февраля 2019

Цитата из ECMAScript:

MultiLineComment ::
/* MultiLineCommentCharsopt */

MultiLineCommentChars ::
MultiLineNotAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt

PostAsteriskCommentChars ::
MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt

MultiLineNotAsteriskChar ::
SourceCharacter but not *

MultiLineNotForwardSlashOrAsteriskChar ::
SourceCharacter but not one of / or *

Если я правильно понимаю, записи типа /***/ или /*/*/ должны вызвать ошибку, но этого не происходит.Почему это происходит?

PS Я проверил это в Google Chrome, Firefox, Opera и Maxthone

1 Ответ

0 голосов
/ 25 февраля 2019

/***/:

Внешний /* ... */ является шаблоном для MultilineComment, поэтому внутренний * должен соответствовать MultilineCommentChars.Теперь, если вы посмотрите на это, вы увидите, что:

MultiLineCommentChars ::
 * PostAsteriskCommentChars [opt]

на самом деле может быть просто *, поскольку следующая часть является необязательной (вот что означает [opt]).

/*/*/:

Внешняя часть снова является шаблоном MultilineComment, / должна соответствовать MultilineCommentChars, что соответствует

MultiLineCommentChars ::
 MultiLineNotAsteriskChar MultiLineCommentChars [opt]

и / является частью MultilineNotAsteriskChar.

Теперь весь раздел предназначен для предотвращения */ внутри MultilineComment, /**/*/ недействительно, /*/**/ нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...