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

(f)lexers 使用的规则模式

如何解决(f)lexers 使用的规则模式

我浏览了许多 lex 文件,在一些文件中我发现了一些关于方括号用法的奇怪结构。我希望在方括号内可以使用其他方括号如下(使用 ... 作为占位符)

我发现的奇怪模式是 (a.0.):

  • [[][\t ]* 所以在 [[] 部分没有转义 [
  • ({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])* { 也是一个未转义的 [ 但现在后跟一个等号 (=)
  • [%&()*+,\-/:;<=>[\]^{|}~] 不是转义的 [ 而是转义的 ]
  • [^ ':["?"]* 在未转义的 [ 之后还有一些字符。

我的问题:

  • 是否在某处描述了这种行为?
  • 还是错误(尽管 flex 2.6.4 没有给出警告或错误)?

解决方法

  • [[][\t ]*[[] 部分匹配仅由 [ 组成的字符类。也可以写成\[
  • ({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])*\[ 等价于 [[]。最后是[[=],它是一个由[=组成的字符类。
  • [%&()*+,\-/:;<=>[\]^{|}~] — 在字符类中,[ 没有特殊意义(尽管用于整理元素、等价类和字符类的 POSIX regular expression 符号 — 例如 [[:space:]] —使讨论复杂化)。如果将 ] 放在首位(或紧跟在否定字符类的 ^ 之后),则它代表 ] 而不是类的结尾。
  • [^ ':["?"]* — 重复的 " 没有任何用处;其余的和往常一样。这是除空白、单引号、冒号、左方括号、双引号或问号之外的任何字符的零次或多次重复。

符号都是正则表达式形成规则的直接结果。

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