参考以下C#语言标准规范的制作片段,
fragment Delimited_Comment
: '/*' Delimited_Comment_Section* ASTERISK+ '/'
;
fragment Delimited_Comment_Section
: SLASH
| ASTERISK* Not_Slash_Or_Asterisk
;
fragment Not_Slash_Or_Asterisk
: ~('/' | '*') // Any except SLASH or ASTERISK
;
我不明白
ASTERISK* Not_Slash_Or_Asterisk
部分。如果 ASTERISK*
表示零个或多个星号,为什么额外的星号受到 Not_Slash_Or_Asterisk
的限制。
请帮我理解C#语言标准规范中的上述产生式。
fragment Delimited_Comment
: '/*' Delimited_Comment_Section* ASTERISK+ '/'
;
fragment Delimited_Comment_Section
: SLASH
| ASTERISK* Not_Slash_Or_Asterisk
;
fragment Not_Slash_Or_Asterisk
: ~('/' | '*') // Any except SLASH or ASTERISK
;
因此,分隔注释是
/*
,后跟不是 */
的内容,后跟 1 个或多个 *
,最后是 /
。
Delimited_Comment_Section
表示如果您有一个或多个 *
,它们后面不能跟 /
(ASTERISK* Not_Slash_Or_Asterisk
)。拥有 /
的唯一方法是前面没有 *
。