De fato, a linguagem POSIX BRE não pode expressar todas as expressões regulares porque falta alternância. Não consegue nem reconhecer todos os idiomas finitos, muito menos todos os idiomas regulares.
Por exemplo, não é reconhecível como BRE. Para provar isso, considere qual poderia ser a forma sintática de nível superior:{ a b , b a }
- Não pode ser uma das formas de caractere único, pois o idioma possui palavras com tamanho .> 1
- Não pode ser porque isso corresponderia à string vazia.R∗
- Não pode ser exceto com m = n = 1 (nesse caso, voltamos ao problema original) porque isso corresponderia a cadeias de diferentes comprimentos ou à cadeia vazia.R{ m , n }m = n = 1
- Portanto, tem que haver concatenação: . Agora considere como a b é reconhecido:
R1R2a b
- Se reconhece um b , em seguida, R 2 não deve reconhecer qualquer coisa outra coisa senão a cadeia vazia. Portanto, R 1 deve reconhecer { a b , b a } e voltamos ao problema original.R1a bR2R1{ a b , b a }
- Se reconhece um , mas não um b , em seguida, R 2 deve reconhecer b . Mas, em seguida, R 1 R 2 reconhece todas as palavras da forma u b onde R 1 reconhece u , então R 1 não deve reconhecer qualquer coisa diferente de um . Não há como reconhecer b a .R1umaa bR2bR1R2você bR1vocêR1umab a
- Se reconhece nem um b nem um , em seguida, a única maneira para R reconhecer um b é se R 1 reconhece a cadeia vazia, caso em que estamos de volta ao problema original como acima, mas por R 2 neste momento.R1a bumaRa bR1R2
Quando “voltamos ao problema original”, isso significa que a única solução para encontrar um BRE reconhece o idioma é encontrar um BRE menor que possua a mesma propriedade. Esta é uma descida infinita , portanto não há BRE que possua a propriedade desejada.
Eu não acho que exista uma caracterização "legal" de linguagens reconhecíveis para BRE, por exemplo, linguagens reconhecíveis por uma classe de autômatos "legal".
{ w w ∣ w ∈ { a , b }∗}\(.*\)\1
(abc|bac)*
.