uck*_*man 7 regex theory pcre alternation
假设我有一个正则表达式语言支持文字,正面和负面的字符类,有序交替,贪婪的量词?,*以及+和nongreedy量词??,*?和+?.(这实际上是PCRE的一个子集,没有反向引用,环视断言或其他一些更高级的位.)用无序交替替换有序交替是否会降低这种形式主义的表达能力?
(无序交替---有时也称为"无序选择"---是L(S | T)= L(S)+ L(T),而有序交替是L(S | T)= L (S)+(L(T) - {a in L(T):a在L(S)中延伸一些b}}.具体地说,模式a|aa将匹配字符串a,aa如果交替是无序的,但仅a在交替时订购.)
换句话说,给定包含有序交替的模式S,该模式是否可以重写为不包含有序替换的等效模式T(但可能是无序替换)?
如果在文献中考虑过这个问题,我会感谢任何人都可以提供的任何参考.我几乎没有关于扩展正则表达式形式主义的表达能力的任何理论工作(除了关于后向引用如何将你从常规语言转移到无上下文语法之外).
Paw*_*rok -1
我没有查过任何文献,但我认为你可以为有序交替构建一个 DFA,从而证明它不会通过以下方式增加任何表达能力:
直观地说,它的作用是在输出 DFA 中创建两个区域。其中一个对应于交替的第一个参数,另一个对应于第二个参数。只要交替的第一个参数可能匹配,我们就留在第一部分。当遇到一个可以确定第一个参数不匹配的符号时,如果可能的话,我们此时会切换到第二部分。如果此方法有误,请评论。