JFlex Block Comment规则的解释
Explanation of JFlex Block Comment rule
我一直在寻找如何在 JFlex 中实现块注释以在 intellij 中实现自定义语言支持,发现它可以描述为
"/*" !([^]* "*/" [^]*) ("*/")?
我不太明白如何阅读这篇文章,希望能用通俗易懂的英语解释一下。
目前我正在阅读这篇文章
- 首先期待
/*
然后
- 预计不会
- 有什么角色吗? (不确定他们为什么使用
[^]
)零次或多次
- 已关注
*/
- 零个或多个任意字符
- 可选
*/
你基本上已经正确破译了。以下是一些解释性说明:
[^]*
匹配任意字符序列。它与 .*
类似,只是 .
不匹配换行符或未配对的代理项; [^]
完全匹配任何内容。
所以 ([^]* "*/" [^]*)
匹配任何包含 */
的序列。因此 !([^]* "*/" [^]*)
匹配除包含 */
的序列之外的任何内容。换句话说,它匹配 */
之前的所有内容,但不包括 */
,这是评论的其余部分。
现在如果用户犯了错误忘记关闭最后一条评论会怎样?在这种情况下,没有 */
并将匹配到输入的末尾。因为没有办法知道注释应该在哪里结束(不能读懂程序员的想法),我们能做的最好的事情就是停止尝试解析。因此,我们接受未终止的评论作为评论。这就是为什么最后的 "*/"?
是可选的。如果有则匹配注释终止符,否则匹配输入末尾的空序列。
我一直在寻找如何在 JFlex 中实现块注释以在 intellij 中实现自定义语言支持,发现它可以描述为
"/*" !([^]* "*/" [^]*) ("*/")?
我不太明白如何阅读这篇文章,希望能用通俗易懂的英语解释一下。
目前我正在阅读这篇文章
- 首先期待
/*
然后 - 预计不会
- 有什么角色吗? (不确定他们为什么使用
[^]
)零次或多次 - 已关注
*/
- 零个或多个任意字符
- 有什么角色吗? (不确定他们为什么使用
- 可选
*/
你基本上已经正确破译了。以下是一些解释性说明:
[^]*
匹配任意字符序列。它与 .*
类似,只是 .
不匹配换行符或未配对的代理项; [^]
完全匹配任何内容。
所以 ([^]* "*/" [^]*)
匹配任何包含 */
的序列。因此 !([^]* "*/" [^]*)
匹配除包含 */
的序列之外的任何内容。换句话说,它匹配 */
之前的所有内容,但不包括 */
,这是评论的其余部分。
现在如果用户犯了错误忘记关闭最后一条评论会怎样?在这种情况下,没有 */
并将匹配到输入的末尾。因为没有办法知道注释应该在哪里结束(不能读懂程序员的想法),我们能做的最好的事情就是停止尝试解析。因此,我们接受未终止的评论作为评论。这就是为什么最后的 "*/"?
是可选的。如果有则匹配注释终止符,否则匹配输入末尾的空序列。