POSIX.1-2008에 정의 된 "기본 정규 표현식"은 대체를 지원하지 않습니다 a|b
(일부 grep 구현은 이스케이프 된 버전을 인식하지만 \|
).
정규 언어는 정의에 따라 통합되어 닫혀 있기 때문에 POSIX BRE가 유한 오토 마톤보다 표현력이 낮다는 의미입니까? 아니면 다른 구조를 사용하여 교대를 시뮬레이트하는 방법이 있습니까?
POSIX.1-2008에 정의 된 "기본 정규 표현식"은 대체를 지원하지 않습니다 a|b
(일부 grep 구현은 이스케이프 된 버전을 인식하지만 \|
).
정규 언어는 정의에 따라 통합되어 닫혀 있기 때문에 POSIX BRE가 유한 오토 마톤보다 표현력이 낮다는 의미입니까? 아니면 다른 구조를 사용하여 교대를 시뮬레이트하는 방법이 있습니까?
답변:
실제로 POSIX BRE 언어는 대체가 없기 때문에 모든 정규식을 표현할 수 없습니다. 모든 정규 언어는 물론 모든 유한 언어도 인식 할 수 없습니다.
예를 들어, 는 BRE로 인식 할 수 없습니다. 이를 증명하기 위해 최상위 구문 형식이 무엇인지 고려하십시오.
“원래 문제로 돌아갈 때”는 BRE를 찾는 유일한 해결책은 언어를 인식하는 유일한 해결책은 동일한 속성을 가진 더 작은 BRE를 찾는 것입니다. 이것은 무한 하강 이므로 원하는 속성을 가진 BRE가 없습니다.
예를 들어 "좋은"클래스의 오토마타로 인식 할 수있는 언어와 같이 BRE로 인식 가능한 언어의 "좋은"특성이 있다고 생각하지 않습니다.
\(.*\)\1
(abc|bac)*
.