https://bugs.exim.org/show_bug.cgi?id=2301
Mehmet gelisin <mehmetgeli...@aol.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mehmetgeli...@aol.com --- Comment #6 from Mehmet gelisin <mehmetgeli...@aol.com> --- Essentially: Remove this restriction from PCRE Recursion processing in PCRE differs from Perl in two important ways. In PCRE (like Python, but unlike Perl), a recursive subpattern call is always treated as an atomic group. That is, once it has matched some of the subject string, it is never re-entered, even if it contains untried alternatives and there is a subsequent matching failure. http://www.compilatori.com/ It leads to unparseable context-sensitive grammars like: { S -> 0B1 | 1B0 | 1C1 | 0C0, A -> 0 | 1, B -> ABA | D1, C -> ACA | D0, D -> _E | _ , E -> AE | A } This is essentially adding two bits at a same offset of two binary numbers and checking if it matches the trailing bit. [The actual goal was matching correct additions of two binary numbers in form of a + b = c where a, b and c each match [01]+.] http://www.wearelondonmade.com/ I wished this could be expressed as: (?(DEFINE) (?<s> 0(?&b)1 | 1(?&b)0 | 1(?&c)1 | 0(?&c)0 ) (?<a> 0 | 1 ) (?<b> (?&a)(?&b)(?&a) | (?&d)1 ) (?<c> (?&a)(?&c)(?&a) | (?&d)0 ) (?<d> _(?&e) | _ ) (?<e> (?&a)(?&e) | (?&a) ) ) http://www.jopspeech.com/ ^(?&s)$ Example matches: 0_00 01_101 Example non-matches: 0_01 100_00011 http://joerg.li/ In case this is declined, _why_ is PCRE exhibiting that behavior? Essentially: Remove this restriction from PCRE http://connstr.net/ Recursion processing in PCRE differs from Perl in two important ways. In PCRE (like Python, but unlike Perl), a recursive subpattern call is always treated as an atomic group. http://embermanchester.uk/ That is, once it has matched some of the subject string, it is never re-entered, even if it contains untried alternatives and there is a subsequent matching failure. http://www.slipstone.co.uk/ It leads to unparseable context-sensitive grammars like: { S -> 0B1 | 1B0 | 1C1 | 0C0, A -> 0 | 1, B -> ABA | D1, C -> ACA | D0, D -> _E | _ , http://www.logoarts.co.uk/ E -> AE | A } This is essentially adding two bits at a same offset of two binary numbers and checking if it matches the trailing bit. http://www.acpirateradio.co.uk/ [The actual goal was matching correct additions of two binary numbers in form of a + b = c where a, b and c each match [01]+.] I wished this could be expressed as: (?(DEFINE) https://waytowhatsnext.com/ (?<s> 0(?&b)1 | 1(?&b)0 | 1(?&c)1 | 0(?&c)0 ) (?<a> 0 | 1 ) (?<b> (?&a)(?&b)(?&a) | (?&d)1 ) (?<c> (?&a)(?&c)(?&a) | (?&d)0 ) (?<d> _(?&e) | _ ) https://www.webb-dev.co.uk/ (?<e> (?&a)(?&e) | (?&a) ) ) ^(?&s)$ Example matches: 0_00 http://www.iu-bloomington.com/ 01_101 Example non-matches: 0_01 100_00011 http://www-look-4.com/ In case this is declined, _why_ is PCRE exhibiting that behavior? -- You are receiving this mail because: You are on the CC list for the bug. -- ## List details at https://lists.exim.org/mailman/listinfo/pcre-dev