POSIX BRE가 모든 일반 언어를 표현할 수 있습니까?


13

POSIX.1-2008에 정의 된 "기본 정규 표현식"은 대체를 지원하지 않습니다 a|b(일부 grep 구현은 이스케이프 된 버전을 인식하지만 \|).

정규 언어는 정의에 따라 통합되어 닫혀 있기 때문에 POSIX BRE가 유한 오토 마톤보다 표현력이 낮다는 의미입니까? 아니면 다른 구조를 사용하여 교대를 시뮬레이트하는 방법이 있습니까?

답변:


17

실제로 POSIX BRE 언어는 대체가 없기 때문에 모든 정규식을 표현할 수 없습니다. 모든 정규 언어는 물론 모든 유한 언어도 인식 할 수 없습니다.

예를 들어, 는 BRE로 인식 할 수 없습니다. 이를 증명하기 위해 최상위 구문 형식이 무엇인지 고려하십시오.{ab,ba}

  • 그것은 언어의 길이의 단어를 가지고 있기 때문에 단일 문자 형태 중 하나가 될 수 없습니다 .>1
  • R
  • R{m,n}m=n=1
  • R1R2ab
    • R1abR2R1{ab,ba}
    • R1aabR2bR1R2ubR1uR1aba
    • R1abaRabR1R2

“원래 문제로 돌아갈 때”는 BRE를 찾는 유일한 해결책은 언어를 인식하는 유일한 해결책은 동일한 속성을 가진 더 작은 BRE를 찾는 것입니다. 이것은 무한 하강 이므로 원하는 속성을 가진 BRE가 없습니다.

예를 들어 "좋은"클래스의 오토마타로 인식 할 수있는 언어와 같이 BRE로 인식 가능한 언어의 "좋은"특성이 있다고 생각하지 않습니다.

{www{a,b}}\(.*\)\1


1
여러 줄 바꿈으로 구분 된 표현식을 일치시킬 수있는 grep과 같은 도구를 사용하는 경우 모든 대체 항목 (예 : {ab, ba} {ab, ba})의 데카르트 곱을 취합니다 ({abba, abba, baab, baba})가 주어진 "BRE-plus-alternation"및 이에 상응하는 정규 언어와 동등한 것으로 충분합니까?
Random832

1
@ Random832 : 시도하십시오 (abc|bac)*.
rici
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.