微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JFlex 块注释规则说明

如何解决JFlex 块注释规则说明

我正在研究如何在 jflex 中实现块注释以在 intellij 中实现自定义语言支持,发现它可以描述为

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

我不太明白如何阅读这篇文章,如果能用简单的英语解释,我会很高兴。

目前我正在阅读本文

  • 首先期待 /* 然后
  • 预计不会
    • 任何字符? (不知道他们为什么使用 [^])零次或多次
    • 关注了*/
    • 任何零个或多个字符
  • 可选的 */

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。