JFlex Block Comment规则的解释

Explanation of JFlex Block Comment rule

我一直在寻找如何在 JFlex 中实现块注释以在 intellij 中实现自定义语言支持,发现它可以描述为

"/*" !([^]* "*/" [^]*) ("*/")?

我不太明白如何阅读这篇文章,希望能用通俗易懂的英语解释一下。

目前我正在阅读这篇文章

你基本上已经正确破译了。以下是一些解释性说明:

[^]* 匹配任意字符序列。它与 .* 类似,只是 . 不匹配换行符或未配对的代理项; [^] 完全匹配任何内容。

所以 ([^]* "*/" [^]*) 匹配任何包含 */ 的序列。因此 !([^]* "*/" [^]*) 匹配除包含 */ 的序列之外的任何内容。换句话说,它匹配 */ 之前的所有内容,但不包括 */,这是评论的其余部分。

现在如果用户犯了错误忘记关闭最后一条评论会怎样?在这种情况下,没有 */ 并将匹配到输入的末尾。因为没有办法知道注释应该在哪里结束(不能读懂程序员的想法),我们能做的最好的事情就是停止尝试解析。因此,我们接受未终止的评论作为评论。这就是为什么最后的 "*/"? 是可选的。如果有则匹配注释终止符,否则匹配输入末尾的空序列。