如何解决(f)lexers 使用的规则模式
我浏览了许多 lex 文件,在一些文件中我发现了一些关于方括号用法的奇怪结构。我希望在方括号内可以使用其他方括号如下(使用 ...
作为占位符)
- ranges:
[...[a-z] ...]
,其中[a-z]
再次表示一个范围,就像在手册中一样 (https://westes.github.io/flex/manual/Patterns.html#Patterns):[[:alpha:][0-9]]
- literal
[...\[...\]...]
其中\]
和\]
表示它们应该被采用。
我发现的奇怪模式是 (a.0.):
-
[[][\t ]*
所以在[[]
部分没有转义[
-
({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])* {
也是一个未转义的[
但现在后跟一个等号 (=
) -
[%&()*+,\-/:;<=>[\]^{|}~]
不是转义的[
而是转义的]
-
[^ ':["?"]*
在未转义的[
之后还有一些字符。
我的问题:
解决方法
-
[[][\t ]*
—[[]
部分匹配仅由[
组成的字符类。也可以写成\[
。 -
({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])*
—\[
等价于[[]
。最后是[[=]
,它是一个由[
和=
组成的字符类。 -
[%&()*+,\-/:;<=>[\]^{|}~]
— 在字符类中,[
没有特殊意义(尽管用于整理元素、等价类和字符类的 POSIX regular expression 符号 — 例如[[:space:]]
—使讨论复杂化)。如果将]
放在首位(或紧跟在否定字符类的^
之后),则它代表]
而不是类的结尾。 -
[^ ':["?"]*
— 重复的"
没有任何用处;其余的和往常一样。这是除空白、单引号、冒号、左方括号、双引号或问号之外的任何字符的零次或多次重复。
符号都是正则表达式形成规则的直接结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。