假设我有一个正则表达式语言支持文字,正面和负面字符类,有序交替,贪婪量词?
,*
和+
,以及非正式量词{{1 },??
和*?
。 (这本质上是PCRE的一个子集,没有反向引用,环顾四周的断言,或者其他一些更高级的比特。)用无序交替替换有序交替是否会降低这种形式主义的表达能力?
(无序交替---有时也称为“无序选择”---是L(S | T)= L(S)+ L(T),而有序交替是L(S | T) )= L(S)+(L(T) - {a in L(T):a在L(S)中延伸一些b}}。具体地说,模式+?
将匹配字符串{{1} }和a|aa
如果交替是无序的,但只有a
如果交替是有序的。)
换句话说,给定一个包含有序交替的模式S,该模式是否可以重写为不包含有序替换的等效模式T(但可能是无序替换)?
如果在文献中考虑过这个问题,我会感谢任何人都可以提供的任何参考资料。对于扩展的正则表达式形式主义的表达能力,我几乎没有理论上的工作(除了关于后向引用如何将你从常规语言转移到无上下文语法之外)。
答案 0 :(得分:1)
in http://swtch.com/~rsc/regexp/regexp3.html [section“正则表达式是否与字符串的子字符串匹配?如果是,在哪里?”]有必要在“DFA”中引入优先级的概念(您需要阅读整个系列我怀疑,要理解,但有问题的“DFA”是从“飞行中”NFA图扩展到处理有序的替换。虽然这只是对权威的诉求,而不是证据,但我认为如果russ cox不能这样做(将有序的替换表示为纯粹的DFA),那么没有人知道如何。
答案 1 :(得分:-1)
我没有检查任何文献,但我认为你可以为有序的交替构建DFA,从而证明它不会以下列方式增加任何表达能力:
直观地说,它在输出DFA中创建了两个区域。其中一个对应于交替的第一个参数,另一个对应于第二个参数。只要交替的第一个参数可能匹配,我们就会留在第一部分。当遇到符号使得确定第一个参数不匹配时,如果可能的话,我们切换到第二个部分。如果这种方法错误,请评论。