Lex:将长正则表达式拆分为多行

Lex: Breaking up long regular expressions over multiple lines

在 .l 文件中打破多行长 lex 正则表达式的正确语法是什么。

例如,假设我有一个正则表达式:

word1|word2|word3|word4  ECHO;

当我尝试这样做时:

word1|word2|
word3|word4  ECHO;

我收到一个错误。在 lex 中将正则表达式分解为多行的正确方法是什么?

使用 flex(作为标准 lex 语法的扩展),您可以使用 (?x:…) 语法,类似于 PCRE/Perl 扩展语法。请注意,与 PCRE 不同,应用 x 标志的文本被括号包围。 [注1].

括号内的注释和空格将被忽略,除非它们被转义或引用。所以你可以这样写:

(?x:
   word1 |
   word2 |
   word3 |
   word4 )    ECHO;

注意:此语法不能用于定义部分,只能用于规则部分。我不知道这是否是设计使然,或者未来的某些增强功能是否会解除限制。

有关更多详细信息,请参阅 flex manual。 (它在以‘(?r-s:pattern)’开头的部分)


备注

  1. 在 PCRE(即 python)中,您可以编写 (?x) --- extended regex,扩展名会一直持续到正则表达式结束,除非您将其关闭。我什至不会尝试解释 Perl 用来检测扩展正则表达式结尾的规则。