POSIX.1-2008で定義されている「Basic Regular Expressions」は代替をサポートしていないようですa|b
(ただし、一部のgrep実装はエスケープバージョンを認識しますが\|
)。
定義上、通常の言語は結合の下で閉じられているため、これはPOSIX BREが有限オートマトンよりも表現力が低いことを意味しますか?または、他の構造を使用して交互をシミュレートする方法はありますか?
POSIX.1-2008で定義されている「Basic Regular Expressions」は代替をサポートしていないようですa|b
(ただし、一部のgrep実装はエスケープバージョンを認識しますが\|
)。
定義上、通常の言語は結合の下で閉じられているため、これはPOSIX BREが有限オートマトンよりも表現力が低いことを意味しますか?または、他の構造を使用して交互をシミュレートする方法はありますか?
回答:
確かに、POSIX BRE言語は、代替がないため、すべての正規表現を表現できません。すべての通常の言語は言うまでもなく、すべての有限言語を認識することもできません。
たとえば、はBREとして認識されません。これを証明するために、トップレベルの構文形式を考えてみましょう。
「元の問題に戻った」場合、BREを見つける唯一の解決策は、同じプロパティを持つ小さなBREを見つけることです。これは無限降下であるため、目的のプロパティを持つBREはありません。
私は、BREが認識できる言語、たとえば「いい」クラスのオートマトンによって認識できる言語の「いい」特徴があるとは思わない。
後方参照は表現力を追加するため、BRE認識可能言語は実際には通常の言語のサブクラスではないことに注意してください。例えば BREによって認識されるが、有名な規則的ではありません。後方参照のないBREは、正規表現に対する単なる構文上の砂糖であるため、認識できる言語は正規言語のサブクラスです。\(.*\)\1
(abc|bac)*
。