(f)lexers 使用的规则模式
Rule-patterns used by (f)lexers
我浏览了许多 lex 文件,在一些文件中我发现了一些关于方括号用法的奇怪结构。我希望在方括号内可以使用其他方括号,如下所示(使用 ...
作为占位符)
- 范围:
[...[a-z] ...]
,其中 [a-z]
再次表示一个范围,如手册中所述 (https://westes.github.io/flex/manual/Patterns.html#Patterns):[[:alpha:][0-9]]
- literal
[...\[...\]...]
其中 \]
和 \]
表示应按字面意思。
我发现的奇怪模式是 (a.0.):
[[][\t ]*
所以在 [[]
部分没有转义 [
({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])* {
也没有转义 [
但现在后面跟着一个等号 (=
)
[%&()*+,\-/:;<=>[\]^{|}~]
未转义 [
但转义 ]
[^ ':["?"]*
未转义的 [
. 后面还有一些字符
我的问题:
- 是否在某处描述了这种行为?
- 还是错误(虽然 flex 2.6.4 没有给出警告或错误)?
[[][\t ]*
— [[]
部分匹配仅由 [
组成的字符 class。也可以写成\[
.
({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])*
— \[
等同于 [[]
。最后是[[=]
,是一个字符class,由[
和=
组成。
[%&()*+,\-/:;<=>[\]^{|}~]
— 在字符 class 内,[
没有特殊意义(尽管 POSIX regular expression 符号用于整理元素,等价 classes 和字符 classes — 例如 [[:space:]]
— 使讨论复杂化)。如果将 ]
放在第一位(或紧跟在否定字符 class 的 ^
之后),它代表 ]
而不是 class 的末尾。
[^ ':["?"]*
— 重复的 "
没有任何用处;其余的和往常一样。这是除空白、单引号、冒号、左方括号、双引号或问号之外的任何字符的零次或多次重复。
这些符号都是正则表达式形成规则的直接结果。
我浏览了许多 lex 文件,在一些文件中我发现了一些关于方括号用法的奇怪结构。我希望在方括号内可以使用其他方括号,如下所示(使用 ...
作为占位符)
- 范围:
[...[a-z] ...]
,其中[a-z]
再次表示一个范围,如手册中所述 (https://westes.github.io/flex/manual/Patterns.html#Patterns):[[:alpha:][0-9]]
- literal
[...\[...\]...]
其中\]
和\]
表示应按字面意思。
我发现的奇怪模式是 (a.0.):
[[][\t ]*
所以在[[]
部分没有转义[
({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])* {
也没有转义[
但现在后面跟着一个等号 (=
)[%&()*+,\-/:;<=>[\]^{|}~]
未转义[
但转义]
[^ ':["?"]*
未转义的[
. 后面还有一些字符
我的问题:
- 是否在某处描述了这种行为?
- 还是错误(虽然 flex 2.6.4 没有给出警告或错误)?
[[][\t ]*
—[[]
部分匹配仅由[
组成的字符 class。也可以写成\[
.({UNQUOTED}|=|\[=*{UNQUOTED})({UNQUOTED}|[[=])*
—\[
等同于[[]
。最后是[[=]
,是一个字符class,由[
和=
组成。[%&()*+,\-/:;<=>[\]^{|}~]
— 在字符 class 内,[
没有特殊意义(尽管 POSIX regular expression 符号用于整理元素,等价 classes 和字符 classes — 例如[[:space:]]
— 使讨论复杂化)。如果将]
放在第一位(或紧跟在否定字符 class 的^
之后),它代表]
而不是 class 的末尾。[^ ':["?"]*
— 重复的"
没有任何用处;其余的和往常一样。这是除空白、单引号、冒号、左方括号、双引号或问号之外的任何字符的零次或多次重复。
这些符号都是正则表达式形成规则的直接结果。